Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Apr 03, 2020 4:12 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 240 posts ]  Go to page Previous 19 10 11 12 1316 Next
Author Message
 Post subject: Re: libGUI
PostPosted: Mon Sep 24, 2007 6:05 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Для ознакомления выкладываю BOX_LIB - библиотека работы с боксами (на текущий момент поддержка editbox and checkbox). Библиотка глючит. И я надеюсь я исправлю этот глюк под отладчиком.
http://www.lrz.land.ru/dowload/BOX_LIB.7z
или на FTP ftp://kolibrios.org/ в папке Lrz
Сразу оговорюсь, что эта библиотека тестовая и не пойдет в производство, после отладки код вольется в существующию библиотеку. Еще найден баг в EditBox, который приводил к падению приложения, просьба обновить компонет, он доступен на svn


Top
   
 Post subject: Re: libGUI
PostPosted: Thu Sep 27, 2007 7:18 am 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Доделал либу, скачать можно по ссылкам выше. Огромная просьба протестировать, и если найдутся ошибки, пожалуйста напишите мне.
Поддержка editbox,checkbox,radiobutton. Библиотека ориентирована на С.


Top
   
 Post subject: Re: libGUI
PostPosted: Fri Sep 28, 2007 1:54 am 
Offline
User avatar

Joined: Sat Mar 04, 2006 12:53 am
Posts: 221
попробовал либу... бльших глюков в принципе не заметил, разве что мышиный курсор моргает сильно и насторожил прикол с заголовком программы...


Top
   
 Post subject: Re: libGUI
PostPosted: Fri Sep 28, 2007 8:18 am 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Мышиный курсор моргает, потому что, сиситема его каздый раз перерисовывает, как только вводишь с клавиатуры что-либо. Это особеность кода мышки ядра, а не программы. В программе вообще реализовано отсутствие лишней перерисовки.
Прикол с заголовком программы, просто демонстрирует возможность интерактивно менять заголовок это сделано для демонстрации возможностей.


Top
   
 Post subject: Re: libGUI
PostPosted: Fri Sep 28, 2007 9:47 am 
Протестировал пример, глюков не заметил.


Top
   
 Post subject: Re: libGUI
PostPosted: Fri Sep 28, 2007 1:30 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Вот формат вызова компонентов библиотеки:
Code:
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:
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:
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   ; флаги       
}



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


Top
   
 Post subject: Re: libGUI
PostPosted: Fri Sep 28, 2007 3:11 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 7:57 pm
Posts: 835
Круто, ещё одна библиотека GUI :)
вот меня интересует такой вопрос: какая-то из библиотек превратится в полноценную графическую среду для Колибри (т. е. включая рисование рабочего стола и панели) или так и будут только рисовать некоторые элементы интерфейса в отдельных программах? Я считаю, было бы классно, если бы у Колибри было несколько графических оболочек на выбор.

_________________
Всех выше те, кто доброе творят,
И за дела добра не ждут наград,
Всем жертвуют для страждущих людей,
Не думая о выгоде своей.


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


Top
   
 Post subject: Re: libGUI
PostPosted: Mon Oct 15, 2007 5:31 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
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.

_________________
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!


Top
   
 Post subject: Re: libGUI
PostPosted: Mon Oct 15, 2007 10:33 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 7:57 pm
Posts: 835
Планируется ли реализация перетаскивания объектов мышкой?

_________________
Всех выше те, кто доброе творят,
И за дела добра не ждут наград,
Всем жертвуют для страждущих людей,
Не думая о выгоде своей.


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

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


Top
   
 Post subject: Re: libGUI
PostPosted: Tue Oct 16, 2007 11:13 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Fri Jun 30, 2006 9:01 am
Posts: 1248
nice work!

Quote:
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 ;)

_________________
"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


Top
   
 Post subject: Re: libGUI
PostPosted: Sat Oct 20, 2007 4:36 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Quote:
nice work!


Thank.
Спасибо.

Quote:
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!


Top
   
 Post subject: Re: libGUI
PostPosted: Sat Oct 20, 2007 6:34 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
andrew_programmer

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


Top
   
 Post subject: Re: libGUI
PostPosted: Sat Oct 20, 2007 8:32 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Fri Jun 30, 2006 9:01 am
Posts: 1248
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()" ?

_________________
"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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 240 posts ]  Go to page Previous 19 10 11 12 1316 Next

All times are UTC+03:00


Who is online

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