1,15 → 1,15 |
;Ïîñëåäíàÿ ìîäèôèêàöèÿ 07.12.2016 |
;Ïîñëåäíàÿ ìîäèôèêàöèÿ 08.12.2020 |
;ôàéë ñîçäàí 13.02.2009 <Lrz> Íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ |
;Checkbox |
|
;Èíèöèàëèçàöèÿ checkbox |
align 16 |
init_checkbox2: |
init_checkbox: |
;ïîäñ÷èòàåì êîë-âî ñèìâîëîâ â äëèííå âûâîäèìîé ñòðîêè. |
pushad |
mov ebp,dword [esp+36] ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå |
mov ebx,dword 2ch_text_margin ;eax=0 |
mov esi,dword 2ch_text_ptr ;óêàçàòåëü íà ñòðî÷êó |
mov ebx,dword ch_text_margin ;eax=0 |
mov esi,dword ch_text_ptr ;óêàçàòåëü íà ñòðî÷êó |
lodsb ;â al ïåðâûé ñèìâîë èç ñòðîêè |
test al,al |
jz .ex_loop |
20,8 → 20,8 |
jnz @b |
.ex_loop: |
|
mov dword 2ch_sz_str,ebx ;çàïèøåì äëèííó ñòðîêè ñ ó÷åòîì îòñòóïà îò êâàäðàòèêà |
or dword 2ch_text_color,0x80000000 ;äîáàâëÿåì áèò äëÿ âûâîäà ASCIIZ-ñòðîêè |
mov dword ch_sz_str,ebx ;çàïèøåì äëèííó ñòðîêè ñ ó÷åòîì îòñòóïà îò êâàäðàòèêà |
or dword ch_text_color,0x80000000 ;äîáàâëÿåì áèò äëÿ âûâîäà ASCIIZ-ñòðîêè |
;íà ñëó÷àé åñëè ïîëüçîâàòåëü çàáûë åãî ñàìîñòîÿòåëüíî ïîñòàâèòü â ñòðóêòóðå |
popad |
ret 4 |
28,19 → 28,19 |
|
|
align 16 |
check_box_draw2: |
check_box_draw: |
pushad ;ñîõðàíèì âñå ðåãèñòðû |
mov ebp,dword [esp+36] ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå |
mcall SF_DRAW_RECT,2ch_left_s,2ch_top_s,2ch_border_color ;ðèñóåì ðàìêó ÷åê áîêñà, ôàêòè÷åñêè ðèñóåì ïðÿìîóãîëüíèê è çàêðàøèâàåì ôîí âíóòðè öâåòîì ðàìêè áîêñà |
mcall SF_DRAW_RECT,ch_left_s,ch_top_s,ch_border_color ;ðèñóåì ðàìêó ÷åê áîêñà, ôàêòè÷åñêè ðèñóåì ïðÿìîóãîëüíèê è çàêðàøèâàåì ôîí âíóòðè öâåòîì ðàìêè áîêñà |
|
mov edx,dword 2ch_color ;çàãðóæàåì öâåò ôîíà |
mov edx,dword ch_color ;çàãðóæàåì öâåò ôîíà |
add ebx,1 shl 16 - 2 |
add ecx,1 shl 16 - 2 |
mcall ;çàêðàøèâàåì âíóòðåííîñòè ÷åêáîêñà ôîíîì |
|
test dword 2ch_flags,2 ;äîñòàòü çíà÷åíèå áèòà èç ïåðåìåííîé è ïîìåñòèòü â ôëàã CF |
test dword ch_flags,2 ;äîñòàòü çíà÷åíèå áèòà èç ïåðåìåííîé è ïîìåñòèòü â ôëàã CF |
jz @f ;â åñëè CF=1, òî âûïîëíèì ñëåäóþùóþ ïðîöåäóðó èíà÷å ïåðåéòè íà íèæíþþ @@ |
call check_box_draw_ch2 ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ |
call check_box_draw_ch ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ |
@@: |
;---------------------------- |
;ðàñ÷åò êóäà áóäåò ïðîèçâåäåí âûâîä òåêñòà |
55,19 → 55,19 |
; 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 ebx,dword ch_left_s ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà) äëÿ ÷åê áîêñà |
mov eax,dword ch_top_s ;çàãðóçèì çíà÷åíèå ïî (y shl 16 + äëèííà) äëÿ ÷åê áîêñà |
mov ecx,eax |
add ebx,dword 2ch_text_margin ;äîáàâèì ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà |
add ebx,dword ch_text_margin ;äîáàâèì ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà |
shr eax,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ïðàâî (ðàçäåëèì íà 65536) â ax âåðõíàÿ òî÷êà |
shl ebx,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536) |
|
sub ecx,8 ;êîððåòèðîâêà ó÷èòûâàåì âûñîòó øðèôòà |
|
test dword 2ch_flags,ch_flag_bottom ;ïðîâåðèì, íóæíî ëè âûâîäèòü ââåðõó íàäïèñü |
test dword ch_flags,ch_flag_bottom ;ïðîâåðèì, íóæíî ëè âûâîäèòü ââåðõó íàäïèñü |
jnz .bottom |
|
test dword 2ch_flags,ch_flag_middle ;ïðîâåðèì, íóæíî ëè âûâîäèòü â öåíòð íàäïèñü |
test dword ch_flags,ch_flag_middle ;ïðîâåðèì, íóæíî ëè âûâîäèòü â öåíòð íàäïèñü |
jz .top ;îñòàëñÿ òîëüêî top |
|
shr cx,1 ;ðàçäåëèì íà 2 |
74,25 → 74,25 |
.bottom: |
add ax,cx |
.top: |
add ebx,dword 2ch_left_s ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Õ |
add ebx,dword ch_left_s ;cêîððåêòèðóåì ïîçèöèþ Õ. Ò.å. ñåé÷àñ â âåðõíåé ÷àñòè ebx ó íàñ òî÷êà íà÷àëà âûâîäà òåêñòà ïî Õ |
mov bx,ax |
;ebx õ shl 16 +y êîîðäèíàòû âûâîäà ñòðî÷êè |
|
mov ecx,dword 2ch_text_color ;çàãðóçèì öâåò íàäïèñè + flags |
mov edx,dword 2ch_text_ptr ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó |
mov ecx,dword ch_text_color ;çàãðóçèì öâåò íàäïèñè + flags |
mov edx,dword ch_text_ptr ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó |
mcall SF_DRAW_TEXT |
popad ;âîññòàíîâèòü çíà÷åíèÿ ðåãèñòðîâ èç ñòåêà |
ret 4 ;âûéäåì èç ïðîöåäóðû è óäàëèì èç ñòåêà óêàçàòåëü íà ñòðóêòóðó (4 áàéòà) |
|
check_box_clear_ch2: ;î÷èñòêà ÷åê áîêñà |
mov edx,dword 2ch_color ;öâåò âíóòðè ÷åê áîêñà |
check_box_clear_ch: ;î÷èñòêà ÷åê áîêñà |
mov edx,dword ch_color ;öâåò âíóòðè ÷åê áîêñà |
jmp @f ;áåçóñëîâíûé ïðûæîê íà íèæíþþ ìåòêó @@ |
check_box_draw_ch2: ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ |
mov edx,dword 2ch_border_color ;çàãðóçèòü öâåò |
check_box_draw_ch: ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ |
mov edx,dword ch_border_color ;çàãðóçèòü öâåò |
@@: |
;Îòîáðàçèòü âêëþ÷åíûé checkbox |
mov ebx,dword 2ch_left_s ;çàãðóæàåì õ shl 16 + äëèííà ïî Õ |
mov ecx,dword 2ch_top_s ;çàãðóæàåì Y shl 16 + äëèííà ïî Y |
mov ebx,dword ch_left_s ;çàãðóæàåì õ shl 16 + äëèííà ïî Õ |
mov ecx,dword ch_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 SF_DRAW_RECT ;îòîáðàçèòü êâàäðàò âíóòðè checkbox |
104,7 → 104,7 |
;Ïðè ïîïàäàíèè ìûøêè + íàæàòà êëàâèøà â îáëàñòü checkbox ñîñòîÿíèå áîêñà äîëæíî ìåíÿòñÿ àêòèâíûé - íå àêòèâíûé. |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
align 16 |
check_box_mouse2: ;îáðàáîòêà ìûøè |
check_box_mouse: ;îáðàáîòêà ìûøè |
pushad |
mov ebp,dword [esp+36] ;çàãðóæàåì óêàçàòåëü íà ñòðóêòóðó, óêàçàòåëü ìû ïåðåäàåì â ñòåêå |
mcall SF_MOUSE_GET,SSF_BUTTON ;ïðîâåðÿåì ñîñòîÿíèå êëàâèø ìûøêè. Áûëî ëè ñîáûòèå íàæàòàÿ êëàâèøà íà ìûøêå. |
115,7 → 115,7 |
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà |
;íà âûõîäå â eax x shl 16 + y |
;ñðàâíåíèå âåðõíåé òî÷êè ïî Y |
mov ecx,dword 2ch_top_s ;y shl 16 +äëèííà ïî y |
mov ecx,dword ch_top_s ;y shl 16 +äëèííà ïî y |
mov ebx,ecx |
shr ebx,16 ;bx = êîîðäèíàòà ïî y |
cmp ax,bx |
127,7 → 127,7 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
shr eax,16 ;ñìåñòèì êîîðäèíàòó ïî Õ â íèæíóþ ÷àñòü ðåãèñòðà ò.å. â ax |
;ñðàâíåíèå ïî íà÷àëüíîé òî÷êå Õ |
mov ecx,dword 2ch_left_s ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà) äëÿ ÷åê áîêñà |
mov ecx,dword ch_left_s ;çàãðóçèòü çíà÷åíèå (õ shl 16 + äëèííà) äëÿ ÷åê áîêñà |
mov ebx,ecx |
shr ebx,16 ;bx = êîîðäèíàòà ïî X |
cmp ax,bx |
134,17 → 134,17 |
jb .check_box_mouse_end ;óêàçàòåëü ìûøêè ìåíüøå íà÷àëüíîé êîîðäèíàòû ïî X ÷åì êîîðäèíàòà ïî X ó áîêñà |
;ñðàâíåíèå êîíå÷íîé òî÷êè ïî X |
add bx,cx ;ñëîæèì äëèííó ïî x è êîîðäèíàòó òî÷êè ïî õ ïîëó÷èì êîîðäèíàòó êîíå÷íîé òî÷êè ïî Õ |
add bx,word 2ch_sz_str ;äîáàâèì äëèííó ñòðîêè òåêñòà ñ îòñòóïîì ïðåäâàðòèåëüíî çàïèñàâ èõ â ìîìåíò èíèöèàëèçàöèè |
add bx,word ch_sz_str ;äîáàâèì äëèííó ñòðîêè òåêñòà ñ îòñòóïîì ïðåäâàðòèåëüíî çàïèñàâ èõ â ìîìåíò èíèöèàëèçàöèè |
cmp ax,bx |
ja .check_box_mouse_end ;óêàçàòåëü ìûøêè áîëüøå êîíå÷íîé êîîðäèíàòû ïî õ ÷åì êîîðäèíàòà ïî Õ ó áîêñà |
;åñëè âñå ïðîâåðêè áûëè óñïåøíî ïðîéäåíû ìû îáÿçàíû ïîìåíÿòü ñîñòîÿíèå áîêñà |
btc dword 2ch_flags,1 ;ïåðåíîñ 2-ãî áèòà â cf è èíâåðñèÿ åãî |
btc dword ch_flags,1 ;ïåðåíîñ 2-ãî áèòà â cf è èíâåðñèÿ åãî |
jnc .enable_box ;åñëè CF=1 òî îòîáðàçèì âêëþ÷åííûé áîêñ è âûéäåì |
push dword .check_box_mouse_end ;ôîêóñ -ïîêóñ, âåðíåìñÿ ïîñëå âûçîâà check_box_clear_ch íà ìåòêó check_box_mouse_end |
jmp check_box_clear_ch2 ;âûêëþ÷èòü ÷åê áîêñ ò.å. íà ìåñòå çàêðàøåííîãî ïðÿìîóãîëüíèêà îòîáðàçèòü öâåò ôîíà. |
jmp check_box_clear_ch ;âûêëþ÷èòü ÷åê áîêñ ò.å. íà ìåñòå çàêðàøåííîãî ïðÿìîóãîëüíèêà îòîáðàçèòü öâåò ôîíà. |
|
.enable_box: |
call check_box_draw_ch2 ;îòîáðàçèòü âêëþ÷åííûé ÷åê áîêñ |
call check_box_draw_ch ;îòîáðàçèòü âêëþ÷åííûé ÷åê áîêñ |
.check_box_mouse_end: |
popad ;âîññòàíîâèòü ðåãèñòðû èç ñòåêà |
ret 4 ;âûéòè è âîññòàíîâèì ñòåê |