Rev 1432 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1432 | Rev 1476 | ||
---|---|---|---|
1 | ;ôàéë ñîçäàí 13.02.2009 |
1 | ;ôàéë ñîçäàí 13.02.2009 |
2 | ;Ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj |
2 | ;Ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj |
3 | ;Checkbox |
3 | ;Checkbox |
4 | - | ||
5 | ch_struc_size=36 |
- | |
6 | ch_flag_en=10b ;ýëåìåíò âûáðàí |
- | |
7 | - | ||
8 | ch_left equ [edi] ;êîîðäèíàòà íà÷àëà ðèñîâàíèÿ ïî õ |
- | |
9 | ch_top equ [edi+2] ;êîîðäèíàòà íà÷àëà ðèñîâàíèÿ ïî ó |
- | |
10 | ch_text_margin equ [edi+4] ;=4 ðàññòîÿíèå îò ïðÿìîóãîëüíèêà ÷åê áîêñà äî íàäïèñè |
- | |
11 | ch_size equ [edi+8] ;12 ðàçìåð êâàäðàòà ÷åê áîêñà |
- | |
12 | ch_color equ [edi+12] ;öâåò âíóòðè checkbox |
- | |
13 | ch_border_color equ [edi+16] ; or [edi+4] ;öâåò ðàìêè checkbox åå ìîæíî çàäàòü ñàìîñòîÿòåëüíî |
- | |
14 | ch_text_color equ [edi+20] ;[edi+4] ;öâåò òåêñòà |
- | |
15 | ch_text_ptr equ [edi+24] ;óêàçàòåëü íà íà÷àëî òåêñòîâîé ñòðîêè |
- | |
16 | ch_text_length equ [edi+28] |
- | |
17 | ch_flags equ [edi+32] ;ôëàãè |
- | |
18 | 4 | ||
19 | macro use_checkbox_draw |
5 | macro use_checkbox_draw |
20 | { |
6 | { |
21 | check_box_draw: |
7 | check_box_draw: |
22 | pusha ;ñîõðàíèì âñå ðåãèñòðû |
8 | pusha ;ñîõðàíèì âñå ðåãèñòðû |
23 | mov edi,dword [esp+36] |
9 | mov edi,dword [esp+36] |
24 | mov eax,13 |
10 | mov eax,13 |
25 | movzx ebx,word ch_left |
11 | movzx ebx,word ch_left |
26 | shl ebx,16 |
12 | shl ebx,16 |
27 | add ebx,ch_size |
13 | add ebx,ch_size |
28 | mov ecx,ch_top |
14 | mov ecx,ch_top |
29 | shl ecx,16 |
15 | shl ecx,16 |
30 | add ecx,dword ch_size |
16 | add ecx,dword ch_size |
31 | mov edx,dword ch_border_color |
17 | mov edx,dword ch_border_color |
32 | mcall ;ðèñóåì ðàìêó |
18 | mcall ;ðèñóåì ðàìêó |
33 | 19 | ||
34 | mov edx,dword ch_color |
20 | mov edx,dword ch_color |
35 | add ebx,1 shl 16 - 2 |
21 | add ebx,1 shl 16 - 2 |
36 | add ecx,1 shl 16 - 2 |
22 | add ecx,1 shl 16 - 2 |
37 | mcall ;çàêðàøèâàåì âíóòðåííîñòè ÷åêáîêñà |
23 | mcall ;çàêðàøèâàåì âíóòðåííîñòè ÷åêáîêñà |
38 | 24 | ||
39 | test dword ch_flags,2 ;äîñòàòü çíà÷åíèå áèòà èç ïåðåìåííîé è ïîìåñòèòü â ôëàã CF |
25 | test dword ch_flags,2 ;äîñòàòü çíà÷åíèå áèòà èç ïåðåìåííîé è ïîìåñòèòü â ôëàã CF |
40 | jz @f ;â åñëè CF=1, òî âûïîëíèì ñëåäóþùóþ ïðîöåäóðó èíà÷å ïåðåéòè íà íèæíþþ @@ |
26 | jz @f ;â åñëè CF=1, òî âûïîëíèì ñëåäóþùóþ ïðîöåäóðó èíà÷å ïåðåéòè íà íèæíþþ @@ |
41 | call check_box_draw_ch ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ |
27 | call check_box_draw_ch ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ |
42 | @@: |
28 | @@: |
43 | ;---------------------------- |
29 | ;---------------------------- |
44 | ;ðàñ÷åò êóäà áóäåò ïðîèçâåäåí âûâîä òåêñòà |
30 | ;ðàñ÷åò êóäà áóäåò ïðîèçâåäåí âûâîä òåêñòà |
45 | ;---------------------------- |
31 | ;---------------------------- |
46 | movzx ebx,word ch_left ;çàãðóçèòü çíà÷åíèå õ äëÿ ÷åê áîêñà |
32 | movzx ebx,word ch_left ;çàãðóçèòü çíà÷åíèå õ äëÿ ÷åê áîêñà |
47 | add ebx,dword ch_size |
33 | add ebx,dword ch_size |
48 | add ebx,dword ch_text_margin;äîáàâèòü ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà |
34 | add ebx,dword ch_text_margin;äîáàâèòü ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà |
49 | shl ebx,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536) |
35 | shl ebx,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536) |
50 | mov bx,word ch_top ;çàãðóçèì çíà÷åíèå ïî y |
36 | mov bx,word ch_top ;çàãðóçèì çíà÷åíèå ïî y |
51 | add ebx,ch_size |
37 | add ebx,ch_size |
52 | mov ecx,dword ch_text_color ;çàãðóçèì öâåò íàäïèñè + flags |
38 | mov ecx,dword ch_text_color ;çàãðóçèì öâåò íàäïèñè + flags |
53 | sub ebx,7 ;äîáàâèì çíà÷åíèå äëèíû ñòîðîíû -9+2 |
39 | sub ebx,7 ;äîáàâèì çíà÷åíèå äëèíû ñòîðîíû -9+2 |
54 | 40 | ||
55 | mov edx,dword ch_text_ptr ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó |
41 | mov edx,dword ch_text_ptr ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó |
56 | mov esi,dword ch_text_length |
42 | mov esi,dword ch_text_length |
57 | ;âíåñåì â eax çíà÷åíèå âûâîäà íàäïèñè íà êàíâó |
43 | ;âíåñåì â eax çíà÷åíèå âûâîäà íàäïèñè íà êàíâó |
58 | mov eax,4 |
44 | mov eax,4 |
59 | mcall ;Âûâîä |
45 | mcall ;Âûâîä |
60 | popa ;âîññòàíîâèòü çíà÷åíèÿ ðåãèñòðîâ èç ñòåêà |
46 | popa ;âîññòàíîâèòü çíà÷åíèÿ ðåãèñòðîâ èç ñòåêà |
61 | ret 4 ;âûéäåì èç ïðîöåäóðû |
47 | ret 4 ;âûéäåì èç ïðîöåäóðû |
62 | 48 | ||
63 | check_box_clear_ch: ;î÷èñòêà ÷åê áîêñà |
49 | check_box_clear_ch: ;î÷èñòêà ÷åê áîêñà |
64 | mov edx,dword ch_color ;öâåò âíóòðè ÷åê áîêñà |
50 | mov edx,dword ch_color ;öâåò âíóòðè ÷åê áîêñà |
65 | jmp @f ;áåçóñëîâíûé ïðûæîê íà íèæíþþ ìåòêó @@ |
51 | jmp @f ;áåçóñëîâíûé ïðûæîê íà íèæíþþ ìåòêó @@ |
66 | check_box_draw_ch: ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ |
52 | check_box_draw_ch: ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ |
67 | mov edx,dword ch_border_color ;çàãðóçèòü öâåò |
53 | mov edx,dword ch_border_color ;çàãðóçèòü öâåò |
68 | @@: |
54 | @@: |
69 | movzx ebx,word ch_left ;çàãðóçèòü êîîðäèíàòó ïî õ |
55 | movzx ebx,word ch_left ;çàãðóçèòü êîîðäèíàòó ïî õ |
70 | mov eax,dword ch_size |
56 | mov eax,dword ch_size |
71 | mov bp,ax |
57 | mov bp,ax |
72 | shr eax,2 |
58 | shr eax,2 |
73 | push ax |
59 | push ax |
74 | 60 | ||
75 | push ax |
61 | push ax |
76 | add ebx,eax |
62 | add ebx,eax |
77 | shl ebx,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536) |
63 | shl ebx,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536) |
78 | pop ax |
64 | pop ax |
79 | lea eax,[eax*2] |
65 | lea eax,[eax*2] |
80 | sub bp,ax ;ñîõðàíèì ðåãèñòð bx â ðåãèñòðå óêàçàòåëÿ áàçû |
66 | sub bp,ax ;ñîõðàíèì ðåãèñòð bx â ðåãèñòðå óêàçàòåëÿ áàçû |
81 | mov bx,bp |
67 | mov bx,bp |
82 | 68 | ||
83 | movzx ecx,word ch_top ;çàãðóçèòü êîîðäèíàòó ïî ó |
69 | movzx ecx,word ch_top ;çàãðóçèòü êîîðäèíàòó ïî ó |
84 | pop ax |
70 | pop ax |
85 | add cx,ax |
71 | add cx,ax |
86 | shl ecx,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536) |
72 | shl ecx,16 ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536) |
87 | mov cx,bp ;çàãðóçèì çíà÷åíèÿ ðåãèñòðà óêàçàòåëÿ áàçû â cx |
73 | mov cx,bp ;çàãðóçèì çíà÷åíèÿ ðåãèñòðà óêàçàòåëÿ áàçû â cx |
88 | mov eax,13 ;â eax - çíà÷åíèÿ ôóíêöèè äëÿ âûâîäà ïîëîñû ò.å. ïî ñóòè ïðÿìîóãîëüíèêà, êîòîðûé îòîáðàæàåò âêëþ÷åííûé êîìïîíåíò ÷åê áîêñ |
74 | mov eax,13 ;â eax - çíà÷åíèÿ ôóíêöèè äëÿ âûâîäà ïîëîñû ò.å. ïî ñóòè ïðÿìîóãîëüíèêà, êîòîðûé îòîáðàæàåò âêëþ÷åííûé êîìïîíåíò ÷åê áîêñ |
89 | mcall ;âûâîä |
75 | mcall ;âûâîä |
90 | ret ;âûéòè èç ïðîöåäóðû |
76 | ret ;âûéòè èç ïðîöåäóðû |
91 | } |
77 | } |
92 | 78 | ||
93 | 79 | ||
94 | macro use_checkbox_mouse |
80 | macro use_checkbox_mouse |
95 | { |
81 | { |
96 | 82 | ||
97 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
83 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
98 | ;Îáðàáîò÷èê mouse |
84 | ;Îáðàáîò÷èê mouse |
99 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
85 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
100 | check_box_mouse: ;îáðàáîòêà ìûøè |
86 | check_box_mouse: ;îáðàáîòêà ìûøè |
101 | pusha |
87 | pusha |
102 | mov edi,dword [esp+36] |
88 | mov edi,dword [esp+36] |
103 | mov eax,37 ;áóäåì ÷òî òî äåëàòü åñëè ó íàñ ÷òî - íèòü íàæàòî |
89 | mov eax,37 ;áóäåì ÷òî òî äåëàòü åñëè ó íàñ ÷òî - íèòü íàæàòî |
104 | mov ebx,2 ;âíåñòè â ðåãèñòð çíà÷åíèå 2 |
90 | mov ebx,2 ;âíåñòè â ðåãèñòð çíà÷åíèå 2 |
105 | mcall ;ïðîâåðêà íå íàæàë ëè ïîëüçîâàòåëü êíîïêó ìûøêè |
91 | mcall ;ïðîâåðêà íå íàæàë ëè ïîëüçîâàòåëü êíîïêó ìûøêè |
106 | test eax,eax ;ïðîâåðêà åñëè ó íàñ â eax=0, òî óñòàíîâèì ôëàã è âûéäåì |
92 | test eax,eax ;ïðîâåðêà åñëè ó íàñ â eax=0, òî óñòàíîâèì ôëàã è âûéäåì |
107 | jnz @f ;ïåðåéòè íà íèæíþþ ìåòêó @@ |
93 | jnz @f ;ïåðåéòè íà íèæíþþ ìåòêó @@ |
108 | btr dword ch_flags,2 ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà íóëåâîå. |
94 | btr dword ch_flags,2 ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà íóëåâîå. |
109 | jmp check_box_mouse_end |
95 | jmp check_box_mouse_end |
110 | 96 | ||
111 | @@: |
97 | @@: |
112 | bts dword ch_flags,2 ;ïðîâåðêà ôëàãà ò.å. ïåðåíîñ â cf çíà÷åíèå áèòà è óñòàíîâêà áèòà â ñîñòîÿíèå âêëþ÷åíî |
98 | bts dword ch_flags,2 ;ïðîâåðêà ôëàãà ò.å. ïåðåíîñ â cf çíà÷åíèå áèòà è óñòàíîâêà áèòà â ñîñòîÿíèå âêëþ÷åíî |
113 | jc check_box_mouse_end ;åñëè CF=1 òî ïåðåéòè â êîíåö ò.å. ýòî âûõîä |
99 | jc check_box_mouse_end ;åñëè CF=1 òî ïåðåéòè â êîíåö ò.å. ýòî âûõîä |
114 | mov esi,dword ch_text_length ;çàãðóçèòü êîë-âî ñèìâîëîâ â òåêñòîâîé ñòðîêå |
100 | mov esi,dword ch_text_length ;çàãðóçèòü êîë-âî ñèìâîëîâ â òåêñòîâîé ñòðîêå |
115 | ;Óìíîæåíèå íà 6 Áûñòðîå óìíîæåíèå ìîæíî âîñïîëüçîâàòüñÿ ëþáûì ìç ìåòîäîâ, íî íà ñòàðûõ Ïðîöåññîðàõ (386,486,P1)áûñòðåå áóäåò ñ èíñòðóêöèåé Lea |
101 | ;Óìíîæåíèå íà 6 Áûñòðîå óìíîæåíèå ìîæíî âîñïîëüçîâàòüñÿ ëþáûì ìç ìåòîäîâ, íî íà ñòàðûõ Ïðîöåññîðàõ (386,486,P1)áûñòðåå áóäåò ñ èíñòðóêöèåé Lea |
116 | lea esi,[eax*3] |
102 | lea esi,[eax*3] |
117 | shl esi,1 |
103 | shl esi,1 |
118 | ; imul esi,6 ; èëè ìîæíî è òàê óìíîæèòü íà 6 |
104 | ; imul esi,6 ; èëè ìîæíî è òàê óìíîæèòü íà 6 |
119 | add esi,dword ch_text_margin ;äîáàâèòü 3 - ðàññòîÿíèå îò ÷åê áîêñà äî íàäïèñè |
105 | add esi,dword ch_text_margin ;äîáàâèòü 3 - ðàññòîÿíèå îò ÷åê áîêñà äî íàäïèñè |
120 | 106 | ||
121 | mov eax,37 ;ïîëó÷èì êîîðäèíàòû ìûøêè |
107 | mov eax,37 ;ïîëó÷èì êîîðäèíàòû ìûøêè |
122 | mov ebx,1 ;äîáàâèòü 1 |
108 | mov ebx,1 ;äîáàâèòü 1 |
123 | mcall ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà |
109 | mcall ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà |
124 | 110 | ||
125 | movzx ebx,word ch_top ;çàãðóçèòü â bx çíà÷åíèå êîîðäèíàòû ó |
111 | movzx ebx,word ch_top ;çàãðóçèòü â bx çíà÷åíèå êîîðäèíàòû ó |
126 | cmp ax,bx ;ñðàâíèòü ñ ñ êîîðäèíàòîé êóðñîðà |
112 | cmp ax,bx ;ñðàâíèòü ñ ñ êîîðäèíàòîé êóðñîðà |
127 | jl check_box_mouse_end ;SF <> OF åñëè ìåíüøå |
113 | jl check_box_mouse_end ;SF <> OF åñëè ìåíüøå |
128 | add ebx,dword ch_size ;äîáàâèòü ðàçìåð |
114 | add ebx,dword ch_size ;äîáàâèòü ðàçìåð |
129 | cmp ax,bx ;ñðàâíèòü |
115 | cmp ax,bx ;ñðàâíèòü |
130 | jg check_box_mouse_end ;ZF = 0 è SF = OF åñëè áîëüøå |
116 | jg check_box_mouse_end ;ZF = 0 è SF = OF åñëè áîëüøå |
131 | 117 | ||
132 | shr eax,16 ;ðàçäåëèì íà 65536 èëè ïðîñòî ñäâèíåì áèòû íà 16 çíà÷åíèé |
118 | shr eax,16 ;ðàçäåëèì íà 65536 èëè ïðîñòî ñäâèíåì áèòû íà 16 çíà÷åíèé |
133 | movzx ebx,word ch_left ;ïðîèçâåäåì àíàëîãè÷íîå ñðàâíåíèå |
119 | movzx ebx,word ch_left ;ïðîèçâåäåì àíàëîãè÷íîå ñðàâíåíèå |
134 | cmp ax,bx ;ñðàâíèòü ðåãèñòðû |
120 | cmp ax,bx ;ñðàâíèòü ðåãèñòðû |
135 | jl check_box_mouse_end ;åñëè ìåíüøå |
121 | jl check_box_mouse_end ;åñëè ìåíüøå |
136 | add ebx,dword ch_size ;äîáàâèòü äëèíó ñòîðîíû ïðÿìîóãîëüíèêà |
122 | add ebx,dword ch_size ;äîáàâèòü äëèíó ñòîðîíû ïðÿìîóãîëüíèêà |
137 | add ebx,esi ;Ó÷åñòü â çíà÷åíèè ïî õ åùå è äëèíó íàäïèñè ê ÷åêáîêñó |
123 | add ebx,esi ;Ó÷åñòü â çíà÷åíèè ïî õ åùå è äëèíó íàäïèñè ê ÷åêáîêñó |
138 | cmp ax,bx ;ñòðàâíèòü ðåãèñòðû |
124 | cmp ax,bx ;ñòðàâíèòü ðåãèñòðû |
139 | jg check_box_mouse_end ;åñëè áîëüøå |
125 | jg check_box_mouse_end ;åñëè áîëüøå |
140 | 126 | ||
141 | bts dword ch_flags,1 ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà 1. |
127 | bts dword ch_flags,1 ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà 1. |
142 | jc @f ;CF=1 òî ïåðåéòè íà íèæíþþ @@ |
128 | jc @f ;CF=1 òî ïåðåéòè íà íèæíþþ @@ |
143 | 129 | ||
144 | call check_box_draw_ch ;îòîáðàçèòü âêëþ÷åííûé ÷åê áîêñ |
130 | call check_box_draw_ch ;îòîáðàçèòü âêëþ÷åííûé ÷åê áîêñ |
145 | ; mov dword [esp+24],1 ;äàëüíåéøàÿ ïðîâåðêà ÷åê áîêñîâ áåñìûñëåíà, ïî ýòîìó â ñòåê, ãäå ðàñïîëàãàåòñÿ ecx ïîìåñòèòì 0 |
131 | ; mov dword [esp+24],1 ;äàëüíåéøàÿ ïðîâåðêà ÷åê áîêñîâ áåñìûñëåíà, ïî ýòîìó â ñòåê, ãäå ðàñïîëàãàåòñÿ ecx ïîìåñòèòì 0 |
146 | jmp check_box_mouse_end ;âûéòè |
132 | jmp check_box_mouse_end ;âûéòè |
147 | @@: |
133 | @@: |
148 | btr word ch_flags,1 ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà íóëåâîå. |
134 | btr word ch_flags,1 ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà íóëåâîå. |
149 | call check_box_clear_ch ;âûêëþ÷èòü ÷åê áîêñ ò.å. íà ìåñòå çàêðàøåííîãî ïðÿìîóãîëüíèêà îòîáðàçèòü öâåò ôîíà. |
135 | call check_box_clear_ch ;âûêëþ÷èòü ÷åê áîêñ ò.å. íà ìåñòå çàêðàøåííîãî ïðÿìîóãîëüíèêà îòîáðàçèòü öâåò ôîíà. |
150 | check_box_mouse_end: |
136 | check_box_mouse_end: |
151 | popa ;âîññòàíîâèòü ðåãèñòðû èç ñòåêà |
137 | popa ;âîññòàíîâèòü ðåãèñòðû èç ñòåêà |
152 | ret 4 ;âûéòè |
138 | ret 4 ;âûéòè |
153 | }> |
139 | }> |