Board.KolibriOS.org

Official KolibriOS board
It is currently Mon May 27, 2019 12:32 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 74 posts ]  Go to page Previous 1 2 3 4 5
Author Message
PostPosted: Sat Jan 10, 2015 6:59 pm 
Offline
User avatar

Joined: Sat Jul 05, 2014 11:15 am
Posts: 88
что мы видим:

label.h

Code:
class Label : public Control {
public:
   char* text;
}


потом

test.cpp
Code:
this->txt = new Label();
this->txt->text = "Test Text";


Ошибка:
- ты пытаешься присвоить указателю this->txt->text адрес строки, созданной на статике в функции ApplicationWindow::init()
другими словами, то, что оно работает, это очень частный случай, так как у тебя все выполняется в теле этой самой функции. За пределами нее указатель text будет указывать на мусор. Следи на warnings компилятора.

Если ты хочешь присвоить строку переменной в этом случае нужно сделать это так:
static const sText[] = "Test Text";
this->txt->text = new char[strlen(sText) + 1];
strcpy(this->txt->text, sText);

далее, прямой доступ к мемберам класса -- это плохо. Очень настоятельно рекомендую использовать сетеры-гетеры, например

Code:
label.h

class Label : public Control
{
private:

     void ReleaseText();
     char* text;

public:

   Label();
 ~Label();

  void SetCaption(const char* txt);
  const char* GetCaption() const;
}

label.cpp

Label()
:text(NULL) // обезопасим все указатели, обнуляя их
{
}

~Label()
{
   ReleaseText(); // удаляем текст, если он есть 
}

ReleaseText()
{
   if(text != NULL)
   {
     delete[] text;
     text = NULL;
    }
}

void Label::SetCaption(const char* txt)
{
    ReleaseText();
    text = new char[strlen(txt) + 1];
    strcpy(text, sText);
}


Top
   
PostPosted: Sat Jan 10, 2015 7:05 pm 
Offline
User avatar

Joined: Sat Jul 05, 2014 11:15 am
Posts: 88
кстати, у тебя сишный стиль. Раз уж используешь с++, используй хотя бы std::string

#include <string>

class Label : public Control {
public:
std::string text;
}

this->txt = new Label();
this->txt->text = "Test Text"; // вот теперт это сработает, более того, можно менять данные text


Top
   
PostPosted: Sat Jan 10, 2015 7:17 pm 
Offline

Joined: Sat Oct 11, 2014 6:06 pm
Posts: 67
Quote:
кстати, у тебя сишный стиль. Раз уж используешь с++, используй хотя бы std::string

Я только учусь))) :wink:
а под Kolibri разве есть std::string?

_________________
Чудеса случаются! Это вам любой программист скажет! :)


Top
   
PostPosted: Mon Jan 12, 2015 1:45 pm 
Offline

Joined: Sat Oct 11, 2014 6:06 pm
Posts: 67
займусь переделыванием классов... А проблему с BoxLib не получилось найти? ;-)

_________________
Чудеса случаются! Это вам любой программист скажет! :)


Top
   
PostPosted: Wed Jan 28, 2015 7:04 pm 
Offline

Joined: Sat Oct 11, 2014 6:06 pm
Posts: 67
Сделал свою библиотеку полностью самодостаточной. Никаких функций из файлов
#include <kosSyst.h>
#include <kosFile.h>
Теперь не используется.

Теперь библиотека работает в отдельном пространстве имён, guik, интегрирован мой класс mstring (самодельный аналог класса string с минимальным количеством функций)
Новый пример использования
Code:
#include <kosSyst.h>
#include <kosFile.h>

#include "mylib\core.h"

class ApplicationWindow : public guik::Window {
public:
   guik::Label* txt;
   ApplicationWindow() : Window("Hello, C++") {
      this->txt = new guik::Label("Is is my framework!!!!", 10, 10, COLOR_LIME);
      this->txt->setText("Is is my small framework!!!");

      this->setSizeX(500);
      this->setSizeY(300);
      this->addControl(this->txt);
   };
};

void kos_Main() {
   using guik::Application;
   kos_GetSystemClock(); // Костыль! Почему то VSC++ не хочет компилировать без этой строчки :-D

   Application::setWindow(new ApplicationWindow());
   Application::run();
}


В ближайшее время собираюсь выложить, я вроде тестирую, но хотелось бы, чтобы потестировали другие программисты :wink:
Для этого постараюсь составить небольшую документацию и выложу примеры использования с комментариями

_________________
Чудеса случаются! Это вам любой программист скажет! :)


Top
   
PostPosted: Fri Jan 30, 2015 10:43 pm 
Offline

Joined: Sat Oct 11, 2014 6:06 pm
Posts: 67
Мой фреймворк теперь есть на GitHub!
https://github.com/npaukov/guik

Представляю новую версию:
GUIK LIB 0.0.4
- Библиотека стала полностью самодостаточной. Для использования не нужно подключать никаких дополнительных библиотек
- Теперь библиотека работает в отдельном пространстве имён guik, чтобы не конфликтовать с другими библиотеками
- Было произведено много различных исправлений
- Добавлен класс mstring, это что-то вроде аналога класса string с минимальным набором функций. Он теперь используется во всех
модулях библиотеки, где нужно хранить какие-либо строки, например надпись или заголовок окна
- Добавлена возможность искусственно вызвать событие нажатия на клавишу или клика по кнопке в окне
win->setClickButtonId(ID_кнопки);
win->setLastKeyCode(ID_клавиши);
- Теперь для доступа к свойствам элементов используются только set* и get* методы
- Переименован класс OffcutCustomFigure в OffcutPolygon
- Добавлена возможность обработки нажатия клавиши в окне
- Добавлена возможность создавать кнопку с текствовой надписью, а не просто залитую цветом
+ Можно указывать отступы для надписи относительно краёв кнопки,
размер кнопки в таком случае высчитывается автоматически

_________________
Чудеса случаются! Это вам любой программист скажет! :)


Top
   
PostPosted: Tue May 05, 2015 4:14 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1148
А пример сделанный с использованием последей версии фреймворка?

_________________
я лишь учусь


Top
   
PostPosted: Tue May 05, 2015 3:00 pm 
Offline

Joined: Sat Oct 11, 2014 6:06 pm
Posts: 67
punk_joker wrote:
А пример сделанный с использованием последей версии фреймворка?

Сейчас делаю новую версию, с нуля. "ядро" уже сделано, есть несколько элементов интерфейса.
Если разберусь с компилятором, то скоро выложу... Пока пишу и компилирую под Windows, вместо функций Kolibri использую пустые обёртки, чтобы компилировалось. Никаких библиотек не использую. Даже классы string и vector самописные. А код приложения вот такой примерно получается:
Code:
#include "lib/guik.h"

using namespace guik;

int main() {
   Application app = Application::getInstance();   

   Window win;

   win.setPosition(20, 20);
   win.setSize(400, 200);
   win.title = "My window!";
   win.color = Color(255, 0, 0);
   win.name = "Win1";
   win.setId(1);

   Button button;
   button.setPosition(10, 10);
   button.setSize(75, 25);
   button.text = "Hello!";
   button.backgroundColor.setColor(255, 0, 0);
   button.textColor.setColor(0, 0, 0);
   button.name = "Button";
   button.setId(2);

   win->addChild(&button);

   app.setWindow(&win);

   while (app.run()) {
      guik::debug("Iteration start!");
   }


   return 0;
}

_________________
Чудеса случаются! Это вам любой программист скажет! :)


Top
   
PostPosted: Tue May 05, 2015 8:35 pm 
Offline

Joined: Sat Oct 11, 2014 6:06 pm
Posts: 67
Из основных изменений новой версии:
- новая, более гибкая структура классов (без костылей прошлой версии)
- Использование newlib вместо smalllibc
- возможность добавлять для элемента дочерние (зависимые) элементы. В таком случае, если скрыть родительский элемент, будут скрыты и дочерние элементы. Так же дочерние элементы позиционируются не относительно окна, а относительно родительского элемента. (ещё не оттестировано).
- Возможность задавать элементу уникальные атрибуты ID (нужен для кнопок) и name (для удобства). По этим атрибутам можно искать элементы: Button* button = win.getByName("TestButton"); , Button* button = win.getById(15).. Поиск по всем элементам (включая дочерние): Button* button = win.getByName("TestButton", true); , Button* button = win.getById(15, true). Искать можно не только в окне, но и в других элементах. (не доделано)
- Новая система событий для элементов

_________________
Чудеса случаются! Это вам любой программист скажет! :)


Top
   
 Post subject:
PostPosted: Tue May 05, 2015 9:48 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1148
Проблема с box_lib не решена еще?

_________________
я лишь учусь


Top
   
PostPosted: Tue May 05, 2015 10:00 pm 
Offline

Joined: Sat Oct 11, 2014 6:06 pm
Posts: 67
Quote:
Проблема с box_lib не решена еще?

Пока нет, к сожалению. Сейчас только разобрался с компилятором, буду пробовать. Надеюсь, на этот раз получится

_________________
Чудеса случаются! Это вам любой программист скажет! :)


Top
   
PostPosted: Sun May 10, 2015 9:31 pm 
Offline

Joined: Sat Oct 11, 2014 6:06 pm
Posts: 67
https://github.com/npaukov/guik/
Новая версия на GitHub, правда сейчас есть всего 3 элемента интерфейса((( но буду постепенно новые добавлять.

В архиве есть исходный код фреймворка, скомпилированное приложение, пара статей в формате chm.


Attachments:
File comment: GUIK исходный код
gitguik.zip [43.68 KiB]
Downloaded 122 times

_________________
Чудеса случаются! Это вам любой программист скажет! :)
Top
   
PostPosted: Fri Oct 09, 2015 11:03 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 253
Nikolai1 wrote:
https://github.com/npaukov/guik/
Новая версия на GitHub, правда сейчас есть всего 3 элемента интерфейса((( но буду постепенно новые добавлять.

В архиве есть исходный код фреймворка, скомпилированное приложение, пара статей в формате chm.

Делал еще что нибудь или забросил? :)


Top
   
PostPosted: Sat Oct 10, 2015 3:40 pm 
Offline

Joined: Sat Oct 11, 2014 6:06 pm
Posts: 67
Пока так сложились обстоятельства, что забросил... Но это пока

_________________
Чудеса случаются! Это вам любой программист скажет! :)


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 74 posts ]  Go to page Previous 1 2 3 4 5

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited