0,0 → 1,302 |
; |
; ¢ í⮬ ä ©«¥ ᮡà ë äãªæ¨¨ ã¦ë¥ ¤«ï ᮧ¤ ¨ï ¨ |
; à ¡®âë ®ª á ª®®à¤¨ â ¬¨ ¢¥àè¨ |
; |
|
wnd_prop_width equ 320 ;è¨à¨ ®ª ᮠ᢮©á⢠¬¨ ®¡ê¥ªâ |
wnd_prop_height equ 150 ;¢ëá®â ®ª ᮠ᢮©á⢠¬¨ ®¡ê¥ªâ |
|
align 4 |
wnd_run_prop db 0 ;¯¥à¥¬¥ ï á«¥¤ïé ï § ⥬ çâ®-¡ë ¥ § ¯ã᪠âì ¡®«ìè¥ 1-£® ®ª ᮠ᢮©á⢠¬¨ ®¤®¢à¥¬¥® |
txt_p db '.',0 |
|
align 4 |
wnd_pObj dd 0 ;obj |
wnd_pFig dd 0 ;䨣ãà |
wnd_FigN dd 0 ;fig number |
wnd_pPoi dd 0 ;select point |
wnd_PoiN dd 0 ;select point number |
|
|
;¤ ®¥ ®ª® (¯à®æ¥áá) ¢ë§ë¢ ¥âìáï äãªæ¨¥© but_wnd_coords |
align 4 |
start_prop: |
pushad |
mcall SF_SET_EVENTS_MASK,0x27 ;¬ ᪠®¦¨¤ ¥¬ëå ᮡë⨩ |
inc byte[wnd_run_prop] |
|
;¨¬ï ®¡ê¥ªâ |
stdcall mem_copy,capt_p,txt_obj,1+txt_obj.end-txt_obj |
mov edi,capt_p+txt_obj.end-txt_obj |
mov eax,[wnd_pObj] |
or eax,eax |
jz @f |
add eax,Object.Caption |
stdcall str_cat,edi,eax |
@@: |
stdcall str_cat,edi,txt_39 |
;¨¬ï 䨣ãàë |
mov edi,capt_fig.name |
mov byte[edi],0 ;clear pervios name |
mov eax,[wnd_pFig] |
or eax,eax |
jz @f |
add eax,Figure.Caption |
stdcall str_cat,edi,eax |
@@: |
stdcall str_cat,edi,txt_39 |
;®¬¥à â®çª¨ |
mov edi,capt_poi.numb |
mov byte[edi],0 |
mov eax,[wnd_PoiN] |
stdcall convert_int_to_str, 20 |
|
edit_boxes_set_sys_color edit1,editboxes_end,sc ;ãáâ ®¢ª á¨á⥬ëå 梥⮢ |
init_checkboxes2 check_boxes,check_boxes_end |
check_boxes_set_sys_color2 check_boxes,check_boxes_end,sc |
call get_point_coords |
popad |
call red_win_prop |
|
;¥ ®âàë¢ âì íâã äãªæ¨î ®â ¯à¥¤ë¤ã饩 |
align 4 |
still_prop: |
pushad |
|
mcall SF_WAIT_EVENT_TIMEOUT,10 |
or eax,eax |
jnz @f |
call timer_funct_prop |
jmp .end |
@@: |
|
cmp al,1 ;¨§¬. ¯®«®¦¥¨¥ ®ª |
jne @f |
call red_win_prop |
jmp .end |
@@: |
cmp al,2 |
jne @f |
call key_prop |
jmp .end |
@@: |
cmp al,3 |
jz button_prop |
cmp al,6 |
jne @f |
call mouse_prop |
@@: |
.end: |
popad |
jmp still_prop |
|
align 4 |
red_win_prop: |
pushad |
mcall SF_REDRAW,SSF_BEGIN_DRAW |
|
mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT |
mov edi,capt_p ;children window caption |
mov bx,word[procinfo.box.left] |
add bx,word[buf_0.l] |
add bx,5 ;è¨à¨ ¡®ª®¢®© à ¬ª¨ |
shl ebx,16 |
mov bx,wnd_prop_width |
mov cx,word[procinfo.box.top] |
add cx,ax ;add skin height |
add cx,word[buf_0.t] |
shl ecx,16 |
mov cx,wnd_prop_height |
mov edx,[sc.work] |
or edx,0x33000000 |
xor eax,eax |
int 0x40 |
|
mov esi,[sc.work_button] |
;ebx = (l<:)+w, ecx = (t<:)+h |
mcall SF_DEFINE_BUTTON, (5 shl 16)+59, (95 shl 16)+20, 3 |
mcall , (75 shl 16)+59, (95 shl 16)+20, 4 |
|
mov ecx,[sc.work_text] |
bts ecx,31 ;à¨á㥬 ï áâப § ª 稢 ¥âáï ã«ñ¬ |
mcall SF_DRAW_TEXT, (5 shl 16)+5,, capt_fig |
mcall , (5 shl 16)+15,, capt_poi |
|
mcall , (5 shl 16)+32,, capt_coord_x |
mcall , (5 shl 16)+50,, capt_coord_y |
|
mov ecx,[sc.work_button_text] |
bts ecx,31 |
mcall , (9 shl 16)+101,, txt_but_cancel |
mov edx,txt_but_apply |
cmp dword[wnd_pPoi],0 |
jne @f |
mov edx,txt_but_create |
@@: |
mcall ,(79 shl 16)+101 |
|
stdcall [edit_box_draw], edit1 |
stdcall [edit_box_draw], edit2 |
checkboxes_draw2 check_boxes,check_boxes_end |
|
mcall SF_REDRAW,SSF_END_DRAW |
popad |
ret |
|
align 4 |
proc key_prop uses eax ebx |
mcall SF_GET_KEY |
|
test word [edit1.flags],10b ;ed_focus |
je @f |
stdcall [edit_box_key], edit1 |
jmp .end |
@@: |
test word [edit2.flags],10b |
je @f |
stdcall [edit_box_key], edit2 |
;jmp .end |
@@: |
|
.end: |
ret |
endp |
|
align 4 |
mouse_prop: |
stdcall [edit_box_mouse], edit1 |
stdcall [edit_box_mouse], edit2 |
checkboxes_mouse2 check_boxes,check_boxes_end |
ret |
|
align 4 |
button_prop: |
mcall SF_GET_BUTTON |
|
cmp ah,3 |
je .exit |
cmp ah,4 |
jne .end_save |
push eax ebx ecx edi esi |
mov ebx,[wnd_pPoi] |
or ebx,ebx |
jnz .select_1 |
; *** create new point *** |
mov ebx,[wnd_pFig] |
mov eax,[ebx+Figure.PoiCount] |
inc eax |
imul eax,sizeof.Point |
stdcall mem.ReAlloc,[ebx+Figure.PoiData],eax |
mov [ebx+Figure.PoiData],eax |
inc dword[ebx+Figure.PoiCount] |
mov ebx,[ebx+Figure.PoiCount] |
dec ebx |
imul ebx,sizeof.Point |
add ebx,eax |
.select_1: |
finit |
|
mov esi,string1 |
mov edi,Data_String |
cld |
mov ecx,8 |
rep movsd |
call String_to_DoubleFloat |
fld qword[Data_Double] ;áç¨âë¢ ¥¬ ª ª double |
fstp qword[ebx+Point.CoordX] ;á®åà 塞 ª ª double |
|
mov esi,string2 |
mov edi,Data_String |
cld |
mov ecx,8 |
rep movsd |
call String_to_DoubleFloat |
fld qword[Data_Double] |
fstp qword[ebx+Point.CoordY] |
|
stdcall figure_update_coords,[wnd_pObj],[wnd_FigN] |
;¢ëáâ ¢«ï¥¬ ᢮©á⢠|
and dword[ebx+Point.Prop], not 7 ;7 = 2^PROP_BIT_START +2^PROP_BIT_LINE +2^PROP_BIT_LINE_CLOSE) |
mov dword[offs_last_timer],0 ;¤«ï ®¡®¢«¥¨ï ¡«®ª ¢ â ©¬¥à¥ |
pop esi edi ecx ebx eax |
jmp .exit |
.end_save: |
|
cmp ah,1 |
jne still_prop.end |
.exit: |
mov byte[wnd_run_prop],0 ;®¡ã«ï¥¬ áç¥â稪 ®ª® |
mcall SF_TERMINATE_PROCESS ;¢ë室 ¨§ ¯à®£à ¬¬ë |
|
align 4 |
proc get_point_coords uses eax ebx |
;§ £à㧪 ª®®à¤¨ â ¢ editbox-ë |
mov ebx,[wnd_pPoi] |
btr dword[ch1.flags],1 |
btr dword[ch2.flags],1 |
btr dword[ch3.flags],1 |
or ebx,ebx |
jz .end0 |
mov word[NumberSymbolsAD],8 |
finit |
fld qword[ebx+Point.CoordX] |
fstp qword[Data_Double] |
call DoubleFloat_to_String |
call String_crop_0 |
stdcall [edit_box_set_text], edit1, Data_String |
fld qword[ebx+Point.CoordY] |
fstp qword[Data_Double] |
call DoubleFloat_to_String |
call String_crop_0 |
stdcall [edit_box_set_text], edit2, Data_String |
; |
jmp .end1 |
.end0: |
stdcall [edit_box_set_text], edit1, txt_p |
stdcall [edit_box_set_text], edit2, txt_p |
.end1: |
;stdcall [edit_box_draw], edit1 |
;stdcall [edit_box_draw], edit2 |
ret |
endp |
|
align 4 |
proc timer_funct_prop |
;¯à®á¬ âਢ ¥¬ ¢ë¤¥«¥ãî ª®®à¤¨ âã |
ret |
endp |
|
align 4 |
capt_p rb 64 |
if lang eq ru |
capt_fig: db '®¬ ¤ : ',39 |
.name: rb 55 |
capt_poi: db '®çª : ' |
.numb: rb 25 |
else |
capt_fig: db 'Command: ',39 |
.name: rb 55 |
capt_poi: db 'Point: ' |
.numb: rb 25 |
end if |
|
capt_coord_x db 'X:',0 |
capt_coord_y db 'Y:',0 |
|
edit1 edit_box 80, 18, 28, 0xffd0d0, 0xff, 0x80ff, 0, 0x8000, 34, string1, mouse_dd, 0 |
edit2 edit_box 80, 18, 46, 0xd0d0ff, 0xff, 0x80ff, 0, 0x8000, 34, string2, mouse_dd, 0 |
editboxes_end: |
|
string1 rb 34 |
string2 rb 34 |
|
check_boxes: |
ch1 check_box2 (115 shl 16+15),(28 shl 16 +11),5,0xffffff,0,0x80000000,ch_text.1,ch_flag_en+ch_flag_middle |
ch2 check_box2 (115 shl 16+15),(43 shl 16 +11),5,0xffffff,0,0x80000000,ch_text.2,ch_flag_en+ch_flag_middle |
ch3 check_box2 (115 shl 16+15),(58 shl 16 +11),5,0xffffff,0,0x80000000,ch_text.3,ch_flag_en+ch_flag_middle |
check_boxes_end: |
|
ch_text: |
.1 db 'X',0 |
.2 db 'Y',0 |
.3 db 'Z',0 |