Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
7360 | IgorA | 1 | ; |
2 | ; в этом файле собраны функции нужные для создания и |
||
3 | ; работы окна с координатами вершин |
||
4 | ; |
||
5 | |||
6 | wnd_prop_width equ 320 ;ширина окна со свойствами объекта |
||
7 | wnd_prop_height equ 150 ;высота окна со свойствами объекта |
||
8 | |||
9 | align 4 |
||
10 | wnd_run_prop db 0 ;переменная следящая за тем что-бы не запускать больше 1-го окна со свойствами одновременно |
||
11 | txt_p db '.',0 |
||
12 | |||
13 | align 4 |
||
14 | wnd_pObj dd 0 ;obj |
||
15 | wnd_pFig dd 0 ;фигура |
||
16 | wnd_FigN dd 0 ;fig number |
||
17 | wnd_pPoi dd 0 ;select point |
||
18 | wnd_PoiN dd 0 ;select point number |
||
19 | |||
20 | |||
21 | ;даное окно (процесс) вызываеться функцией but_wnd_coords |
||
22 | align 4 |
||
23 | start_prop: |
||
24 | pushad |
||
25 | mcall SF_SET_EVENTS_MASK,0x27 ;маска ожидаемых событий |
||
26 | inc byte[wnd_run_prop] |
||
27 | |||
28 | ;имя объекта |
||
29 | stdcall mem_copy,capt_p,txt_obj,1+txt_obj.end-txt_obj |
||
30 | mov edi,capt_p+txt_obj.end-txt_obj |
||
31 | mov eax,[wnd_pObj] |
||
32 | or eax,eax |
||
33 | jz @f |
||
34 | add eax,Object.Caption |
||
35 | stdcall str_cat,edi,eax |
||
36 | @@: |
||
37 | stdcall str_cat,edi,txt_39 |
||
38 | ;имя фигуры |
||
39 | mov edi,capt_fig.name |
||
40 | mov byte[edi],0 ;clear pervios name |
||
41 | mov eax,[wnd_pFig] |
||
42 | or eax,eax |
||
43 | jz @f |
||
44 | add eax,Figure.Caption |
||
45 | stdcall str_cat,edi,eax |
||
46 | @@: |
||
47 | stdcall str_cat,edi,txt_39 |
||
48 | ;номер точки |
||
49 | mov edi,capt_poi.numb |
||
50 | mov byte[edi],0 |
||
51 | mov eax,[wnd_PoiN] |
||
52 | stdcall convert_int_to_str, 20 |
||
53 | |||
54 | edit_boxes_set_sys_color edit1,editboxes_end,sc ;установка системных цветов |
||
55 | init_checkboxes2 check_boxes,check_boxes_end |
||
56 | check_boxes_set_sys_color2 check_boxes,check_boxes_end,sc |
||
57 | call get_point_coords |
||
58 | popad |
||
59 | call red_win_prop |
||
60 | |||
61 | ;не отрывать эту функцию от предыдущей |
||
62 | align 4 |
||
63 | still_prop: |
||
64 | pushad |
||
65 | |||
66 | mcall SF_WAIT_EVENT_TIMEOUT,10 |
||
67 | or eax,eax |
||
68 | jnz @f |
||
69 | call timer_funct_prop |
||
70 | jmp .end |
||
71 | @@: |
||
72 | |||
73 | cmp al,1 ;изм. положение окна |
||
74 | jne @f |
||
75 | call red_win_prop |
||
76 | jmp .end |
||
77 | @@: |
||
78 | cmp al,2 |
||
79 | jne @f |
||
80 | call key_prop |
||
81 | jmp .end |
||
82 | @@: |
||
83 | cmp al,3 |
||
84 | jz button_prop |
||
85 | cmp al,6 |
||
86 | jne @f |
||
87 | call mouse_prop |
||
88 | @@: |
||
89 | .end: |
||
90 | popad |
||
91 | jmp still_prop |
||
92 | |||
93 | align 4 |
||
94 | red_win_prop: |
||
95 | pushad |
||
96 | mcall SF_REDRAW,SSF_BEGIN_DRAW |
||
97 | |||
98 | mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT |
||
99 | mov edi,capt_p ;children window caption |
||
100 | mov bx,word[procinfo.box.left] |
||
101 | add bx,word[buf_0.l] |
||
102 | add bx,5 ;ширина боковой рамки |
||
103 | shl ebx,16 |
||
104 | mov bx,wnd_prop_width |
||
105 | mov cx,word[procinfo.box.top] |
||
106 | add cx,ax ;add skin height |
||
107 | add cx,word[buf_0.t] |
||
108 | shl ecx,16 |
||
109 | mov cx,wnd_prop_height |
||
110 | mov edx,[sc.work] |
||
111 | or edx,0x33000000 |
||
112 | xor eax,eax |
||
113 | int 0x40 |
||
114 | |||
115 | mov esi,[sc.work_button] |
||
116 | ;ebx = (l<:)+w, ecx = (t<:)+h |
||
117 | mcall SF_DEFINE_BUTTON, (5 shl 16)+59, (95 shl 16)+20, 3 |
||
118 | mcall , (75 shl 16)+59, (95 shl 16)+20, 4 |
||
119 | |||
120 | mov ecx,[sc.work_text] |
||
121 | bts ecx,31 ;рисуемая строка заканчивается нулём |
||
122 | mcall SF_DRAW_TEXT, (5 shl 16)+5,, capt_fig |
||
123 | mcall , (5 shl 16)+15,, capt_poi |
||
124 | |||
125 | mcall , (5 shl 16)+32,, capt_coord_x |
||
126 | mcall , (5 shl 16)+50,, capt_coord_y |
||
127 | |||
128 | mov ecx,[sc.work_button_text] |
||
129 | bts ecx,31 |
||
130 | mcall , (9 shl 16)+101,, txt_but_cancel |
||
131 | mov edx,txt_but_apply |
||
132 | cmp dword[wnd_pPoi],0 |
||
133 | jne @f |
||
134 | mov edx,txt_but_create |
||
135 | @@: |
||
136 | mcall ,(79 shl 16)+101 |
||
137 | |||
138 | stdcall [edit_box_draw], edit1 |
||
139 | stdcall [edit_box_draw], edit2 |
||
140 | checkboxes_draw2 check_boxes,check_boxes_end |
||
141 | |||
142 | mcall SF_REDRAW,SSF_END_DRAW |
||
143 | popad |
||
144 | ret |
||
145 | |||
146 | align 4 |
||
147 | proc key_prop uses eax ebx |
||
148 | mcall SF_GET_KEY |
||
149 | |||
150 | test word [edit1.flags],10b ;ed_focus |
||
151 | je @f |
||
152 | stdcall [edit_box_key], edit1 |
||
153 | jmp .end |
||
154 | @@: |
||
155 | test word [edit2.flags],10b |
||
156 | je @f |
||
157 | stdcall [edit_box_key], edit2 |
||
158 | ;jmp .end |
||
159 | @@: |
||
160 | |||
161 | .end: |
||
162 | ret |
||
163 | endp |
||
164 | |||
165 | align 4 |
||
166 | mouse_prop: |
||
167 | stdcall [edit_box_mouse], edit1 |
||
168 | stdcall [edit_box_mouse], edit2 |
||
169 | checkboxes_mouse2 check_boxes,check_boxes_end |
||
170 | ret |
||
171 | |||
172 | align 4 |
||
173 | button_prop: |
||
174 | mcall SF_GET_BUTTON |
||
175 | |||
176 | cmp ah,3 |
||
177 | je .exit |
||
178 | cmp ah,4 |
||
179 | jne .end_save |
||
180 | push eax ebx ecx edi esi |
||
181 | mov ebx,[wnd_pPoi] |
||
182 | or ebx,ebx |
||
183 | jnz .select_1 |
||
184 | ; *** create new point *** |
||
185 | mov ebx,[wnd_pFig] |
||
186 | mov eax,[ebx+Figure.PoiCount] |
||
187 | inc eax |
||
188 | imul eax,sizeof.Point |
||
189 | stdcall mem.ReAlloc,[ebx+Figure.PoiData],eax |
||
190 | mov [ebx+Figure.PoiData],eax |
||
191 | inc dword[ebx+Figure.PoiCount] |
||
192 | mov ebx,[ebx+Figure.PoiCount] |
||
193 | dec ebx |
||
194 | imul ebx,sizeof.Point |
||
195 | add ebx,eax |
||
196 | .select_1: |
||
197 | finit |
||
198 | |||
199 | mov esi,string1 |
||
200 | mov edi,Data_String |
||
201 | cld |
||
202 | mov ecx,8 |
||
203 | rep movsd |
||
204 | call String_to_DoubleFloat |
||
205 | fld qword[Data_Double] ;считываем как double |
||
206 | fstp qword[ebx+Point.CoordX] ;сохраняем как double |
||
207 | |||
208 | mov esi,string2 |
||
209 | mov edi,Data_String |
||
210 | cld |
||
211 | mov ecx,8 |
||
212 | rep movsd |
||
213 | call String_to_DoubleFloat |
||
214 | fld qword[Data_Double] |
||
215 | fstp qword[ebx+Point.CoordY] |
||
216 | |||
217 | stdcall figure_update_coords,[wnd_pObj],[wnd_FigN] |
||
218 | ;выставляем свойства |
||
219 | and dword[ebx+Point.Prop], not 7 ;7 = 2^PROP_BIT_START +2^PROP_BIT_LINE +2^PROP_BIT_LINE_CLOSE) |
||
220 | mov dword[offs_last_timer],0 ;для обновления блока в таймере |
||
221 | pop esi edi ecx ebx eax |
||
222 | jmp .exit |
||
223 | .end_save: |
||
224 | |||
225 | cmp ah,1 |
||
226 | jne still_prop.end |
||
227 | .exit: |
||
228 | mov byte[wnd_run_prop],0 ;обнуляем счетчик окон |
||
229 | mcall SF_TERMINATE_PROCESS ;выход из программы |
||
230 | |||
231 | align 4 |
||
232 | proc get_point_coords uses eax ebx |
||
233 | ;загрузка координат в editbox-ы |
||
234 | mov ebx,[wnd_pPoi] |
||
235 | btr dword[ch1.flags],1 |
||
236 | btr dword[ch2.flags],1 |
||
237 | btr dword[ch3.flags],1 |
||
238 | or ebx,ebx |
||
239 | jz .end0 |
||
240 | mov word[NumberSymbolsAD],8 |
||
241 | finit |
||
242 | fld qword[ebx+Point.CoordX] |
||
243 | fstp qword[Data_Double] |
||
244 | call DoubleFloat_to_String |
||
245 | call String_crop_0 |
||
246 | stdcall [edit_box_set_text], edit1, Data_String |
||
247 | fld qword[ebx+Point.CoordY] |
||
248 | fstp qword[Data_Double] |
||
249 | call DoubleFloat_to_String |
||
250 | call String_crop_0 |
||
251 | stdcall [edit_box_set_text], edit2, Data_String |
||
252 | ; |
||
253 | jmp .end1 |
||
254 | .end0: |
||
255 | stdcall [edit_box_set_text], edit1, txt_p |
||
256 | stdcall [edit_box_set_text], edit2, txt_p |
||
257 | .end1: |
||
258 | ;stdcall [edit_box_draw], edit1 |
||
259 | ;stdcall [edit_box_draw], edit2 |
||
260 | ret |
||
261 | endp |
||
262 | |||
263 | align 4 |
||
264 | proc timer_funct_prop |
||
265 | ;просматриваем выделенную координату |
||
266 | ret |
||
267 | endp |
||
268 | |||
269 | align 4 |
||
270 | capt_p rb 64 |
||
271 | if lang eq ru |
||
272 | capt_fig: db 'Команда: ',39 |
||
273 | .name: rb 55 |
||
274 | capt_poi: db 'Точка: ' |
||
275 | .numb: rb 25 |
||
276 | else |
||
277 | capt_fig: db 'Command: ',39 |
||
278 | .name: rb 55 |
||
279 | capt_poi: db 'Point: ' |
||
280 | .numb: rb 25 |
||
281 | end if |
||
282 | |||
283 | capt_coord_x db 'X:',0 |
||
284 | capt_coord_y db 'Y:',0 |
||
285 | |||
286 | edit1 edit_box 80, 18, 28, 0xffd0d0, 0xff, 0x80ff, 0, 0x8000, 34, string1, mouse_dd, 0 |
||
287 | edit2 edit_box 80, 18, 46, 0xd0d0ff, 0xff, 0x80ff, 0, 0x8000, 34, string2, mouse_dd, 0 |
||
288 | editboxes_end: |
||
289 | |||
290 | string1 rb 34 |
||
291 | string2 rb 34 |
||
292 | |||
293 | check_boxes: |
||
294 | ch1 check_box2 (115 shl 16+15),(28 shl 16 +11),5,0xffffff,0,0x80000000,ch_text.1,ch_flag_en+ch_flag_middle |
||
295 | ch2 check_box2 (115 shl 16+15),(43 shl 16 +11),5,0xffffff,0,0x80000000,ch_text.2,ch_flag_en+ch_flag_middle |
||
296 | ch3 check_box2 (115 shl 16+15),(58 shl 16 +11),5,0xffffff,0,0x80000000,ch_text.3,ch_flag_en+ch_flag_middle |
||
297 | check_boxes_end: |
||
298 | |||
299 | ch_text: |
||
300 | .1 db 'X',0 |
||
301 | .2 db 'Y',0 |
||
302 | .3 db 'Z',0 |