libGUI

Discussing libraries simplifying applications development
  • Доделал либу, скачать можно по ссылкам выше. Огромная просьба протестировать, и если найдутся ошибки, пожалуйста напишите мне.
    Поддержка 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 + иконки. Любой из этих компонентов можно изменять.
  • 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!
  • Планируется ли реализация перетаскивания объектов мышкой?
  • Атауальпа
    Сразу могу огорчить - технологии Drag&Drop, Ole, прозрачность окон по умолчанию и еще много чего - являются избыточными вещами, без которых можно обойтись. Их реализация не является приоритетными пунктами в развитии как Колибри вообще, так и отдельных приложений в частности.

    Всем!
    Еще раз напоминаю - хотелки размещаются в разделе Оффтоп - все, что помещается в других разделах должно быть связано с разработкой. Заявляя о необходимости некоторых вещей, человек принимает на себя обязательства по их реализации. В противном случае (при продолжении бесполезного трепа в стиле: хочу, и сделайте немедленно!") я буду удалять подобные посты.
  • 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 ;)
    "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
  • 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?
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • andrew_programmer

    Просто MoveComponent(). Найди WinAPI. Будет прощё подбирать названия.
  • 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
  • Who is online

    Users browsing this forum: No registered users and 9 guests