Создание приложений на классах

High-level languages programming questions
  • - Добавлен класс Application
    - Добавлен элемент интерфейса "Отдельный пиксель"
    new Pixel(10, 10, COLOR_RED);
    - К элементу "Отрезок" добавлен класс OffcutCustomFigure, позволяющий рисовать из отрезков произвольную фигуру,
    используя произвольное количество вершин
    - Добавлен класс для удобной загрузки DLL

    Code: Select all

    	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:
    Чудеса случаются! Это вам любой программист скажет! :)
  • Снова пробую вставить EditBox, вот что получилось:

    Code: Select all

    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:

    Code: Select all

    
    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;
    }
    Чудеса случаются! Это вам любой программист скажет! :)
  • К элементу "Отрезок" добавлен класс OffcutCustomFigure, позволяющий рисовать из отрезков произвольную фигуру, используя произвольное количество вершин
    Замкнутую фигуру? Тогда это называется http://en.wikipedia.org/wiki/Polygon
  • Wildwest wrote:Тогда это называется http://en.wikipedia.org/wiki/Polygon
    Ага, спасибо за поправку, исправлю недочёт
    Чудеса случаются! Это вам любой программист скажет! :)
  • Подскажет кто-нибудь насчёт BoxLib.. Вопросы такие:
    1. Ввод идёт с неверной кодировке, при вводе любого символа вводится символ ё
    2. При нажатии клавиши BackSpace не удаляется символ, а вписывается ещё один, т.е. невозможно стереть введённый текст

    А вот как думаете, возможно на C++ сделать элемент интерфейса самому, типа поля для ввода текста, чтобы не использовать никакие библиотеки?
    Чудеса случаются! Это вам любой программист скажет! :)
  • При обработке EVENT_KEY_PRESS перед вызовом функции edit'а необходимо получить код нажатой клавиши (ф. 2)
    to infinity and beyond
  • Code: Select all

    	switch (code) {
    		case EVENT_KEY_PRESS:
    			Byte keyCode;
    			kos_GetKey(keyCode);
    			BoxLib::edit_box_key((Dword)&this->component);
    		break;
    	}
    Не помогло
    Чудеса случаются! Это вам любой программист скажет! :)
  • А если несколько раз создавать, такой эффект получается:
    Image

    При нажатии на любую клавишу в текстовое поле вводится один символ, но для каждого текстового поля он разный
    Чудеса случаются! Это вам любой программист скажет! :)
  • kos_GetKey(keyCode);

    __asm
    {
    mov ah, keyCode
    }
    edit_box_key((dword)&cell_box);
    edit_box_key((dword)&file_box);
    to infinity and beyond
  • Только вместо последних двух строк
    BoxLib::edit_box_key((Dword)&this->component);
    to infinity and beyond
  • Не работает :( а если в классе вместо char text[256] использовать char* text; , а потом инициализировать значением this->text = "Hello, world!";
    то в текстовом поле текст "Hello, World!" выводится нормально, а при попытке отредактировать программа закрывается
    Чудеса случаются! Это вам любой программист скажет! :)
  • в приложении Table работает же... что у меня нет так? уже все варианты перепробовал
    Чудеса случаются! Это вам любой программист скажет! :)
  • а где посмотреть весь код? попробую помочь
  • Прикрепил архив. Test.cpp - главный файл приложения, папка mylib - моя библиотека
    Attachments
    lib.zip (18.99 KiB)
    Downloaded 384 times
    Чудеса случаются! Это вам любой программист скажет! :)
  • Who is online

    Users browsing this forum: No registered users and 1 guest