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