Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Сб окт 21, 2017 10:19 pm

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




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

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 67
Добавил ещё 2 элемента интерфейса: "Число" и "Отрезок"
Создание элемента числа:
Код:
NumberLabel* num = new NumberLabel(25);


Создание отрезка из точки (10, 10) в точку (20, 20):
Код:
Offcut* of1 = new Offcut(10, 10, 20, 20);

Вместе с элементом "Отрезок" идёт класс и 2 структуры для рисования простейших фигур отрезками (3 точки и 4 точки)
Пример рисования треугольника, у которого каждая сторона будет окрашена разным цветом:
Код:
void ApplicationWindow::init() {
   this->header = (Dword)"Hello, World!";

   // Структура фигуры с тремя вершинами
   OffcutTriangle* tr = new OffcutTriangle;

   // Заполняем координаты вершин
   tr->v1.x = 0;
   tr->v1.y = 10;

   tr->v2.x = 100;
   tr->v2.y = 100;

   tr->v3.x = 200;
   tr->v3.y = 10;

   // Выполняем регистрацию созданных отрезков в классе окна
   OffcutFigure::draw(this, tr);
   
   // Меняем цвета отрезков, соединяющих вершины
   tr->o1->color = COLOR_RED;
   tr->o2->color = COLOR_GREEN;
   tr->o3->color = COLOR_BLUE;
}

Результат:
Изображение

попробую ещё сделать заливку фигуры цветом

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


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

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 67
- Добавлен класс Application
- Добавлен элемент интерфейса "Отдельный пиксель"
new Pixel(10, 10, COLOR_RED);
- К элементу "Отрезок" добавлен класс OffcutCustomFigure, позволяющий рисовать из отрезков произвольную фигуру,
используя произвольное количество вершин
- Добавлен класс для удобной загрузки DLL
Код:
   dll* dl = new dll("/sys/lib/box_lib.obj");
   dl->exitOnError = false;

   if (!dl->load()) {
      // Ошибка загрузки
   }
   else {
      dword_func* edit_box_draw = (dword_func*)dl->loadFunction("edit_box");
      dword_func* edit_box_key= (dword_func*)dl->loadFunction("edit_box_key");
      dword_func* edit_box_mouse= (dword_func*)dl->loadFunction("edit_box_mouse");
   }


Снова принялся за BoxLib... :roll:

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


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

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 67
Снова пробую вставить EditBox, вот что получилось:
Код:
EditBox* ebox = new EditBox(50, 50, 100);
this->addControl(ebox);


Изображение

#include "../../core.h"
#include "../../classes/events.h"

#include "init.h"
#include "editbox.h"

Класс EditBox'а
Спойлер: Показать
Код:

struct EditBoxStruct {
Dword width, left, top, color, shift_color, focus_border_color, blur_border_color,
text_color, max, text, mouse_variable, flags, size, pos, offset, cl_curs_x, cl_curs_y, shift, shift_old;
};

class EditBox : public Control {
public:
   Dword id;
   Word x,y, width, left, top;
   Dword color, shift_color, focus_border_color, blur_border_color, text_color;
   Dword max;
   char text[256];

   Dword mouse_variable;
   Dword flags;
   Dword size, pos, offset;
   Dword cl_curs_x, cl_curs_y;
   Dword shift, shift_old;

   bool hidden;

   EditBoxStruct component;

   int type;

   EditBox(int x, int y, int width);

   void updateStruct();

   int getType();
   void draw();

   virtual int getId();
   virtual void sysevent(int code);
};

EditBox::EditBox(int x, int y, int size) {
   this->x = x;
   this->y = y;
   this->width = size;
   this->size = size;

   this->color = COLOR_RED;
   this->text_color = COLOR_BLACK;

   this->max = 255;

   //this->text = "Hello, world!";

   this->updateStruct();
}

void EditBox::updateStruct() {
   component.blur_border_color = this->blur_border_color;
   component.cl_curs_x = this->cl_curs_x;
   component.cl_curs_y = this->cl_curs_y;
   component.color = this->color;
   component.flags = this->flags;
   component.focus_border_color = this->focus_border_color;
   component.left = this->x;
   component.max = this->max;
   component.mouse_variable = (Dword)&this->mouse_variable;
   component.offset = this->offset;
   component.pos = this->pos;
   component.shift = this->shift;
   component.shift_color = this->shift_color;
   component.shift_old = this->shift_old;
   component.size = this->size;
   component.text = (Dword)&this->text;
   component.text_color = this->text_color;
   component.top = this->y;
   component.width = this->width;
}

void EditBox::draw() {
   if (!hidden) {
      BoxLib::edit_box_draw((Dword)&this->component);
   }
      //Dword mouse_dd;
      //char fname[256];
      //EditBoxStruct file_box = {200,100, 45, 0xffffff,0x6a9480, COLOR_RED, COLOR_YELLOW, 0x808080,255,(Dword)&fname,(Dword)&mouse_dd};
/**Dword width, left, top, color, shift_color, focus_border_color, blur_border_color,
text_color, max, text, mouse_variable*/
      //BoxLib::edit_box_draw((Dword)&file_box);
   this->call(EVENT_DRAW);
}

void EditBox::sysevent(int code) {
   switch (code) {
      case EVENT_KEY_PRESS:
         BoxLib::edit_box_key((Dword)&this->component);
      break;
   }

   BoxLib::edit_box_mouse((Dword)&this->component);
}

int EditBox::getType() {
   return CONTROL_EDIT_BOX;
}

int EditBox::getId() {
   return this->id;
}

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


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

Зарегистрирован: Ср май 18, 2005 7:27 pm
Сообщения: 1001
Цитата:
К элементу "Отрезок" добавлен класс OffcutCustomFigure, позволяющий рисовать из отрезков произвольную фигуру, используя произвольное количество вершин


Замкнутую фигуру? Тогда это называется http://en.wikipedia.org/wiki/Polygon


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

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 67
Wildwest писал(а):
Тогда это называется http://en.wikipedia.org/wiki/Polygon

Ага, спасибо за поправку, исправлю недочёт

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


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

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 67
Подскажет кто-нибудь насчёт BoxLib.. Вопросы такие:
1. Ввод идёт с неверной кодировке, при вводе любого символа вводится символ ё
2. При нажатии клавиши BackSpace не удаляется символ, а вписывается ещё один, т.е. невозможно стереть введённый текст

А вот как думаете, возможно на C++ сделать элемент интерфейса самому, типа поля для ввода текста, чтобы не использовать никакие библиотеки?

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


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Сб янв 10, 2015 4:30 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1076
При обработке EVENT_KEY_PRESS перед вызовом функции edit'а необходимо получить код нажатой клавиши (ф. 2)

_________________
я лишь учусь


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

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 67
Код:
   switch (code) {
      case EVENT_KEY_PRESS:
         Byte keyCode;
         kos_GetKey(keyCode);
         BoxLib::edit_box_key((Dword)&this->component);
      break;
   }

Не помогло

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


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

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 67
А если несколько раз создавать, такой эффект получается:
Изображение

При нажатии на любую клавишу в текстовое поле вводится один символ, но для каждого текстового поля он разный

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


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

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1076
kos_GetKey(keyCode);

__asm
{
mov ah, keyCode
}
edit_box_key((dword)&cell_box);
edit_box_key((dword)&file_box);

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Сб янв 10, 2015 5:22 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1076
Только вместо последних двух строк
BoxLib::edit_box_key((Dword)&this->component);

_________________
я лишь учусь


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

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 67
Не работает :( а если в классе вместо char text[256] использовать char* text; , а потом инициализировать значением this->text = "Hello, world!";
то в текстовом поле текст "Hello, World!" выводится нормально, а при попытке отредактировать программа закрывается

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


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

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 67
в приложении Table работает же... что у меня нет так? уже все варианты перепробовал

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


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

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


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

Зарегистрирован: Сб окт 11, 2014 6:06 pm
Сообщения: 67
Прикрепил архив. Test.cpp - главный файл приложения, папка mylib - моя библиотека


Вложения:
lib.zip [18.99 КБ]
47 скачиваний

_________________
Чудеса случаются! Это вам любой программист скажет! :)
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 74 сообщения ]  На страницу Пред. 1 2 3 4 5 След.

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


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

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


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

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