Для ознакомления выкладываю BOX_LIB - библиотека работы с боксами (на текущий момент поддержка editbox and checkbox). Библиотка глючит. И я надеюсь я исправлю этот глюк под отладчиком.
http://www.lrz.land.ru/dowload/BOX_LIB.7z
или на FTP ftp://kolibrios.org/ в папке Lrz
Сразу оговорюсь, что эта библиотека тестовая и не пойдет в производство, после отладки код вольется в существующию библиотеку. Еще найден баг в EditBox, который приводил к падению приложения, просьба обновить компонет, он доступен на svn
libGUI
Доделал либу, скачать можно по ссылкам выше. Огромная просьба протестировать, и если найдутся ошибки, пожалуйста напишите мне.
Поддержка editbox,checkbox,radiobutton. Библиотека ориентирована на С.
Поддержка editbox,checkbox,radiobutton. Библиотека ориентирована на С.
попробовал либу... бльших глюков в принципе не заметил, разве что мышиный курсор моргает сильно и насторожил прикол с заголовком программы...
Мышиный курсор моргает, потому что, сиситема его каздый раз перерисовывает, как только вводишь с клавиатуры что-либо. Это особеность кода мышки ядра, а не программы. В программе вообще реализовано отсутствие лишней перерисовки.
Прикол с заголовком программы, просто демонстрирует возможность интерактивно менять заголовок это сделано для демонстрации возможностей.
Прикол с заголовком программы, просто демонстрирует возможность интерактивно менять заголовок это сделано для демонстрации возможностей.
Протестировал пример, глюков не заметил.
Вот формат вызова компонентов библиотеки:
Стандартное оформление библиотеки с помощью структур.
Как каждая структура раскладывается в следующее:
Если нет предложений по данному коду использования, я начну оформлять документацию + напишу еще несколько примеров, позволяющих увидеть различные варианты обработки событий. Если есть предложения по компонентам, - пишите.
Code: Select all
red_win:
call draw_window ;первоначально необходимо нарисовать окно
align 4
still: ;основной обработчик
mcall 10 ;Ожидать события
dec eax
jz red_win
dec eax
jz key
dec eax
jz button
push dword edit1 ;указатель на структуру
push 22 ;высота шаблона оформления
push 5 ;ширина боковой рамки
call [edit_box_mouse] ; перейти на обработчик.
push dword edit2
push 22
push 5
call [edit_box_mouse]
push dword check1
call [check_box_mouse]
push dword check2
call [check_box_mouse]
push dword Option_boxs
call [option_box_mouse]
push dword Option_boxs2
call [option_box_mouse]
jmp still ;если ничего из перечисленного то снова в цикл
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
button:
mcall 17 ;получить идентификатор нажатой клавиши
test ah,ah ;если в ah 0, то перейти на обработчик событий still
jz still
exit: mcall -1
key:
mcall 2 ;загрузим значение 2 в регистор eax и получим код нажатой клавиши
push dword edit1
call [edit_box_key]
push dword edit2
call [edit_box_key]
jmp still
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
align 4
draw_window: ;рисование окна приложения
mcall 12,1
mcall 0,(50*65536+390),(30*65536+200),0xb3AABBCC,0x805080DD,hed
push dword edit1
call [edit_box_draw]
push dword edit2
call [edit_box_draw]
push dword check1
call [check_box_draw]
push dword check2
call [check_box_draw]
push dword Option_boxs
call [option_box_draw]
push dword Option_boxs2
call [option_box_draw]
mcall 12,2
ret
Code: Select all
check1 check_box 10,45,6,12,0x80AABBCC,0,0,check_text,14,ch_flag_en
check2 check_box 10,60,6,12,0x80AABBCC,0,0,check_text2,15
edit1 edit_box 350,3,5,0xffffff,0x6f9480,0,0xAABBCC,0,308,hed,ed_focus,hed_end-hed-1,hed_end-hed-1
edit2 edit_box 350,3,25,0xffffff,0x6a9480,0,0,0,99,ed_buffer,ed_figure_only
op1 option_box option_group1,10,90,6,12,0xffffff,0,0,op_text.1,op_text.e1-op_text.1
op2 option_box option_group1,10,105,6,12,0xFFFFFF,0,0,op_text.2,op_text.e2-op_text.2
op3 option_box option_group1,10,120,6,12,0xffffff,0,0,op_text.3,op_text.e3-op_text.3
op11 option_box option_group2,120,90,6,12,0xffffff,0,0,op_text.1,op_text.e1-op_text.1
op12 option_box option_group2,120,105,6,12,0xffffff,0,0,op_text.2,op_text.e2-op_text.2
op13 option_box option_group2,120,120,6,12,0xffffff,0,0,op_text.3,op_text.e3-op_text.3
option_group1 dd op1 ;указатели, они отображаются по умолчанию, когда выводится
option_group2 dd op12 ;приложение
Option_boxs dd op1,op2,op3,0
Option_boxs2 dd op11,op12,op13,0
hed db 'BOXs load from lib <Lrz> date 27.09.2007',0
hed_end:
rb 256
check_text db 'First checkbox'
check_text2 db 'Second checkbox'
op_text: ; Сопровождающий текст для чек боксов
.1 db 'Option_Box #1'
.e1:
.2 db 'Option_Box #2'
.e2:
.3 db 'Option_Box #3'
.e3:
ed_buffer rb 100
Code: Select all
ed_struc_size=70
struc edit_box width,left,top,color,shift_color,focus_border_color,\
blur_border_color,text_color,max,text,flags,size,pos
{
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Bit mask from editbox
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ed_figure_only= 1000000000000000b ;одни символы
ed_always_focus= 100000000000000b
ed_focus= 10b ;фокус приложения
ed_shift_on= 1000b ;если не установлен -значит впервые нажат shift,если был установлен, значит мы уже что - то делали удерживая shift
ed_shift_on_off=1111111111110111b
ed_shift= 100b ;включается при нажатии на shift т.е. если нажимаю
ed_shift_off= 1111111111111011b
ed_shift_bac= 10000b ;бит для очистки выделеного shift т.е. при установке говорит что есть выделение
ed_shift_bac_cl=1111111111101111b ;очистка при удалении выделения
ed_shift_cl= 1111111111100011b
ed_shift_mcl= 1111111111111011b
ed_left_fl= 100000b
ed_right_fl= 1111111111011111b
ed_offset_fl= 1000000b
ed_offset_cl= 1111111110111111b
ed_insert= 10000000b
ed_insert_cl= 1111111101111111b
ed_mouse_on = 100000000b
ed_mous_adn_b= 100011000b
ed_mouse_on_off=1111111011111111b
ed_height=14 ; высота
.width dd width
.left dd left
.top dd top
.color dd color
.shift_color dd shift_color
.focus_border_color dd focus_border_color
.blur_border_color dd blur_border_color
.text_color dd text_color
.max dd max
.text dd text
.flags dw flags+0
.size dd size+0
.pos dd pos+0
.offset dd 0
.cl_curs_x dd 0
.cl_curs_y dd 0
.shift dd 0
.shift_old dd 0
}
struc check_box left,top,ch_text_margin,ch_size,color,border_color,text_color,text,ch_text_length,flags
{ ;структура параметров для чек бокса
ch_flag_en=10b
.left: dw left ;+0 ;положение по х
.top: dw top ;положение по у
.ch_text_margin: dd ch_text_margin ;расстояние от прямоугольника чек бокса до надписи
.ch_size: dd ch_size ;размер квадрата чек бокса, для примера 12
.color: dd color ;цвет внутри чекбокса
.border_color: dd border_color ;цвет рамки
.text_color: dd text_color ;цвет надписи
.text: dd text ;адрес в коде программы где расположен текст
.ch_text_length: dd ch_text_length ;длинна строки с символами
.flags: dd flags+0 ; флаги
}
struc option_box point_gr,left,top,op_text_margin,op_size,color,border_color,text_color,text,op_text_length,flags
{ ;структура параметров для чек бокса
op_flag_en=10b
.option_group: dd point_gr
.left: dw left ;+0 ;положение по х
.top: dw top ;положение по у
.ch_text_margin: dd op_text_margin ;расстояние от прямоугольника чек бокса до надписи
.ch_size: dd op_size ;размер квадрата чек бокса, для примера 12
.color: dd color ;цвет внутри чекбокса
.border_color: dd border_color ;цвет рамки
.text_color: dd text_color ;цвет надписи
.text: dd text ;адрес в коде программы где расположен текст
.ch_text_length: dd op_text_length ;длинна строки с символами
.flags: dd flags+0 ; флаги
}
Если нет предложений по данному коду использования, я начну оформлять документацию + напишу еще несколько примеров, позволяющих увидеть различные варианты обработки событий. Если есть предложения по компонентам, - пишите.
Круто, ещё одна библиотека GUI
вот меня интересует такой вопрос: какая-то из библиотек превратится в полноценную графическую среду для Колибри (т. е. включая рисование рабочего стола и панели) или так и будут только рисовать некоторые элементы интерфейса в отдельных программах? Я считаю, было бы классно, если бы у Колибри было несколько графических оболочек на выбор.
вот меня интересует такой вопрос: какая-то из библиотек превратится в полноценную графическую среду для Колибри (т. е. включая рисование рабочего стола и панели) или так и будут только рисовать некоторые элементы интерфейса в отдельных программах? Я считаю, было бы классно, если бы у Колибри было несколько графических оболочек на выбор.
Атауальпа
Ты делаешь выводы по темам, в которых слабо разбираешься.
Не нужно путать ГУИ ядра и ГУИ приложения. И еще наличие нескольких оболочек ну никак не зависит от ГУИ.
В текущей реализации Колибри под оболочкой теоретически можно считать: панель + меню + RB + иконки. Любой из этих компонентов можно изменять.
Ты делаешь выводы по темам, в которых слабо разбираешься.
Не нужно путать ГУИ ядра и ГУИ приложения. И еще наличие нескольких оболочек ну никак не зависит от ГУИ.
В текущей реализации Колибри под оболочкой теоретически можно считать: панель + меню + RB + иконки. Любой из этих компонентов можно изменять.
RUSSIAN
Вышла новая версия библиотеки libGUI.
ftp://kolibrios.org/upload/libGUI.7z
Что нового в этой версии:
1) Передача параметров функциям библиотеки переписана на конвенцию stdcall.
2)Теперь функции линкуются по именам.
3)Теперь, если навести мышь на компонент и нажать левую кнопку мыши, то все сообщения от
мыши посылаются только этому компоненту.Если отпустить левую кнопку мыши, то сообщения от
мыши вновь становятся доступными для всех компонентов.
4) В библиотеку добавлены новые функции.
int Version(void) - получить версию библиотеки. Версия возвращается в формате: год + месяц + день . Текущая
библиотека имеет версию 071014.
void RemoveComponent(void *Control,int new_x,int new_y) - перемещает компонент в новые координаты.
void ResizeComponent(void *Control,int new_sizex,int new_sizey) - изменяет размер компонента.
Примеры использования этих функций смотрите в примере Bookmark.
5)Добавлен пример работы с libGUI в языке программирования C. Этот пример является частью интерфейса написанного
мной для моей научной программы.
ENGLISH
14.10.07
The new version of library libGUI has left.
ftp://kolibrios.org/upload/libGUI.7z
That new in this version:
1) Transfer of parameters to functions of library is copied on the convention stdcall.
2) Now functions link on names.
3)Now, if to guide the mouse on a component and to press the left button of the mouse all
messages from the mouse are sent only to this component.If to release(let off) the left
button of the mouse messages from the mouse again become accessible to all components.
4) In library new functions are added.
int Version (void) - to receive the version of library. The version comes back in a format: year + month + day.
The current library has version 71014.
void RemoveComponent (void *Control, int new_x, int new_y) - moves a component to new coordinates.
void ResizeComponent (void *Control, int new_sizex, int new_sizey) - changes the size of a component.
Examples of use of these functions look in example Bookmark.
5) The example of work with libGUI in programming language C is added. This example is a part of the interface
written by me for my scientific program.
Вышла новая версия библиотеки libGUI.
ftp://kolibrios.org/upload/libGUI.7z
Что нового в этой версии:
1) Передача параметров функциям библиотеки переписана на конвенцию stdcall.
2)Теперь функции линкуются по именам.
3)Теперь, если навести мышь на компонент и нажать левую кнопку мыши, то все сообщения от
мыши посылаются только этому компоненту.Если отпустить левую кнопку мыши, то сообщения от
мыши вновь становятся доступными для всех компонентов.
4) В библиотеку добавлены новые функции.
int Version(void) - получить версию библиотеки. Версия возвращается в формате: год + месяц + день . Текущая
библиотека имеет версию 071014.
void RemoveComponent(void *Control,int new_x,int new_y) - перемещает компонент в новые координаты.
void ResizeComponent(void *Control,int new_sizex,int new_sizey) - изменяет размер компонента.
Примеры использования этих функций смотрите в примере Bookmark.
5)Добавлен пример работы с libGUI в языке программирования C. Этот пример является частью интерфейса написанного
мной для моей научной программы.
ENGLISH
14.10.07
The new version of library libGUI has left.
ftp://kolibrios.org/upload/libGUI.7z
That new in this version:
1) Transfer of parameters to functions of library is copied on the convention stdcall.
2) Now functions link on names.
3)Now, if to guide the mouse on a component and to press the left button of the mouse all
messages from the mouse are sent only to this component.If to release(let off) the left
button of the mouse messages from the mouse again become accessible to all components.
4) In library new functions are added.
int Version (void) - to receive the version of library. The version comes back in a format: year + month + day.
The current library has version 71014.
void RemoveComponent (void *Control, int new_x, int new_y) - moves a component to new coordinates.
void ResizeComponent (void *Control, int new_sizex, int new_sizey) - changes the size of a component.
Examples of use of these functions look in example Bookmark.
5) The example of work with libGUI in programming language C is added. This example is a part of the interface
written by me for my scientific program.
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!
Kolibri is best operation system in the world!
Планируется ли реализация перетаскивания объектов мышкой?
Атауальпа
Сразу могу огорчить - технологии Drag&Drop, Ole, прозрачность окон по умолчанию и еще много чего - являются избыточными вещами, без которых можно обойтись. Их реализация не является приоритетными пунктами в развитии как Колибри вообще, так и отдельных приложений в частности.
Всем!
Еще раз напоминаю - хотелки размещаются в разделе Оффтоп - все, что помещается в других разделах должно быть связано с разработкой. Заявляя о необходимости некоторых вещей, человек принимает на себя обязательства по их реализации. В противном случае (при продолжении бесполезного трепа в стиле: хочу, и сделайте немедленно!") я буду удалять подобные посты.
Сразу могу огорчить - технологии Drag&Drop, Ole, прозрачность окон по умолчанию и еще много чего - являются избыточными вещами, без которых можно обойтись. Их реализация не является приоритетными пунктами в развитии как Колибри вообще, так и отдельных приложений в частности.
Всем!
Еще раз напоминаю - хотелки размещаются в разделе Оффтоп - все, что помещается в других разделах должно быть связано с разработкой. Заявляя о необходимости некоторых вещей, человек принимает на себя обязательства по их реализации. В противном случае (при продолжении бесполезного трепа в стиле: хочу, и сделайте немедленно!") я буду удалять подобные посты.
nice work!
May i point out that remove is the same as delete, so the name might be a bad choicevoid RemoveComponent (void *Control, int new_x, int new_y) - moves a component to new coordinates.
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
Thank.nice work!
Спасибо.
Действительно.May i point out that remove is the same as delete, so the name might be a bad choice
Я перевёл слово "remove" переводчиком и оказалось, что оно является синонимом слова "delete".
Как более правильно назвать эту функцию ?
Really.
I have translated a word "remove" the translator and appeared, that it is a synonym of a word "delete".
How more correctly to name this function?
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!
Kolibri is best operation system in the world!
andrew_programmer
Просто MoveComponent(). Найди WinAPI. Будет прощё подбирать названия.
Просто MoveComponent(). Найди WinAPI. Будет прощё подбирать названия.
Why dont you just call the function 'MoveComponent()" ?andrew_programmer wrote: I have translated a word "remove" the translator and appeared, that it is a synonym of a word "delete".
How more correctly to name this function?
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
Who is online
Users browsing this forum: No registered users and 1 guest