Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вс окт 22, 2017 4:48 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 74 сообщения ]  На страницу Пред. 1 2 3 4 5
Автор Сообщение
 Заголовок сообщения: Re: Создание приложений на классах
СообщениеДобавлено: Сб янв 10, 2015 6:59 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Сб июл 05, 2014 11:15 am
Сообщения: 87
что мы видим:

label.h

Код:
class Label : public Control {
public:
   char* text;
}


потом

test.cpp
Код:
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);

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

Код:
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);
}


Вернуться к началу
 Заголовок сообщения: Re: Создание приложений на классах
СообщениеДобавлено: Сб янв 10, 2015 7:05 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Сб июл 05, 2014 11:15 am
Сообщения: 87
кстати, у тебя сишный стиль. Раз уж используешь с++, используй хотя бы std::string

#include <string>

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

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


Вернуться к началу
 Заголовок сообщения: Re: Создание приложений на классах
СообщениеДобавлено: Сб янв 10, 2015 7:17 pm 
Не в сети

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 67
Цитата:
кстати, у тебя сишный стиль. Раз уж используешь с++, используй хотя бы std::string

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

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


Вернуться к началу
 Заголовок сообщения: Re: Создание приложений на классах
СообщениеДобавлено: Пн янв 12, 2015 1:45 pm 
Не в сети

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

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


Вернуться к началу
 Заголовок сообщения: Re: Создание приложений на классах
СообщениеДобавлено: Ср янв 28, 2015 7:04 pm 
Не в сети

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

Теперь библиотека работает в отдельном пространстве имён, guik, интегрирован мой класс mstring (самодельный аналог класса string с минимальным количеством функций)
Новый пример использования
Код:
#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:
Для этого постараюсь составить небольшую документацию и выложу примеры использования с комментариями

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


Вернуться к началу
 Заголовок сообщения: Re: Создание приложений на классах
СообщениеДобавлено: Пт янв 30, 2015 10:43 pm 
Не в сети

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 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
- Добавлена возможность обработки нажатия клавиши в окне
- Добавлена возможность создавать кнопку с текствовой надписью, а не просто залитую цветом
+ Можно указывать отступы для надписи относительно краёв кнопки,
размер кнопки в таком случае высчитывается автоматически

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


Вернуться к началу
 Заголовок сообщения: Re: Создание приложений на классах
СообщениеДобавлено: Вт май 05, 2015 4:14 am 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1076
А пример сделанный с использованием последей версии фреймворка?

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: Создание приложений на классах
СообщениеДобавлено: Вт май 05, 2015 3:00 pm 
Не в сети

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 67
punk_joker писал(а):
А пример сделанный с использованием последей версии фреймворка?

Сейчас делаю новую версию, с нуля. "ядро" уже сделано, есть несколько элементов интерфейса.
Если разберусь с компилятором, то скоро выложу... Пока пишу и компилирую под Windows, вместо функций Kolibri использую пустые обёртки, чтобы компилировалось. Никаких библиотек не использую. Даже классы string и vector самописные. А код приложения вот такой примерно получается:
Код:
#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;
}

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


Вернуться к началу
 Заголовок сообщения: Re: Создание приложений на классах
СообщениеДобавлено: Вт май 05, 2015 8:35 pm 
Не в сети

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 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). Искать можно не только в окне, но и в других элементах. (не доделано)
- Новая система событий для элементов

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


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вт май 05, 2015 9:48 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1076
Проблема с box_lib не решена еще?

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: Создание приложений на классах
СообщениеДобавлено: Вт май 05, 2015 10:00 pm 
Не в сети

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 67
Цитата:
Проблема с box_lib не решена еще?

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

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


Вернуться к началу
 Заголовок сообщения: Re: Создание приложений на классах
СообщениеДобавлено: Вс май 10, 2015 9:31 pm 
Не в сети

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

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


Вложения:
Комментарий к файлу: GUIK исходный код
gitguik.zip [43.68 КБ]
52 скачивания

_________________
Чудеса случаются! Это вам любой программист скажет! :)
Вернуться к началу
 Заголовок сообщения: Re: Создание приложений на классах
СообщениеДобавлено: Пт окт 09, 2015 11:03 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 156
Nikolai1 писал(а):
https://github.com/npaukov/guik/
Новая версия на GitHub, правда сейчас есть всего 3 элемента интерфейса((( но буду постепенно новые добавлять.

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

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


Вернуться к началу
 Заголовок сообщения: Re: Создание приложений на классах
СообщениеДобавлено: Сб окт 10, 2015 3:40 pm 
Не в сети

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 67
Пока так сложились обстоятельства, что забросил... Но это пока

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


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 74 сообщения ]  На страницу Пред. 1 2 3 4 5

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB