diff --git a/programs/develop/libraries/box_lib/trunk/bl_sys.mac b/programs/develop/libraries/box_lib/trunk/bl_sys.mac new file mode 100644 index 0000000000..da17da4283 --- /dev/null +++ b/programs/develop/libraries/box_lib/trunk/bl_sys.mac @@ -0,0 +1,8 @@ +include 'editbox.mac' ;macro which should make life easier :) specially for editbox +include 'checkbox.mac' ;macro implements checkbox +include 'optionbox.mac' ;macro implements optionbox +include 'scrollbar.mac' ;macro implements scrollbar +include 'd_button.mac' ;macro implements dinamic_button +include 'menubar.mac' ;macro implements menubar +include 'filebrowser.mac' ;macro implements filebrowser +include 'tree_list.mac' ;macro implements tree_list, image_list, list_box \ No newline at end of file diff --git a/programs/develop/libraries/box_lib/trunk/box_lib.asm b/programs/develop/libraries/box_lib/trunk/box_lib.asm index 2b5e714190..282064c2de 100644 --- a/programs/develop/libraries/box_lib/trunk/box_lib.asm +++ b/programs/develop/libraries/box_lib/trunk/box_lib.asm @@ -16,6 +16,7 @@ public EXPORTS section '.flat' code readable align 16 include '../../../../macros.inc' +include 'bl_sys.mac' include 'box_lib.mac' ;macro which should make life easier :) ;---------------------------------------------------- diff --git a/programs/develop/libraries/box_lib/trunk/box_lib.mac b/programs/develop/libraries/box_lib/trunk/box_lib.mac index 9e430acbe5..6e051b807f 100644 --- a/programs/develop/libraries/box_lib/trunk/box_lib.mac +++ b/programs/develop/libraries/box_lib/trunk/box_lib.mac @@ -1,8 +1,218 @@ -include 'editbox.mac' ;macro which should make life easier :) specially for editbox -include 'checkbox.mac' ;macro implements checkbox -include 'optionbox.mac' ;macro implements optionbox -include 'scrollbar.mac' ;macro implements scrollbar -include 'd_button.mac' ;macro implements dinamic_button -include 'menubar.mac' ;macro implements menubar -include 'filebrowser.mac' ;macro implements filebrowser -include 'tree_list.mac' ;macro implements tree_list, image_list, list_box \ No newline at end of file +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Basic macros for use EditBox ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ed_width equ [edi] ;ширина компонента +ed_left equ [edi+4] ;положение по оси х +ed_top equ [edi+8] ;положение по оси у +ed_color equ [edi+12] ;цвет фона компонента +shift_color equ [edi+16] ;=0x6a9480 для примера возьем желеный цвет бокса +ed_focus_border_color equ [edi+20] ;цвет рамки компонента +ed_blur_border_color equ [edi+24] ;цвет не активного компонента +ed_text_color equ [edi+28] ;цвет текста +ed_max equ [edi+32] ;кол-во символов которые можно максимально ввести +ed_text equ [edi+36] ;указатель на буфер +ed_mouse_variable equ [edi+40] ; указатель на переменную для бокса/группы +ed_flags equ [edi+44] ;флаги +bp_flags equ [ebp+44] ;в некоторых процедурах edi используется, взамен указатель храниться в ebp +ed_size equ [edi+48] ;кол-во символов +bp_size equ [ebp+48] ;кол-во симвполов, для адресации испльзуется ebpб edi занят +ed_pos equ [edi+52] ;позиция курсора +ed_offset equ [edi+56] ;смещение +cl_curs_x equ [edi+60] ;предыдущее координата курсора по х +cl_curs_y equ [edi+64] ;предыдущее координата курсора по у +ed_shift_pos equ [edi+68] ;положение курсора +ed_shift_pos_old equ [edi+72] ;старое положение курсора + +ed_struc_size=76 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;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 ; высота + +struc edit_box width,left,top,color,shift_color,focus_border_color,\ + blur_border_color,text_color,max,text,mouse_variable,flags,size,pos +{ +.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 +.mouse_variable dd mouse_variable +.flags dd 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 +} + +macro edit_boxes_set_sys_color start,end,color_table +{ + mov edi,start + mov ecx,((end-start)/ed_struc_size) + mov esi,color_table +@@: + mov eax,dword [esi+36] + mov ebx,dword [esi+20] + push dword eax + pop dword ed_focus_border_color + shr bh,1 + shr bl,1 + shr ah,1 + shr al,1 + add ah,bh + add al,bl + ror eax,16 + ror ebx,16 + shr bl,1 + shr al,1 + add al,bl + ror eax,16 + mov dword ed_blur_border_color,eax + mov dword shift_color,eax + add edi,ed_struc_size + loop @b +} +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Basic macros for use CheckBox ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ch_struc_size=36 +ch_flag_en=10b ;элемент выбран + +ch_left equ [edi] ;координата начала рисования по х +ch_top equ [edi+2] ;координата начала рисования по у +ch_text_margin equ [edi+4] ;=4 расстояние от прямоугольника чек бокса до надписи +ch_size equ [edi+8] ;12 размер квадрата чек бокса +ch_color equ [edi+12] ;цвет внутри checkbox +ch_border_color equ [edi+16] ; or [edi+4] ;цвет рамки checkbox ее можно задать самостоятельно +ch_text_color equ [edi+20] ;[edi+4] ;цвет текста +ch_text_ptr equ [edi+24] ;указатель на начало текстовой строки +ch_text_length equ [edi+28] +ch_flags equ [edi+32] ;флаги + +struc check_box left,top,ch_text_margin,ch_size,color,border_color,text_color,text,ch_text_length,flags +{ ;структура параметров для чек бокса +.left: dw left ;+0 положение по х +.top: dw top ;+2 положение по у +.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 ; флаги +} + +macro check_boxes_set_sys_color start,end,color_table +{ + mov edi,start + mov ecx,((end-start)/ch_struc_size) + mov esi,color_table +@@: +; push dword [esi+20] ;цвет рабочей области окна +; pop dword ch_color + push dword [esi+32] ;цвет текста в рабочей области окна + pop dword ch_text_color + push dword [esi+36] ;цвет графики в окне (разделительные линии и т.п.) + pop dword ch_border_color + add edi,ch_struc_size + loop @b +} + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Basic macros for use OptionBox ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +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 ; флаги +} + +struc tree_list info_size,info_max_count,style, img_cx,img_cy,\ + col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\ + info_capt_len,el_focus, p_scrol,on_press { + .data_info dd 0 + .info_size dw info_size + .info_max_count dd info_max_count + .style dd style + .data_nodes dd 0 + .data_img dd 0 + .img_cx dw img_cx + .img_cy dw img_cy + .data_img_sys dd 0 + .ch_tim dd 0 + .ls_tim dd 0 + .tim_undo dd 0 + .cur_pos dd 0 + .col_bkg dd col_bkg + .col_zag dd col_zag + .col_txt dd col_txt + .box_left dd box_l + .box_top dd box_t + .box_width dd box_w + .box_height dd box_h + .capt_cy dw capt_cy + .info_capt_offs dw info_capt_offs + .info_capt_len dw info_capt_len + .el_focus dd el_focus + .p_scrol dd p_scrol + rb 4 + .on_activate dd 0 + .on_press dd on_press +} + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Basic macros for use TreeList ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;константы стиля +tl_key_no_edit equ 1b ;элемент нельзя редактировать на клавиатуре (изменять уровни, удалять) +tl_draw_par_line equ 10b ;рисовать линии к родительскому узлу +tl_list_box_mode equ 100b ;стиль не отображает уровни (как в ListBox все одного уровня) + +;константы для функций +tl_err_save_memory_size equ 10b ;не хватает памяти для сохранения элемента +tl_err_load_caption equ 1b ;в памяти нет заголовка 'tree' +tl_err_load_info_size equ 100b ;не совпадает размер информационной структуры при открытии +tl_load_mode_add equ 0x20000 ;опция считывания в режиме добавления информации +tl_save_load_heder_size equ 26 ;размер заголовка для записи/чтения элементов diff --git a/programs/develop/libraries/box_lib/trunk/checkbox.mac b/programs/develop/libraries/box_lib/trunk/checkbox.mac index 8f27877bd6..99ada116ff 100644 --- a/programs/develop/libraries/box_lib/trunk/checkbox.mac +++ b/programs/develop/libraries/box_lib/trunk/checkbox.mac @@ -5,45 +5,16 @@ ch_struc_size=36 ch_flag_en=10b ;¤ыхьхэЄ т√сЁрэ -ch_left equ [edi] ;координата начала рисования по х -ch_top equ [edi+2] ;координата начала рисования по у -ch_text_margin equ [edi+4] ;=4 расстояние от прямоугольника чек бокса до надписи -ch_size equ [edi+8] ;12 размер квадрата чек бокса -ch_color equ [edi+12] ;цвет внутри checkbox -ch_border_color equ [edi+16] ; or [edi+4] ;цвет рамки checkbox ее можно задать самостоятельно -ch_text_color equ [edi+20] ;[edi+4] ;цвет текста -ch_text_ptr equ [edi+24] ;указатель на начало текстовой строки +ch_left equ [edi] ;ъююЁфшэрЄр эрўрыр Ёшёютрэш  яю ї +ch_top equ [edi+2] ;ъююЁфшэрЄр эрўрыр Ёшёютрэш  яю є +ch_text_margin equ [edi+4] ;=4 ЁрёёЄю эшх юЄ яЁ ьюєуюы№эшър ўхъ сюъёр фю эрфяшёш +ch_size equ [edi+8] ;12 ЁрчьхЁ ътрфЁрЄр ўхъ сюъёр +ch_color equ [edi+12] ;ЎтхЄ тэєЄЁш checkbox +ch_border_color equ [edi+16] ; or [edi+4] ;ЎтхЄ Ёрьъш checkbox хх ьюцэю чрфрЄ№ ёрьюёЄю Єхы№эю +ch_text_color equ [edi+20] ;[edi+4] ;ЎтхЄ ЄхъёЄр +ch_text_ptr equ [edi+24] ;єърчрЄхы№ эр эрўрыю ЄхъёЄютющ ёЄЁюъш ch_text_length equ [edi+28] -ch_flags equ [edi+32] ;флаги - -macro check_boxes_set_sys_color start,end,color_table -{ - mov edi,start - mov ecx,((end-start)/ch_struc_size) - mov esi,color_table -@@: -; push dword [esi+20] ;цвет рабочей области окна -; pop dword ch_color - push dword [esi+32] ;цвет текста в рабочей области окна - pop dword ch_text_color - push dword [esi+36] ;цвет графики в окне (разделительные линии и т.п.) - pop dword ch_border_color - add edi,ch_struc_size - loop @b -} -struc check_box left,top,ch_text_margin,ch_size,color,border_color,text_color,text,ch_text_length,flags -{ ;структура параметров для чек бокса -.left: dw left ;+0 положение по х -.top: dw top ;+2 положение по у -.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 ; флаги -} +ch_flags equ [edi+32] ;Їыруш macro use_checkbox_draw { diff --git a/programs/develop/libraries/box_lib/trunk/editbox.mac b/programs/develop/libraries/box_lib/trunk/editbox.mac index af50343fa2..10a94db0d1 100644 --- a/programs/develop/libraries/box_lib/trunk/editbox.mac +++ b/programs/develop/libraries/box_lib/trunk/editbox.mac @@ -1,5 +1,3 @@ -ed_struc_size=76 - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Basic macros for use editbox ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -25,82 +23,6 @@ cl_curs_y equ [edi+64] ; ed_shift_pos equ [edi+68] ;положение курсора ed_shift_pos_old equ [edi+72] ;старое положение курсора -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;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 ; высота - -struc edit_box width,left,top,color,shift_color,focus_border_color,\ - blur_border_color,text_color,max,text,mouse_variable,flags,size,pos -{ -.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 -.mouse_variable dd mouse_variable -.flags dd 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 -} -macro edit_boxes_set_sys_color start,end,color_table -{ - mov edi,start - mov ecx,((end-start)/ed_struc_size) - mov esi,color_table -@@: - mov eax,dword [esi+36] - mov ebx,dword [esi+20] - push dword eax - pop dword ed_focus_border_color - shr bh,1 - shr bl,1 - shr ah,1 - shr al,1 - add ah,bh - add al,bl - ror eax,16 - ror ebx,16 - shr bl,1 - shr al,1 - add al,bl - ror eax,16 - mov dword ed_blur_border_color,eax - mov dword shift_color,eax - add edi,ed_struc_size - loop @b -} - macro init_editbox { pushad diff --git a/programs/develop/libraries/box_lib/trunk/optionbox.mac b/programs/develop/libraries/box_lib/trunk/optionbox.mac index 0e55df259c..43e38e6dfd 100644 --- a/programs/develop/libraries/box_lib/trunk/optionbox.mac +++ b/programs/develop/libraries/box_lib/trunk/optionbox.mac @@ -1,24 +1,8 @@ -;Їрщы ёючфрэ 13.02.2009 ═р ъюф яЁшьхэхэр GPL2 ышЎхэчш  -;╠ръЁюё фы  ёшёЄхьэющ сшсышюЄхъш box_lib.obj +;файл создан 13.02.2009 На код применена GPL2 лицензия +;Макрос для системной библиотеки box_lib.obj ;Optionbox -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 ; флаги -} - -macro use_optionbox_driver ;ьръЁюё√ ъюЄюЁ√х єяЁрты ■Є ЁрсюЄющ сюъёр ) +macro use_optionbox_driver ;макросы которые управляют работой бокса ) { option_box_draw: pusha @@ -58,7 +42,7 @@ option_check: @@: popa ret 4 - ; exit тююс∙х :) + ; exit вообще :) option_box_mouse: @@ -82,18 +66,18 @@ macro use_optionbox_draw { option_box_draw_box: option_group equ [edi] -op_left equ [edi+4] ;ъююЁфшэрЄр эрўрыр Ёшёютрэш  яю ї -op_top equ [edi+6] ;ъююЁфшэрЄр эрўрыр Ёшёютрэш  яю є -op_text_margin equ [edi+8] ;=4 ЁрёёЄю эшх юЄ яЁ ьюєуюы№эшър ўхъ сюъёр фю эрфяшёш -op_size equ [edi+12] ;12 ЁрчьхЁ ътрфЁрЄр ўхъ сюъёр +op_left equ [edi+4] ;координата начала рисования по х +op_top equ [edi+6] ;координата начала рисования по у +op_text_margin equ [edi+8] ;=4 расстояние от прямоугольника чек бокса до надписи +op_size equ [edi+12] ;12 размер квадрата чек бокса op_color equ [edi+16] -op_border_color equ [edi+20] ; or [edi+4] ;ЎтхЄ Ёрьъш checkbox хх ьюцэю чрфрЄ№ ёрьюёЄю Єхы№эю -op_text_color equ [edi+24];[edi+4] ;ЎтхЄ ЄхъёЄр -op_text_ptr equ [edi+28] ;єърчрЄхы№ эр эрўрыю ЄхъёЄютющ ёЄЁюъш +op_border_color equ [edi+20] ; or [edi+4] ;цвет рамки checkbox ее можно задать самостоятельно +op_text_color equ [edi+24];[edi+4] ;цвет текста +op_text_ptr equ [edi+28] ;указатель на начало текстовой строки op_text_length equ [edi+32] -op_flags equ [edi+36] ;Їыруш +op_flags equ [edi+36] ;флаги - pusha ;ёюїЁрэшь тёх ЁхушёЄЁ√ + pusha ;сохраним все регистры movzx ebx,word op_left shl ebx,16 @@ -103,49 +87,49 @@ op_flags equ [edi+36] ; add ecx,dword op_size mov edx,dword op_border_color mov eax,13 - mcall ;Ёшёєхь Ёрьъє + mcall ;рисуем рамку mov edx,dword op_color add ebx,1 shl 16 - 2 add ecx,1 shl 16 - 2 - mcall ;чръЁр°штрхь тэєЄЁхээюёЄш ўхъсюъёр + mcall ;закрашиваем внутренности чекбокса ; mov eax,dword option_group ; mov dword eax,[eax] ; cmp eax,edi ; jne @f -; call option_box_draw_op ;эрЁшёютрЄ№ тъы■ўхээ√щ ўхъ сюъё +; call option_box_draw_op ;нарисовать включенный чек бокс ;---------------------------- -;ЁрёўхЄ ъєфр сєфхЄ яЁюшчтхфхэ т√тюф ЄхъёЄр +;расчет куда будет произведен вывод текста ;---------------------------- -@@: movzx ebx,word op_left ;чруЁєчшЄ№ чэрўхэшх ї фы  ўхъ сюъёр +@@: movzx ebx,word op_left ;загрузить значение х для чек бокса add ebx,dword op_size - add ebx,dword op_text_margin;фюсртшЄ№ ЁрчьхЁ ёЄюЁюэ√ ш ЁрёёЄю эшх эр ъюЄюЁюь эрўэхЄё  т√тюф ЄхъёЄр - shl ebx,16 ;ёфтшэхь эр 16 ЁрчЁ фют т ыхтю (єьэюцшь эр 65536) - mov bx,word op_top ;чруЁєчшь чэрўхэшх яю y + add ebx,dword op_text_margin;добавить размер стороны и расстояние на котором начнется вывод текста + shl ebx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536) + mov bx,word op_top ;загрузим значение по y add ebx,op_size - mov ecx,dword op_text_color ;чруЁєчшь ЎтхЄ эрфяшёш + flags - sub ebx,7 ;фюсртшь чэрўхэшх фышэ√ ёЄюЁюэ√ -9+2 + mov ecx,dword op_text_color ;загрузим цвет надписи + flags + sub ebx,7 ;добавим значение длины стороны -9+2 - mov edx,dword op_text_ptr ;єърцхь рфЁхё юЄ ъєфр эєцэю т√тюфшЄ№ ёЄЁюъє + mov edx,dword op_text_ptr ;укажем адрес от куда нужно выводить строку mov esi,dword op_text_length - ;тэхёхь т eax чэрўхэшх т√тюфр эрфяшёш эр ърэтє + ;внесем в eax значение вывода надписи на канву mov eax,4 - mcall ;┬√тюф -popa ;тюёёЄрэютшЄ№ чэрўхэш  ЁхушёЄЁют шч ёЄхър -ret ;т√щфхь шч яЁюЎхфєЁ√ + mcall ;Вывод +popa ;восстановить значения регистров из стека +ret ;выйдем из процедуры -option_box_clear_op: ;юўшёЄър ўхъ сюъёр - mov edx,dword op_color ;ЎтхЄ тэєЄЁш ўхъ сюъёр - jmp @f ;схчєёыютэ√щ яЁ√цюъ эр эшцэ■■ ьхЄъє @@ +option_box_clear_op: ;очистка чек бокса + mov edx,dword op_color ;цвет внутри чек бокса + jmp @f ;безусловный прыжок на нижнюю метку @@ -option_box_draw_op: ;эрЁшёютрЄ№ тъы■ўхээ√щ ўхъ сюъё - mov edx,dword op_border_color ;чруЁєчшЄ№ ЎтхЄ +option_box_draw_op: ;нарисовать включенный чек бокс + mov edx,dword op_border_color ;загрузить цвет @@: - movzx ebx,word op_left ;чруЁєчшЄ№ ъююЁфшэрЄє яю ї + movzx ebx,word op_left ;загрузить координату по х mov eax,dword op_size mov bp,ax shr eax,2 @@ -153,62 +137,62 @@ option_box_draw_op: ; push ax add ebx,eax - shl ebx,16 ;ёфтшэхь эр 16 ЁрчЁ фют т ыхтю (єьэюцшь эр 65536) + shl ebx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536) pop ax lea eax,[eax*2] - sub bp,ax ;ёюїЁрэшь ЁхушёЄЁ bx т ЁхушёЄЁх єърчрЄхы  срч√ + sub bp,ax ;сохраним регистр bx в регистре указателя базы mov bx,bp - movzx ecx,word op_top ;чруЁєчшЄ№ ъююЁфшэрЄє яю є + movzx ecx,word op_top ;загрузить координату по у pop ax add cx,ax - shl ecx,16 ;ёфтшэхь эр 16 ЁрчЁ фют т ыхтю (єьэюцшь эр 65536) - mov cx,bp ;чруЁєчшь чэрўхэш  ЁхушёЄЁр єърчрЄхы  срч√ т cx - mov eax,13 ;т eax - чэрўхэш  ЇєэъЎшш фы  т√тюфр яюыюё√ Є.х. яю ёєЄш яЁ ьюєуюы№эшър, ъюЄюЁ√щ юЄюсЁрцрхЄ тъы■ўхээ√щ ъюьяюэхэЄ ўхъ сюъё - mcall ;т√тюф -ret ;т√щЄш шч яЁюЎхфєЁ√ + shl ecx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536) + mov cx,bp ;загрузим значения регистра указателя базы в cx + mov eax,13 ;в eax - значения функции для вывода полосы т.е. по сути прямоугольника, который отображает включенный компонент чек бокс + mcall ;вывод +ret ;выйти из процедуры } macro use_optionbox_mouse { ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;╬сЁрсюЄўшъ mouse +;Обработчик mouse ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -option_box_mouse_op: ;юсЁрсюЄър ь√°ш +option_box_mouse_op: ;обработка мыши pusha - mov esi,dword op_text_length ;чруЁєчшЄ№ ъюы-тю ёшьтюыют т ЄхъёЄютющ ёЄЁюъх - ;╙ьэюцхэшх эр 6 ┴√ёЄЁюх єьэюцхэшх ьюцэю тюёяюы№чютрЄ№ё  ы■с√ь ьч ьхЄюфют, эю эр ёЄрЁ√ї ╧ЁюЎхёёюЁрї (386,486,P1)с√ёЄЁхх сєфхЄ ё шэёЄЁєъЎшхщ Lea + mov esi,dword op_text_length ;загрузить кол-во символов в текстовой строке + ;Умножение на 6 Быстрое умножение можно воспользоваться любым мз методов, но на старых Процессорах (386,486,P1)быстрее будет с инструкцией Lea ; lea esi,[eax*2+eax] ; shl eax,1 - imul esi,6 ; шыш ьюцэю ш Єръ єьэюцшЄ№ эр 6 + imul esi,6 ; или можно и так умножить на 6 xor ebx,ebx - add esi,dword op_text_margin ;фюсртшЄ№ 3 - ЁрёёЄю эшх юЄ ўхъ сюъёр фю эрфяшёш + add esi,dword op_text_margin ;добавить 3 - расстояние от чек бокса до надписи - mov eax,37 ;яюыєўшь ъююЁфшэрЄ√ ь√°ъш - inc ebx ;фюсртшЄ№ 1 - mcall ;яюыєўшЄ№ ъююЁфшэрЄ√ ъєЁёюЁр юЄэюёшЄхы№эю юъэр + mov eax,37 ;получим координаты мышки + inc ebx ;добавить 1 + mcall ;получить координаты курсора относительно окна - movzx ebx,word op_top ;чруЁєчшЄ№ т bx чэрўхэшх ъююЁфшэрЄ√ є - cmp ax,bx ;ёЁртэшЄ№ ё ё ъююЁфшэрЄющ ъєЁёюЁр - jl option_box_mouse_end ;SF <> OF хёыш ьхэ№°х - add ebx,dword op_size ;фюсртшЄ№ ЁрчьхЁ - cmp ax,bx ;ёЁртэшЄ№ - jg option_box_mouse_end ;ZF = 0 ш SF = OF хёыш сюы№°х + movzx ebx,word op_top ;загрузить в bx значение координаты у + cmp ax,bx ;сравнить с с координатой курсора + jl option_box_mouse_end ;SF <> OF если меньше + add ebx,dword op_size ;добавить размер + cmp ax,bx ;сравнить + jg option_box_mouse_end ;ZF = 0 и SF = OF если больше - shr eax,16 ;Ёрчфхышь эр 65536 шыш яЁюёЄю ёфтшэхь сшЄ√ эр 16 чэрўхэшщ - movzx ebx,word op_left ;яЁюшчтхфхь рэрыюушўэюх ёЁртэхэшх - cmp ax,bx ;ёЁртэшЄ№ ЁхушёЄЁ√ - jl option_box_mouse_end ;хёыш ьхэ№°х - add ebx,dword op_size ;фюсртшЄ№ фышэє ёЄюЁюэ√ яЁ ьюєуюы№эшър - add ebx,esi ;╙ўхёЄ№ т чэрўхэшш яю ї х∙х ш фышэє эрфяшёш ъ ўхъсюъёє - cmp ax,bx ;ёЄЁртэшЄ№ ЁхушёЄЁ√ - jg option_box_mouse_end ;хёыш сюы№°х + shr eax,16 ;разделим на 65536 или просто сдвинем биты на 16 значений + movzx ebx,word op_left ;произведем аналогичное сравнение + cmp ax,bx ;сравнить регистры + jl option_box_mouse_end ;если меньше + add ebx,dword op_size ;добавить длину стороны прямоугольника + add ebx,esi ;Учесть в значении по х еще и длину надписи к чекбоксу + cmp ax,bx ;стравнить регистры + jg option_box_mouse_end ;если больше mov eax,dword option_group mov [eax],edi option_box_mouse_end: -popa ;тюёёЄрэютшЄ№ ЁхушёЄЁ√ шч ёЄхър -ret ;т√щЄш +popa ;восстановить регистры из стека +ret ;выйти } \ No newline at end of file diff --git a/programs/develop/libraries/box_lib/trunk/tree_list.mac b/programs/develop/libraries/box_lib/trunk/tree_list.mac index 5f7211181d..185b2d8786 100644 --- a/programs/develop/libraries/box_lib/trunk/tree_list.mac +++ b/programs/develop/libraries/box_lib/trunk/tree_list.mac @@ -56,39 +56,6 @@ tl_save_load_heder_size equ 26 ; ;ls_tim dd ? ;+34 тЁхь  яюёыхфэхую ёюїЁрэхэш  ;on_activate dd ? ;+92 єърчрЄхы№ эр ЇєэъЎш■ яЁш ръЄштшЁютрэшш єчыр -struc tree_list info_size,info_max_count,style, img_cx,img_cy,\ - col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\ - info_capt_len,el_focus, p_scrol,on_press { - .data_info dd 0 - .info_size dw info_size - .info_max_count dd info_max_count - .style dd style - .data_nodes dd 0 - .data_img dd 0 - .img_cx dw img_cx - .img_cy dw img_cy - .data_img_sys dd 0 - .ch_tim dd 0 - .ls_tim dd 0 - .tim_undo dd 0 - .cur_pos dd 0 - .col_bkg dd col_bkg - .col_zag dd col_zag - .col_txt dd col_txt - .box_left dd box_l - .box_top dd box_t - .box_width dd box_w - .box_height dd box_h - .capt_cy dw capt_cy - .info_capt_offs dw info_capt_offs - .info_capt_len dw info_capt_len - .el_focus dd el_focus - .p_scrol dd p_scrol - rb 4 - .on_activate dd 0 - .on_press dd on_press -} - macro use_tree_list { ;----------------------------------------------------------------------------- diff --git a/programs/other/planet_v/planet_v.asm b/programs/other/planet_v/planet_v.asm index f609b810a4..8b91d92510 100644 --- a/programs/other/planet_v/planet_v.asm +++ b/programs/other/planet_v/planet_v.asm @@ -18,9 +18,7 @@ include 'mem.inc' include 'dll.inc' include '../../develop/libraries/box_lib/load_lib.mac' -include '../../develop/libraries/box_lib/trunk/tree_list.mac' -include '../../develop/libraries/box_lib/trunk/editbox.mac' -include '../../develop/libraries/box_lib/trunk/checkbox.mac' +include '../../develop/libraries/box_lib/trunk/box_lib.mac' min_window_w equ 485 ;минимальная ширина окна min_window_h equ 325 ;минимальная высота окна