Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Dec 06, 2019 4:34 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 74 posts ]  Go to page Previous 1 2 3 4 5 Next
Author Message
PostPosted: Thu Jan 08, 2015 10:40 pm 
Offline

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


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

Вместе с элементом "Отрезок" идёт класс и 2 структуры для рисования простейших фигур отрезками (3 точки и 4 точки)
Пример рисования треугольника, у которого каждая сторона будет окрашена разным цветом:
Code:
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;
}

Результат:
Image

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

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


Top
   
PostPosted: Fri Jan 09, 2015 11:13 pm 
Offline

Joined: Sat Oct 11, 2014 6:06 pm
Posts: 67
- Добавлен класс Application
- Добавлен элемент интерфейса "Отдельный пиксель"
new Pixel(10, 10, COLOR_RED);
- К элементу "Отрезок" добавлен класс OffcutCustomFigure, позволяющий рисовать из отрезков произвольную фигуру,
используя произвольное количество вершин
- Добавлен класс для удобной загрузки DLL
Code:
   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:

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


Top
   
PostPosted: Sat Jan 10, 2015 11:38 am 
Offline

Joined: Sat Oct 11, 2014 6:06 pm
Posts: 67
Снова пробую вставить EditBox, вот что получилось:
Code:
EditBox* ebox = new EditBox(50, 50, 100);
this->addControl(ebox);


Image

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

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

Класс EditBox'а
Spoiler: Show
Code:

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;
}

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


Top
   
PostPosted: Sat Jan 10, 2015 12:47 pm 
Offline

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


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


Top
   
PostPosted: Sat Jan 10, 2015 2:04 pm 
Offline

Joined: Sat Oct 11, 2014 6:06 pm
Posts: 67
Wildwest wrote:
Тогда это называется http://en.wikipedia.org/wiki/Polygon

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

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


Top
   
PostPosted: Sat Jan 10, 2015 2:08 pm 
Offline

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

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

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


Top
   
 Post subject:
PostPosted: Sat Jan 10, 2015 4:30 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1151
При обработке EVENT_KEY_PRESS перед вызовом функции edit'а необходимо получить код нажатой клавиши (ф. 2)

_________________
я лишь учусь


Top
   
PostPosted: Sat Jan 10, 2015 5:02 pm 
Offline

Joined: Sat Oct 11, 2014 6:06 pm
Posts: 67
Code:
   switch (code) {
      case EVENT_KEY_PRESS:
         Byte keyCode;
         kos_GetKey(keyCode);
         BoxLib::edit_box_key((Dword)&this->component);
      break;
   }

Не помогло

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


Top
   
PostPosted: Sat Jan 10, 2015 5:10 pm 
Offline

Joined: Sat Oct 11, 2014 6:06 pm
Posts: 67
А если несколько раз создавать, такой эффект получается:
Image

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

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


Top
   
PostPosted: Sat Jan 10, 2015 5:21 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1151
kos_GetKey(keyCode);

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

_________________
я лишь учусь


Top
   
 Post subject:
PostPosted: Sat Jan 10, 2015 5:22 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1151
Только вместо последних двух строк
BoxLib::edit_box_key((Dword)&this->component);

_________________
я лишь учусь


Top
   
PostPosted: Sat Jan 10, 2015 5:36 pm 
Offline

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

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


Top
   
PostPosted: Sat Jan 10, 2015 5:50 pm 
Offline

Joined: Sat Oct 11, 2014 6:06 pm
Posts: 67
в приложении Table работает же... что у меня нет так? уже все варианты перепробовал

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


Top
   
PostPosted: Sat Jan 10, 2015 6:15 pm 
Offline
User avatar

Joined: Sat Jul 05, 2014 11:15 am
Posts: 88
а где посмотреть весь код? попробую помочь


Top
   
PostPosted: Sat Jan 10, 2015 6:28 pm 
Offline

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


Attachments:
lib.zip [18.99 KiB]
Downloaded 129 times

_________________
Чудеса случаются! Это вам любой программист скажет! :)
Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 74 posts ]  Go to page Previous 1 2 3 4 5 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 0 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:  
cron
Powered by phpBB® Forum Software © phpBB Limited