Page 11 of 16

Re: libGUI

Posted: Mon Sep 24, 2007 6:05 pm
by <Lrz>
Для ознакомления выкладываю BOX_LIB - библиотека работы с боксами (на текущий момент поддержка editbox and checkbox). Библиотка глючит. И я надеюсь я исправлю этот глюк под отладчиком.
http://www.lrz.land.ru/dowload/BOX_LIB.7z
или на FTP ftp://kolibrios.org/ в папке Lrz
Сразу оговорюсь, что эта библиотека тестовая и не пойдет в производство, после отладки код вольется в существующию библиотеку. Еще найден баг в EditBox, который приводил к падению приложения, просьба обновить компонет, он доступен на svn

Re: libGUI

Posted: Thu Sep 27, 2007 7:18 am
by <Lrz>
Доделал либу, скачать можно по ссылкам выше. Огромная просьба протестировать, и если найдутся ошибки, пожалуйста напишите мне.
Поддержка editbox,checkbox,radiobutton. Библиотека ориентирована на С.

Re: libGUI

Posted: Fri Sep 28, 2007 1:54 am
by Aqwas
попробовал либу... бльших глюков в принципе не заметил, разве что мышиный курсор моргает сильно и насторожил прикол с заголовком программы...

Re: libGUI

Posted: Fri Sep 28, 2007 8:18 am
by <Lrz>
Мышиный курсор моргает, потому что, сиситема его каздый раз перерисовывает, как только вводишь с клавиатуры что-либо. Это особеность кода мышки ядра, а не программы. В программе вообще реализовано отсутствие лишней перерисовки.
Прикол с заголовком программы, просто демонстрирует возможность интерактивно менять заголовок это сделано для демонстрации возможностей.

Re: libGUI

Posted: Fri Sep 28, 2007 9:47 am
by Mario79
Протестировал пример, глюков не заметил.

Re: libGUI

Posted: Fri Sep 28, 2007 1:30 pm
by <Lrz>
Вот формат вызова компонентов библиотеки:

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   ; флаги        
}

Если нет предложений по данному коду использования, я начну оформлять документацию + напишу еще несколько примеров, позволяющих увидеть различные варианты обработки событий. Если есть предложения по компонентам, - пишите.

Re: libGUI

Posted: Fri Sep 28, 2007 3:11 pm
by DmitrySokolowsky
Круто, ещё одна библиотека GUI :)
вот меня интересует такой вопрос: какая-то из библиотек превратится в полноценную графическую среду для Колибри (т. е. включая рисование рабочего стола и панели) или так и будут только рисовать некоторые элементы интерфейса в отдельных программах? Я считаю, было бы классно, если бы у Колибри было несколько графических оболочек на выбор.

Re: libGUI

Posted: Fri Sep 28, 2007 3:34 pm
by Mario79
Атауальпа
Ты делаешь выводы по темам, в которых слабо разбираешься.
Не нужно путать ГУИ ядра и ГУИ приложения. И еще наличие нескольких оболочек ну никак не зависит от ГУИ.
В текущей реализации Колибри под оболочкой теоретически можно считать: панель + меню + RB + иконки. Любой из этих компонентов можно изменять.

Re: libGUI

Posted: Mon Oct 15, 2007 5:31 pm
by andrew_programmer
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.

Re: libGUI

Posted: Mon Oct 15, 2007 10:33 pm
by DmitrySokolowsky
Планируется ли реализация перетаскивания объектов мышкой?

Re: libGUI

Posted: Mon Oct 15, 2007 11:06 pm
by Mario79
Атауальпа
Сразу могу огорчить - технологии Drag&Drop, Ole, прозрачность окон по умолчанию и еще много чего - являются избыточными вещами, без которых можно обойтись. Их реализация не является приоритетными пунктами в развитии как Колибри вообще, так и отдельных приложений в частности.

Всем!
Еще раз напоминаю - хотелки размещаются в разделе Оффтоп - все, что помещается в других разделах должно быть связано с разработкой. Заявляя о необходимости некоторых вещей, человек принимает на себя обязательства по их реализации. В противном случае (при продолжении бесполезного трепа в стиле: хочу, и сделайте немедленно!") я буду удалять подобные посты.

Re: libGUI

Posted: Tue Oct 16, 2007 11:13 pm
by hidnplayr
nice work!
void RemoveComponent (void *Control, int new_x, int new_y) - moves a component to new coordinates.
May i point out that remove is the same as delete, so the name might be a bad choice ;)

Re: libGUI

Posted: Sat Oct 20, 2007 4:36 pm
by andrew_programmer
nice work!
Thank.
Спасибо.
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?

Re: libGUI

Posted: Sat Oct 20, 2007 6:34 pm
by Serge
andrew_programmer

Просто MoveComponent(). Найди WinAPI. Будет прощё подбирать названия.

Re: libGUI

Posted: Sat Oct 20, 2007 8:32 pm
by hidnplayr
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?
Why dont you just call the function 'MoveComponent()" ?