Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1681 → Rev 1682

/programs/develop/libraries/box_lib/branch/checkbox.mac
File deleted
\ No newline at end of file
/programs/develop/libraries/box_lib/branch/bl_sys.mac
1,5 → 1,5
;include 'editbox.mac' ;macro which should make life easier :) specially for editbox
include 'checkbox.mac' ;macro implements checkbox
include 'checkbox2.mac' ;macro implements checkbox
;include 'optionbox.mac' ;macro implements optionbox
;include 'scrollbar.mac' ;macro implements scrollbar
;include 'd_button.mac' ;macro implements dinamic_button
/programs/develop/libraries/box_lib/branch/box_lib.asm
43,11 → 43,11
;CheckBox
;----------------------------------------------------
align 16
_init_checkbox ;macro for init checkbox
_init_checkbox2 ;macro for init checkbox
align 16
use_checkbox_draw ;macro reveals the function of the display.
use_checkbox_draw2 ;macro reveals the function of the display.
align 16
use_checkbox_mouse ;macro reveals processing function of the mouse.
use_checkbox_mouse2 ;macro reveals processing function of the mouse.
 
 
;--------------------------------------------------
133,10 → 133,10
;dd sz_edit_box_set_text, edit_box_set_text
;dd szVersion_ed, 0x00000001
 
dd sz_init_checkbox, init_checkbox
dd sz_check_box_draw, check_box_draw
dd sz_check_box_mouse, check_box_mouse
dd szVersion_ch, 0x00000002
dd sz_init_checkbox2, init_checkbox2
dd sz_check_box_draw2, check_box_draw2
dd sz_check_box_mouse2, check_box_mouse2
dd szVersion_ch2, 0x00000002
 
;dd sz_option_box_draw, option_box_draw
;dd sz_option_box_mouse, option_box_mouse
232,10 → 232,10
sz_edit_box_set_text db 'edit_box_set_text',0
szVersion_ed db 'version_ed',0
 
sz_init_checkbox db 'init_checkbox',0
sz_check_box_draw db 'check_box_draw',0
sz_check_box_mouse db 'check_box_mouse',0
szVersion_ch db 'version_ch',0
sz_init_checkbox2 db 'init_checkbox2',0
sz_check_box_draw2 db 'check_box_draw2',0
sz_check_box_mouse2 db 'check_box_mouse2',0
szVersion_ch2 db 'version_ch2',0
 
sz_option_box_draw db 'option_box_draw',0
sz_option_box_mouse db 'option_box_mouse',0
/programs/develop/libraries/box_lib/branch/box_lib.mac
111,17 → 111,17
ch_flag_middle=100b ;ôëàã ðàñïîëîæåíèÿ òåêñòà â öåíòðå ò.å. 4-é áèò.
ch_flag_bottom=1000b ;ôëàã ðàñïîëîæåíèÿ òåêñòà â íèçó ò.å. ïî óìîë÷àíèþ ïðèíèìàåòñÿ çíà÷åíèå âíèçó ò.å. îòñóñòâèå 3-ãî è 4-ãî áèòà
 
ch_left_s equ [ebp] ;êîðäèíàòà íà÷àëà ðèñîâàíèÿ ïî õ
ch_top_s equ [ebp+4] ;êîîðäèíàòà íà÷àëà ðèñîâàíèÿ ïî ó
ch_text_margin equ [ebp+8] ;=4 ðàññòîÿíèå îò ïðÿìîóãîëüíèêà ÷åê áîêñà äî íàäïèñè
ch_color equ [ebp+12] ;öâåò âíóòðè checkbox
ch_border_color equ [ebp+16] ; or [edi+4] ;öâåò ðàìêè checkbox åå ìîæíî çàäàòü ñàìîñòîÿòåëüíî
ch_text_color equ [ebp+20] ;[edi+4] ;öâåò òåêñòà
ch_text_ptr equ [ebp+24] ;óêàçàòåëü íà íà÷àëî òåêñòîâîé ñòðîêè
ch_flags equ [ebp+28] ;ôëàãè
ch_sz_str equ [ebp+32] ;äëèííà ñòðîêè, âû÷èñëÿåòñÿ ïðè èíèöèàëèçàöèè êîìïîíåíòà
2ch_left_s equ [ebp] ;êîðäèíàòà íà÷àëà ðèñîâàíèÿ ïî õ
2ch_top_s equ [ebp+4] ;êîîðäèíàòà íà÷àëà ðèñîâàíèÿ ïî ó
2ch_text_margin equ [ebp+8] ;=4 ðàññòîÿíèå îò ïðÿìîóãîëüíèêà ÷åê áîêñà äî íàäïèñè
2ch_color equ [ebp+12] ;öâåò âíóòðè checkbox
2ch_border_color equ [ebp+16] ; or [edi+4] ;öâåò ðàìêè checkbox åå ìîæíî çàäàòü ñàìîñòîÿòåëüíî
2ch_text_color equ [ebp+20] ;[edi+4] ;öâåò òåêñòà
2ch_text_ptr equ [ebp+24] ;óêàçàòåëü íà íà÷àëî òåêñòîâîé ñòðîêè
2ch_flags equ [ebp+28] ;ôëàãè
2ch_sz_str equ [ebp+32] ;äëèííà ñòðîêè, âû÷èñëÿåòñÿ ïðè èíèöèàëèçàöèè êîìïîíåíòà
 
struc check_box left_s,top_s,ch_text_margin,color,border_color,text_color,text,flags
struc check_box2 left_s,top_s,ch_text_margin,color,border_color,text_color,text,flags
{ ;ñòðóêòóðà ïàðàìåòðîâ äëÿ ÷åê áîêñà
.left_s: dd left_s ;+0 ïîëîæåíèå ïî õ dw + ðàçìåð dw
.top_s: dd top_s ;+4 ïîëîæåíèå ïî ó dw + ðàçìåð dw
135,37 → 135,37
}
 
;Ìàêðîñ ïðîâåðêè ùåë÷êà ìûøêè íàä ãðóïïîé checkboxes.
macro init_checkboxes start,end
macro init_checkboxes2 start,end
{
mov ebp,start
mov ecx,((end-start)/ch_struc_size)
@@:
push ebp ;óêàçàòåëü íà ïåðâûé checkbox
call [init_checkbox] ;ìàêðîñ ïðîâåðêè ìûøêè íàä checkbox'îì
call [init_checkbox2] ;ìàêðîñ ïðîâåðêè ìûøêè íàä checkbox'îì
add ebp,ch_struc_size
loop @b
}
 
;Ìàêðîñ ïðîâåðêè ìûøêè ãðóïïû checkboxes.
macro checkboxes_mouse start,end
macro checkboxes_mouse2 start,end
{
mov ebp,start
mov ecx,((end-start)/ch_struc_size)
@@:
push ebp ;óêàçàòåëü íà ïåðâûé checkbox
call [check_box_mouse] ;íàðèñîâàòü checkbox
call [check_box_mouse2] ;íàðèñîâàòü checkbox
add ebp,ch_struc_size
loop @b
}
 
;Ìàêðîñ îòðèñîâêè ãðóïïû checkboxes.
macro checkboxes_draw start,end
macro checkboxes_draw2 start,end
{
mov ebp,start
mov ecx,((end-start)/ch_struc_size)
@@:
push ebp ;óêàçàòåëü íà ïåðâûé checkbox
call [check_box_draw] ;íàðèñîâàòü checkbox
call [check_box_draw2] ;íàðèñîâàòü checkbox
add ebp,ch_struc_size
loop @b
}
/programs/develop/libraries/box_lib/branch/checkbox.asm
174,17 → 174,17
dd 0,0
 
 
aInit_checkbox db 'init_checkbox',0
aCheck_box_draw db 'check_box_draw',0
aCheck_box_mouse db 'check_box_mouse',0
aVersion_ch db 'version_ch',0
aInit_checkbox db 'init_checkbox2',0
aCheck_box_draw db 'check_box_draw2',0
aCheck_box_mouse db 'check_box_mouse2',0
aVersion_ch db 'version_ch2',0
;---------------------------------------------------------------------
check1 check_box (10 shl 16 + 12),(10 shl 16 + 12),6,0xC0AABBCC,0,0x80000000,check_text,ch_flag_en
check2 check_box (10 shl 16 + 22),(25 shl 16 + 12),6,0xC0AABBCC,0,0x80000000,check_text2
check3 check_box (10 shl 16 + 12),(40 shl 16 + 22),6,0xC0AABBCC,0,0x80000000,check_text3
check4 check_box (10 shl 16 + 12),(70 shl 16 + 22),6,0xC0AABBCC,0,0x80000000,check_text4,ch_flag_top
check5 check_box (10 shl 16 + 12),(100 shl 16 + 22),6,0xC0AABBCC,0,0x80000000,check_text5,ch_flag_middle
check6 check_box (10 shl 16 + 12),(130 shl 16 + 22),6,0xC0AABBCC,0,0x80000000,check_text6,ch_flag_bottom
check1 check_box2 (10 shl 16 + 12),(10 shl 16 + 12),6,0xC0AABBCC,0,0x80000000,check_text,ch_flag_en
check2 check_box2 (10 shl 16 + 22),(25 shl 16 + 12),6,0xC0AABBCC,0,0x80000000,check_text2
check3 check_box2 (10 shl 16 + 12),(40 shl 16 + 22),6,0xC0AABBCC,0,0x80000000,check_text3
check4 check_box2 (10 shl 16 + 12),(70 shl 16 + 22),6,0xC0AABBCC,0,0x80000000,check_text4,ch_flag_top
check5 check_box2 (10 shl 16 + 12),(100 shl 16 + 22),6,0xC0AABBCC,0,0x80000000,check_text5,ch_flag_middle
check6 check_box2 (10 shl 16 + 12),(130 shl 16 + 22),6,0xC0AABBCC,0,0x80000000,check_text6,ch_flag_bottom
;---------------------------------------------------------------------
hed db 'CheckBox Exemples <Lrz> date 15.10.2010',0
hed_end:
/programs/develop/libraries/box_lib/branch/checkbox2.mac
0,0 → 1,155
;Ïîñëåäíàÿ ìîäèôèêàöèÿ 03.10.2010
;ôàéë ñîçäàí 13.02.2009 <Lrz> Íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
;Ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
;Checkbox
 
;Èíèöèàëèçàöèÿ checkbox
macro _init_checkbox2
{
init_checkbox2:
;ïîäñ÷èòàåì êîë-âî ñèìâîëîâ â äëèííå âûâîäèìîé ñòðîêè.
pushad
mov ebp,dword [esp+36] ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå
mov ebx,dword 2ch_text_margin ;eax=0
mov esi,dword 2ch_text_ptr ;óêàçàòåëü íà ñòðî÷êó
lodsb ;â al ïåðâûé ñèìâîë èç ñòðîêè
test al,al
jz .ex_loop
@@:
add ebx,6 ;øèðèíà ñèìâîëà
lodsb
test al,al
jnz @b
.ex_loop:
 
mov dword 2ch_sz_str,ebx ;çàïèøèì äëèííó ñòðîêè ñ ó÷åòîì îòñòóïà îò êâàäðàòèêà
popad
ret 4
}
 
macro use_checkbox_draw2
{
check_box_draw2:
pushad ;ñîõðàíèì âñå ðåãèñòðû
mov ebp,dword [esp+36] ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå
mcall 13,2ch_left_s,2ch_top_s,2ch_border_color ;ðèñóåì ðàìêó ÷åê áîêñà, ôàêòè÷åñêè ðèñóåì ïðÿìîóãîëüíèê è çàêðàøèâàåì ôîí âíóòðè öâåòîì ðàìêè áîêñà
 
mov edx,dword 2ch_color ;çàãðóæàåì öâåò ôîíà
add ebx,1 shl 16 - 2
add ecx,1 shl 16 - 2
mcall ;çàêðàøèâàåì âíóòðåííîñòè ÷åêáîêñà ôîíîì
 
test dword 2ch_flags,2 ;äîñòàòü çíà÷åíèå áèòà èç ïåðåìåííîé è ïîìåñòèòü â ôëàã CF
jz @f ;â åñëè CF=1, òî âûïîëíèì ñëåäóþùóþ ïðîöåäóðó èíà÷å ïåðåéòè íà íèæíþþ @@
call check_box_draw_ch2 ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
@@:
;----------------------------
;ðàñ÷åò êóäà áóäåò ïðîèçâåäåí âûâîä òåêñòà
;----------------------------
; mov ebx,dword ch_left_s ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà) äëÿ ÷åê áîêñà
; add ebx,dword ch_text_margin ;äîáàâèì ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
; shl ebx,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
; add ebx,dword ch_left_s ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Õ
 
; mov eax,word ch_top_s ;çàãðóçèì çíà÷åíèå ïî (y shl 16 + äëèííà) äëÿ ÷åê áîêñà
; shr eax,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
; add eax,dword ch_top_s ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Y
; Îïòèìèçàöèÿ äëÿ ÖÏ
mov ebx,dword 2ch_left_s ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà) äëÿ ÷åê áîêñà
mov eax,dword 2ch_top_s ;çàãðóçèì çíà÷åíèå ïî (y shl 16 + äëèííà) äëÿ ÷åê áîêñà
mov ecx,eax
add ebx,dword 2ch_text_margin ;äîáàâèì ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
shr eax,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ïðàâî (ðàçäåëèì íà 65536) â ax âåðõíàÿ òî÷êà
shl ebx,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
 
sub ecx,8 ;êîððåòèðîâêà ó÷èòûâàåì âûñîòó øðèôòà
 
test dword 2ch_flags,ch_flag_bottom ;ïðîâåðèì, íóæíî ëè âûâîäèòü ââåðõó íàäïèñü
jnz .bottom
 
test dword 2ch_flags,ch_flag_middle ;ïðîâåðèì, íóæíî ëè âûâîäèòü â öåíòð íàäïèñü
jz .top ;îñòàëñÿ òîëüêî top
shr cx,1 ;ðàçäåëèì íà 2
.bottom:
add ax,cx
.top:
add ebx,dword 2ch_left_s ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Õ
mov bx,ax
;ebx õ shl 16 +y êîîðäèíàòû âûâîäà ñòðî÷êè
 
mov ecx,dword 2ch_text_color ;çàãðóçèì öâåò íàäïèñè + flags
mov edx,dword 2ch_text_ptr ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó
mcall 4 ;Âûâîä
popad ;âîññòàíîâèòü çíà÷åíèÿ ðåãèñòðîâ èç ñòåêà
ret 4 ;âûéäåì èç ïðîöåäóðû è óäàëèì èç ñòåêà óêàçàòåëü íà ñòðóêòóðó (4 áàéòà)
 
check_box_clear_ch2: ;î÷èñòêà ÷åê áîêñà
mov edx,dword 2ch_color ;öâåò âíóòðè ÷åê áîêñà
jmp @f ;áåçóñëîâíûé ïðûæîê íà íèæíþþ ìåòêó @@
check_box_draw_ch2: ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
mov edx,dword 2ch_border_color ;çàãðóçèòü öâåò
@@:
;Îòîáðàçèòü âêëþ÷åíûé checkbox
mov ebx,dword 2ch_left_s ;çàãðóæàåì õ shl 16 + äëèííà ïî Õ
mov ecx,dword 2ch_top_s ;çàãðóæàåì Y shl 16 + äëèííà ïî Y
add ebx,2 shl 16 - 4 ;ïîñëå ýòèõ èçìåíåíèé (X+2) shl 16 +äëèííà ïî (Õ-2)
add ecx,2 shl 16 - 4 ;ïîñëå ýòèõ èçìåíåíèé (Y+2) shl 16 +äëèííà ïî (Y-2)
mcall 13 ;îòîáðàçèòü êâàäðàò âíóòðè checkbox
ret
}
 
 
macro use_checkbox_mouse2
{
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Îáðàáîò÷èê mouse
;Ïðè ïîïàäàíèè ìûøêè + íàæàòà êëàâèøà â îáëàñòü checkbox ñîñòîÿíèå áîêñà äîëæíî ìåíÿòñÿ àêòèâíûé - íå àêòèâíûé.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
check_box_mouse2: ;îáðàáîòêà ìûøè
pushad
mov ebp,dword [esp+36] ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå
mcall 37,2 ;ïðîâåðÿåì ñîñòîÿíèå êëàâèø ìûøêè. Áûëî ëè ñîáûòèå íàæàòàÿ êëàâèøà íà ìûøêå.
test eax,eax ;ïðîâåðêà åñëè ó íàñ â eax=0, âûéäåì
jz .check_box_mouse_end ;îáðàáîòêà çàêîí÷èëàñü
; Äà ñîáûòèå: íàæàòèå êëàâèøè ìûøêè ïðîèçîøëî.
@@:
mcall 37,1 ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà
;íà âûõîäå â eax x shl 16 + y
;ñðàâíåíèå âåðõíåé òî÷êè ïî Y
mov ecx,dword 2ch_top_s ;y shl 16 +äëèííà ïî y
mov ebx,ecx
shr ebx,16 ;bx = êîîðäèíàòà ïî y
cmp ax,bx
jb .check_box_mouse_end ;óêàçàòåëü ìûøêè ìåíüøå íà÷àëüíîé êîîðäèíàòû ïî y ÷åì êîîðäèíàòà ïî Y ó áîêñà
;ñðàâíåíèå íèæíåé òî÷êè ïî Y
add cx,bx ;ñëîæèì äëèííó ïî y è êîîðäèíàòó âåðõíåé òî÷êè ïî y ïîëè÷èì êîîðäèíàòó íèæíåé òî÷êè ïî Y
cmp ax,cx
ja .check_box_mouse_end ;óêàçàòåëü ìûøêè áîëüøå êîíå÷íîé êîîðäèíàòû ïî y ÷åì êîîðäèíàòà ïî Y ó áîêñà
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
shr eax,16 ;ñìåñòèì êîîðäèíàòó ïî Õ â íèæíóþ ÷àñòü ðåãèñòðà ò.å. â ax
;ñðàâíåíèå ïî íà÷àëüíîé òî÷êå Õ
mov ecx,dword 2ch_left_s ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà) äëÿ ÷åê áîêñà
mov ebx,ecx
shr ebx,16 ;bx = êîîðäèíàòà ïî X
cmp ax,bx
jb .check_box_mouse_end ;óêàçàòåëü ìûøêè ìåíüøå íà÷àëüíîé êîîðäèíàòû ïî X ÷åì êîîðäèíàòà ïî X ó áîêñà
;ñðàâíåíèå êîíå÷íîé òî÷êè ïî X
add bx,cx ;ñëîæèì äëèííó ïî x è êîîðäèíàòó òî÷êè ïî õ ïîëó÷èì êîîðäèíàòó êîíå÷íîé òî÷êè ïî Õ
add bx,word 2ch_sz_str ;äîáàâèì äëèííó ñòðîêè òåêñòà ñ îòñòóïîì ïðåäâàðòèåëüíî çàïèñàâ èõ â ìîìåíò èíèöèàëèçàöèè
cmp ax,bx
ja .check_box_mouse_end ;óêàçàòåëü ìûøêè áîëüøå êîíå÷íîé êîîðäèíàòû ïî õ ÷åì êîîðäèíàòà ïî Õ ó áîêñà
;åñëè âñå ïðîâåðêè áûëè óñïåøíî ïðîéäåíû ìû îáÿçàíû ïîìåíÿòü ñîñòîÿíèå áîêñà
btc dword 2ch_flags,2 ;ïåðåíîñ 2-ãî áèòà â cf è èíâåðñèÿ åãî
jc .enable_box ;åñëè CF=1 òî îòîáðàçèì âêëþ÷åííûé áîêñ è âûéäåì
push dword .check_box_mouse_end ;ôîêóñ -ïîêóñ, âåðíåìñÿ ïîñëå âûçîâà check_box_clear_ch íà ìåòêó check_box_mouse_end
jmp check_box_clear_ch2 ;âûêëþ÷èòü ÷åê áîêñ ò.å. íà ìåñòå çàêðàøåííîãî ïðÿìîóãîëüíèêà îòîáðàçèòü öâåò ôîíà.
 
.enable_box:
call check_box_draw_ch2 ;îòîáðàçèòü âêëþ÷åííûé ÷åê áîêñ
.check_box_mouse_end:
popad ;âîññòàíîâèòü ðåãèñòðû èç ñòåêà
ret 4 ;âûéòè è âîññòàíîâèì ñòåê
}
/programs/develop/libraries/box_lib/trunk/bl_sys.mac
1,5 → 1,6
include 'editbox.mac' ;macro which should make life easier :) specially for editbox
include 'checkbox.mac' ;macro implements checkbox
include 'checkbox.mac' ;macro implements checkbox old version
include 'checkbox2.mac' ;macro implements checkbox version 2
include 'optionbox.mac' ;macro implements optionbox
include 'scrollbar.mac' ;macro implements scrollbar
include 'd_button.mac' ;macro implements dinamic_button
/programs/develop/libraries/box_lib/trunk/box_lib.asm
37,7 → 37,7
use_editbox_mouse ;macro reveals processing function of the mouse.
 
;----------------------------------------------------
;CheckBox
;CheckBox old version
;----------------------------------------------------
align 16
use_checkbox_draw ;macro reveals the function of the display.
44,6 → 44,15
align 16
use_checkbox_mouse ;macro reveals processing function of the mouse.
 
;----------------------------------------------------
;CheckBox2
;----------------------------------------------------
align 16
_init_checkbox2 ;macro for init checkbox
align 16
use_checkbox_draw2 ;macro reveals the function of the display.
align 16
use_checkbox_mouse2 ;macro reveals processing function of the mouse.
 
;--------------------------------------------------
;radiobutton Group
132,6 → 141,12
dd sz_check_box_mouse, check_box_mouse
dd szVersion_ch, 0x00000001
 
dd sz_init_checkbox2, init_checkbox2
dd sz_check_box_draw2, check_box_draw2
dd sz_check_box_mouse2, check_box_mouse2
dd szVersion_ch2, 0x00000002
 
 
dd sz_option_box_draw, option_box_draw
dd sz_option_box_mouse, option_box_mouse
dd szVersion_op, 0x00000001
230,6 → 245,11
sz_check_box_mouse db 'check_box_mouse',0
szVersion_ch db 'version_ch',0
 
sz_init_checkbox2 db 'init_checkbox2',0
sz_check_box_draw2 db 'check_box_draw2',0
sz_check_box_mouse2 db 'check_box_mouse2',0
szVersion_ch2 db 'version_ch2',0
 
sz_option_box_draw db 'option_box_draw',0
sz_option_box_mouse db 'option_box_mouse',0
szVersion_op db 'version_op',0
/programs/develop/libraries/box_lib/trunk/box_lib.mac
148,7 → 148,95
loop @b
}
 
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Basic macros for use CheckBox ;
;Last change 12.10.2010 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ch_struc_size=36 ;à §¬¥à áâàãªâãàë
ch_flag_en=10b ;ä« £ ãáâ ­®¢«¥­­®£® 祪 ¡®ªá .
ch_flag_top=0x0 ;ä« £ à á¯®«®¦¥­¨ï ⥪áâ  ¢¢¥àåã â.¥. 3-© ¡¨â
ch_flag_middle=100b ;ä« £ à á¯®«®¦¥­¨ï ⥪áâ  ¢ 業âॠâ.¥. 4-© ¡¨â.
ch_flag_bottom=1000b ;ä« £ à á¯®«®¦¥­¨ï ⥪áâ  ¢ ­¨§ã â.¥. ¯® 㬮«ç ­¨î ¯à¨­¨¬ ¥âáï §­ ç¥­¨¥ ¢­¨§ã â.¥. ®âáãá⢨¥ 3-£® ¨ 4-£® ¡¨â 
 
2ch_left_s equ [ebp] ;ª®à¤¨­ â  ­ ç «  à¨á®¢ ­¨ï ¯® å
2ch_top_s equ [ebp+4] ;ª®®à¤¨­ â  ­ ç «  à¨á®¢ ­¨ï ¯® ã
2ch_text_margin equ [ebp+8] ;=4 à ááâ®ï­¨¥ ®â ¯àאַ㣮«ì­¨ª  祪 ¡®ªá  ¤® ­ ¤¯¨á¨
2ch_color equ [ebp+12] ;梥⠢­ãâਠcheckbox
2ch_border_color equ [ebp+16] ; or [edi+4] ;梥â à ¬ª¨ checkbox ¥¥ ¬®¦­® § ¤ âì á ¬®áâ®ï⥫쭮
2ch_text_color equ [ebp+20] ;[edi+4] ;梥â ⥪áâ 
2ch_text_ptr equ [ebp+24] ;㪠§ â¥«ì ­  ­ ç «® ⥪á⮢®© áâப¨
2ch_flags equ [ebp+28] ;ä« £¨
2ch_sz_str equ [ebp+32] ;¤«¨­­  áâப¨, ¢ëç¨á«ï¥âáï ¯à¨ ¨­¨æ¨ «¨§ æ¨¨ ª®¬¯®­¥­â 
 
struc check_box2 left_s,top_s,ch_text_margin,color,border_color,text_color,text,flags
{ ;áâàãªâãà  ¯ à ¬¥â஢ ¤«ï 祪 ¡®ªá 
.left_s: dd left_s ;+0 ¯®«®¦¥­¨¥ ¯® å dw + à §¬¥à dw
.top_s: dd top_s ;+4 ¯®«®¦¥­¨¥ ¯® ã dw + à §¬¥à dw
.ch_text_margin: dd ch_text_margin ;à ááâ®ï­¨¥ ®â ¯àאַ㣮«ì­¨ª  祪 ¡®ªá  ¤® ­ ¤¯¨á¨
.color: dd color ;梥⠢­ãâਠ祪¡®ªá 
.border_color: dd border_color ;梥â à ¬ª¨
.text_color: dd text_color ;梥⠭ ¤¯¨á¨
.text: dd text ; ¤à¥á ¢ ª®¤¥ ¯à®£à ¬¬ë £¤¥ à á¯®«®¦¥­ ⥪áâ
.flags: dd flags+0 ;ä« £¨
.size_of_str: dd 0x0 ;¤«¨­­  áâப¨, ¢ëç¨á«ï¥âáï ¯à¨ ¨­¨æ¨ «¨§ æ¨¨ ª®¬¯®­¥­â 
}
 
;Œ ªà®á ¯à®¢¥àª¨ 饫窠 ¬ë誨 ­ ¤ £à㯯®© checkboxes.
macro init_checkboxes2 start,end
{
mov ebp,start
mov ecx,((end-start)/ch_struc_size)
@@:
push ebp ;㪠§ â¥«ì ­  ¯¥à¢ë© checkbox
call [init_checkbox2] ;¬ ªà®á ¯à®¢¥àª¨ ¬ë誨 ­ ¤ checkbox'®¬
add ebp,ch_struc_size
loop @b
}
 
;Œ ªà®á ¯à®¢¥àª¨ ¬ë誨 £à㯯ë checkboxes.
macro checkboxes_mouse2 start,end
{
mov ebp,start
mov ecx,((end-start)/ch_struc_size)
@@:
push ebp ;㪠§ â¥«ì ­  ¯¥à¢ë© checkbox
call [check_box_mouse2] ;­ à¨á®¢ âì checkbox
add ebp,ch_struc_size
loop @b
}
 
;Œ ªà®á ®âà¨á®¢ª¨ £à㯯ë checkboxes.
macro checkboxes_draw2 start,end
{
mov ebp,start
mov ecx,((end-start)/ch_struc_size)
@@:
push ebp ;㪠§ â¥«ì ­  ¯¥à¢ë© checkbox
call [check_box_draw2] ;­ à¨á®¢ âì checkbox
add ebp,ch_struc_size
loop @b
}
 
macro check_boxes_set_sys_color2 start,end,color_table
{
mov ebp,start
mov ecx,((end-start)/ch_struc_size)
mov esi,color_table
@@:
push dword [esi+32] ;梥â ⥪áâ  ¢ à ¡®ç¥© ®¡« á⨠®ª­ 
pop dword ch_text_color
push dword [esi+36] ;梥⠣à ä¨ª¨ ¢ ®ª­¥ (à §¤¥«¨â¥«ì­ë¥ «¨­¨¨ ¨ â.¯.)
pop dword ch_border_color
add ebp,ch_struc_size
loop @b
}
 
 
 
 
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Basic macros for use OptionBox ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
/programs/develop/libraries/box_lib/trunk/checkbox2.mac
0,0 → 1,155
;Ïîñëåäíàÿ ìîäèôèêàöèÿ 03.10.2010
;ôàéë ñîçäàí 13.02.2009 <Lrz> Íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
;Ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
;Checkbox
 
;Èíèöèàëèçàöèÿ checkbox
macro _init_checkbox2
{
init_checkbox2:
;ïîäñ÷èòàåì êîë-âî ñèìâîëîâ â äëèííå âûâîäèìîé ñòðîêè.
pushad
mov ebp,dword [esp+36] ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå
mov ebx,dword 2ch_text_margin ;eax=0
mov esi,dword 2ch_text_ptr ;óêàçàòåëü íà ñòðî÷êó
lodsb ;â al ïåðâûé ñèìâîë èç ñòðîêè
test al,al
jz .ex_loop
@@:
add ebx,6 ;øèðèíà ñèìâîëà
lodsb
test al,al
jnz @b
.ex_loop:
 
mov dword 2ch_sz_str,ebx ;çàïèøèì äëèííó ñòðîêè ñ ó÷åòîì îòñòóïà îò êâàäðàòèêà
popad
ret 4
}
 
macro use_checkbox_draw2
{
check_box_draw2:
pushad ;ñîõðàíèì âñå ðåãèñòðû
mov ebp,dword [esp+36] ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå
mcall 13,2ch_left_s,2ch_top_s,2ch_border_color ;ðèñóåì ðàìêó ÷åê áîêñà, ôàêòè÷åñêè ðèñóåì ïðÿìîóãîëüíèê è çàêðàøèâàåì ôîí âíóòðè öâåòîì ðàìêè áîêñà
 
mov edx,dword 2ch_color ;çàãðóæàåì öâåò ôîíà
add ebx,1 shl 16 - 2
add ecx,1 shl 16 - 2
mcall ;çàêðàøèâàåì âíóòðåííîñòè ÷åêáîêñà ôîíîì
 
test dword 2ch_flags,2 ;äîñòàòü çíà÷åíèå áèòà èç ïåðåìåííîé è ïîìåñòèòü â ôëàã CF
jz @f ;â åñëè CF=1, òî âûïîëíèì ñëåäóþùóþ ïðîöåäóðó èíà÷å ïåðåéòè íà íèæíþþ @@
call check_box_draw_ch2 ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
@@:
;----------------------------
;ðàñ÷åò êóäà áóäåò ïðîèçâåäåí âûâîä òåêñòà
;----------------------------
; mov ebx,dword ch_left_s ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà) äëÿ ÷åê áîêñà
; add ebx,dword ch_text_margin ;äîáàâèì ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
; shl ebx,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
; add ebx,dword ch_left_s ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Õ
 
; mov eax,word ch_top_s ;çàãðóçèì çíà÷åíèå ïî (y shl 16 + äëèííà) äëÿ ÷åê áîêñà
; shr eax,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
; add eax,dword ch_top_s ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Y
; Îïòèìèçàöèÿ äëÿ ÖÏ
mov ebx,dword 2ch_left_s ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà) äëÿ ÷åê áîêñà
mov eax,dword 2ch_top_s ;çàãðóçèì çíà÷åíèå ïî (y shl 16 + äëèííà) äëÿ ÷åê áîêñà
mov ecx,eax
add ebx,dword 2ch_text_margin ;äîáàâèì ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
shr eax,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ïðàâî (ðàçäåëèì íà 65536) â ax âåðõíàÿ òî÷êà
shl ebx,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
 
sub ecx,8 ;êîððåòèðîâêà ó÷èòûâàåì âûñîòó øðèôòà
 
test dword 2ch_flags,ch_flag_bottom ;ïðîâåðèì, íóæíî ëè âûâîäèòü ââåðõó íàäïèñü
jnz .bottom
 
test dword 2ch_flags,ch_flag_middle ;ïðîâåðèì, íóæíî ëè âûâîäèòü â öåíòð íàäïèñü
jz .top ;îñòàëñÿ òîëüêî top
shr cx,1 ;ðàçäåëèì íà 2
.bottom:
add ax,cx
.top:
add ebx,dword 2ch_left_s ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Õ
mov bx,ax
;ebx õ shl 16 +y êîîðäèíàòû âûâîäà ñòðî÷êè
 
mov ecx,dword 2ch_text_color ;çàãðóçèì öâåò íàäïèñè + flags
mov edx,dword 2ch_text_ptr ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó
mcall 4 ;Âûâîä
popad ;âîññòàíîâèòü çíà÷åíèÿ ðåãèñòðîâ èç ñòåêà
ret 4 ;âûéäåì èç ïðîöåäóðû è óäàëèì èç ñòåêà óêàçàòåëü íà ñòðóêòóðó (4 áàéòà)
 
check_box_clear_ch2: ;î÷èñòêà ÷åê áîêñà
mov edx,dword 2ch_color ;öâåò âíóòðè ÷åê áîêñà
jmp @f ;áåçóñëîâíûé ïðûæîê íà íèæíþþ ìåòêó @@
check_box_draw_ch2: ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
mov edx,dword 2ch_border_color ;çàãðóçèòü öâåò
@@:
;Îòîáðàçèòü âêëþ÷åíûé checkbox
mov ebx,dword 2ch_left_s ;çàãðóæàåì õ shl 16 + äëèííà ïî Õ
mov ecx,dword 2ch_top_s ;çàãðóæàåì Y shl 16 + äëèííà ïî Y
add ebx,2 shl 16 - 4 ;ïîñëå ýòèõ èçìåíåíèé (X+2) shl 16 +äëèííà ïî (Õ-2)
add ecx,2 shl 16 - 4 ;ïîñëå ýòèõ èçìåíåíèé (Y+2) shl 16 +äëèííà ïî (Y-2)
mcall 13 ;îòîáðàçèòü êâàäðàò âíóòðè checkbox
ret
}
 
 
macro use_checkbox_mouse2
{
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Îáðàáîò÷èê mouse
;Ïðè ïîïàäàíèè ìûøêè + íàæàòà êëàâèøà â îáëàñòü checkbox ñîñòîÿíèå áîêñà äîëæíî ìåíÿòñÿ àêòèâíûé - íå àêòèâíûé.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
check_box_mouse2: ;îáðàáîòêà ìûøè
pushad
mov ebp,dword [esp+36] ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå
mcall 37,2 ;ïðîâåðÿåì ñîñòîÿíèå êëàâèø ìûøêè. Áûëî ëè ñîáûòèå íàæàòàÿ êëàâèøà íà ìûøêå.
test eax,eax ;ïðîâåðêà åñëè ó íàñ â eax=0, âûéäåì
jz .check_box_mouse_end ;îáðàáîòêà çàêîí÷èëàñü
; Äà ñîáûòèå: íàæàòèå êëàâèøè ìûøêè ïðîèçîøëî.
@@:
mcall 37,1 ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà
;íà âûõîäå â eax x shl 16 + y
;ñðàâíåíèå âåðõíåé òî÷êè ïî Y
mov ecx,dword 2ch_top_s ;y shl 16 +äëèííà ïî y
mov ebx,ecx
shr ebx,16 ;bx = êîîðäèíàòà ïî y
cmp ax,bx
jb .check_box_mouse_end ;óêàçàòåëü ìûøêè ìåíüøå íà÷àëüíîé êîîðäèíàòû ïî y ÷åì êîîðäèíàòà ïî Y ó áîêñà
;ñðàâíåíèå íèæíåé òî÷êè ïî Y
add cx,bx ;ñëîæèì äëèííó ïî y è êîîðäèíàòó âåðõíåé òî÷êè ïî y ïîëè÷èì êîîðäèíàòó íèæíåé òî÷êè ïî Y
cmp ax,cx
ja .check_box_mouse_end ;óêàçàòåëü ìûøêè áîëüøå êîíå÷íîé êîîðäèíàòû ïî y ÷åì êîîðäèíàòà ïî Y ó áîêñà
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
shr eax,16 ;ñìåñòèì êîîðäèíàòó ïî Õ â íèæíóþ ÷àñòü ðåãèñòðà ò.å. â ax
;ñðàâíåíèå ïî íà÷àëüíîé òî÷êå Õ
mov ecx,dword 2ch_left_s ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà) äëÿ ÷åê áîêñà
mov ebx,ecx
shr ebx,16 ;bx = êîîðäèíàòà ïî X
cmp ax,bx
jb .check_box_mouse_end ;óêàçàòåëü ìûøêè ìåíüøå íà÷àëüíîé êîîðäèíàòû ïî X ÷åì êîîðäèíàòà ïî X ó áîêñà
;ñðàâíåíèå êîíå÷íîé òî÷êè ïî X
add bx,cx ;ñëîæèì äëèííó ïî x è êîîðäèíàòó òî÷êè ïî õ ïîëó÷èì êîîðäèíàòó êîíå÷íîé òî÷êè ïî Õ
add bx,word 2ch_sz_str ;äîáàâèì äëèííó ñòðîêè òåêñòà ñ îòñòóïîì ïðåäâàðòèåëüíî çàïèñàâ èõ â ìîìåíò èíèöèàëèçàöèè
cmp ax,bx
ja .check_box_mouse_end ;óêàçàòåëü ìûøêè áîëüøå êîíå÷íîé êîîðäèíàòû ïî õ ÷åì êîîðäèíàòà ïî Õ ó áîêñà
;åñëè âñå ïðîâåðêè áûëè óñïåøíî ïðîéäåíû ìû îáÿçàíû ïîìåíÿòü ñîñòîÿíèå áîêñà
btc dword 2ch_flags,2 ;ïåðåíîñ 2-ãî áèòà â cf è èíâåðñèÿ åãî
jc .enable_box ;åñëè CF=1 òî îòîáðàçèì âêëþ÷åííûé áîêñ è âûéäåì
push dword .check_box_mouse_end ;ôîêóñ -ïîêóñ, âåðíåìñÿ ïîñëå âûçîâà check_box_clear_ch íà ìåòêó check_box_mouse_end
jmp check_box_clear_ch2 ;âûêëþ÷èòü ÷åê áîêñ ò.å. íà ìåñòå çàêðàøåííîãî ïðÿìîóãîëüíèêà îòîáðàçèòü öâåò ôîíà.
 
.enable_box:
call check_box_draw_ch2 ;îòîáðàçèòü âêëþ÷åííûé ÷åê áîêñ
.check_box_mouse_end:
popad ;âîññòàíîâèòü ðåãèñòðû èç ñòåêà
ret 4 ;âûéòè è âîññòàíîâèì ñòåê
}