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