eb_control_data_size = 82 ;**************************************************** ;******************craete EditBox********************* ;**************************************************** ;IN ;pointer to parend ;pointer to EditBox's structure ;OUT ;pointer to initialized control align 4 craete_edit_box: push ebx push ecx push edx push esi push edi push ebp mov ebx,[esp+24+4] mov eax,[esp+24+8] mov [PointerToStructureForEditBox],eax mov eax,control_header_size+eb_control_data_size call craete_control ;set all EditBox's parameters in control mov [eax],dword edit_box mov ecx,eb_control_data_size mov esi,[PointerToStructureForEditBox] mov edi,eax add edi,control_header_size rep movsb call get_skin_height mov ebx,[PointerToStructureForEditBox] mov ecx,[ebx+4] ;x mov edx,[ebx+8] ;y mov esi,[ebx] ;size x mov edi,[ebx+70] ;size y add ecx,border_width add edx,[skin_height] ;copy information to control mov [eax+24],ecx mov [eax+28],edx mov [eax+32],esi mov [eax+36],edi pop ebp pop edi pop esi pop edx pop ecx pop ebx ret 8 ;**************************************************** ;******************Draw EditBox********************** ;**************************************************** ;include 'editbox_mac.inc' ;IN ;pointer to control of EditBox ;message ;OUT ;not returned value align 4 include 'editbox_mac.inc' edit_box: ;;;;;;;;;;;; ;Structure from libGui асоциация структур ;;;;;;;;;;;; ;get message mov eax,[esp+8] ;get pointer to control of button mov esi,[esp+4] mov [PointerForEditBox],esi ;copy control to local control add esi,control_header_size mov edi,dword EditBox mov ecx,eb_control_data_size rep movsb ;;;;;;;;;;;; ;Structure from libGui асоциация структур ;;;;;;;;;;;; srt_ed_libgui push eax ;load coordinats and size from control mov eax,[PointerForEditBox] mov ebx,[eax+24] ;x mov ecx,[eax+28] ;y mov edx,[eax+32] ;size x mov esi,[eax+36] ;size y ;set current coordinats and sizes in EeditBox mov [EditBox.ed_left],ebx mov [EditBox.ed_top],ecx mov [EditBox.ed_width],edx mov [EditBox.ed_height],esi pop eax ;events of redraw all EditBox cmp [eax],dword 1 jne .no_redraw_all_edit_box call .draw_border .draw_bg_cursor_text: call .check_offset call .draw_bg call .draw_shift .draw_cursor_text: test word[EditBox.ed_flags],ed_focus je @f call .draw_cursor @@: call .draw_text jmp .editbox_exit;exit_edit_box .no_redraw_all_edit_box: ;events of keys for EditBox cmp [eax],dword 2 jne .no_keys_edit_box mov ebx,[eax+4] shl ebx,8 mov eax,ebx test word [EditBox.ed_flags],ed_focus je .editbox_exit;exit_edit_box;@b call .check_shift ;---------------------------------------------------------- ;--- проверяем, что нажато -------------------------------- ;---------------------------------------------------------- use_key_process backspase,delete,left,right,home,end,insert ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Заглушка на обработку клавиш вверх и вниз т.е. при ;обнаружении этих кодов происходит выход из обработчика ;;;;;;;;;;;;;;;;;;;;;;;;;;;; srt_ed_libgui use_key_no_process up,down,esc ;--- нажата другая клавиша --- ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Проверка установлен ли флаг при котором нужно выводить ;только цифры в нужном боксе если такой необходимости нет ;нужно закоментировать макрос ;;;;;;;;;;;;;;;;;;;;;;;;;;;; use_key_figures_only ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;проверка на shift был ли нажат ;;;;;;;;;;;;;;;;;;;;;;;;;;;; are_key_shift_press ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; проверяем, находится ли курсор в конце + дальнейшая обработка ;;;;;;;;;;;;;;;;;;;;;;;;;;;; are_key_cur_end ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Обработка клавиш insert,delete.backspase,home,end,left,right ;;;;;;;;;;;;;;;;;;;;;;;;;;;; use_work_key .no_keys_edit_box: cmp [eax],dword 3 je exit_edit_box ;events of mouse for EditBox cmp [eax],dword 6 jne .editbox_exit mov esi,[eax+4] mov edi,[eax+8] mov ecx,[eax+12] mov [EditBox.mouseX],esi mov [EditBox.mouseY],edi mov [ButtonsOfMouse],ecx mov eax,ecx test eax,1 jnz .mouse_left_button and word [EditBox.ed_flags],ed_mouse_on_off jmp .editbox_exit .mouse_left_button: mov eax,[EditBox.mouseX] shl eax,16 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Функция обработки мышки получение координат и проверка их + выделения ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; use_work_mouse ;scr_h,scr_w ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Общие функции обработки ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; use_general_func ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Функции для работы с key ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; use_key_func ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Функции для работы с mouse ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; use_mouse_func ;scr_w ;;;;;;;;;;;;;;;;;;;;;;;;;; ;Общий выход из editbox для всех функций и пост обработчиков ;;;;;;;;;;;;;;;;;;;;;;;;;; .editbox_exit: exit_edit_box: ;save resulatat of work in control mov esi,dword EditBox mov edi,[PointerForEditBox] add edi,control_header_size mov ecx,eb_control_data_size rep movsb ret 8