diff --git a/programs/develop/examples/editbox/trunk/EDITBOX.INC b/programs/develop/examples/editbox/trunk/EDITBOX.INC index 40501693db..5e1acc6b5c 100644 --- a/programs/develop/examples/editbox/trunk/EDITBOX.INC +++ b/programs/develop/examples/editbox/trunk/EDITBOX.INC @@ -84,6 +84,8 @@ pusha call .check_offset ;вычисление позиции курсора стабильна ;--- рисуем внутреннюю область --- call .draw_bg ;нарисовать прямоугольник рабочей области +;---- рисуем выделение, по shift если есть + call .draw_shift .draw_cursor_text: ;--- рисуем курсор --- ;--- может его не надо рисовать ---- @@ -94,6 +96,18 @@ pusha call .draw_text popa ret +;---------------------------------------------------------- +;--- процедура прорисовки выделеной части ----------------- +;---------------------------------------------------------- +.draw_shift: + test word ed_flags,ed_shift_bac ;установка флага, выделенной области + jz @f + mov ebp,shift_color + mov ebx,dword ed_shift_pos + call .sh_cl_ +@@: ret + + ;---------------------------------------------------------- ;--- процедура прорисовки текста -------------------------- ;---------------------------------------------------------- @@ -107,7 +121,7 @@ ret cmp eax,esi jae @F mov esi,eax ;чтобы не выходить за пределы экрана -;--- рисуем текст --- +;--- рисуем текст --- @@: mov eax,4 mov ebx,ed_left mov edx,ed_offset @@ -549,7 +563,6 @@ popa ;для обработки снятия выделения ;входные параметры ebp=color ebx=ed_shift_pos mov eax,dword ed_pos -; mov ebx,dword ed_shift_pos cmp eax,ebx jae .sh_n push eax ;меньшее в eax @@ -640,7 +653,6 @@ popa mov eax,dword ed_pos test word ed_flags,ed_left_fl jz .low - ;dec eax @@: call .draw_rectangle ;нарисовать прямоугольник закрашиваемой области ret .low: dec eax @@ -696,7 +708,7 @@ popa .sh_ext_en: call .check_offset test word ed_flags,ed_offset_fl - jne @f + je @f ;Рисование закрашеных прямоугольников и очистка их mov eax,dword ed_shift_pos mov ebx,dword ed_pos @@ -733,7 +745,7 @@ popa call .sh_cl_ @@: test word ed_flags,ed_shift - je .sh_exit_ ;нарисовать закрашеный прямоугольник (область) + je .sh_exit_ ;выйти mov ebp,shift_color mov ebx,dword ed_shift_pos call .sh_cl_ @@ -824,7 +836,6 @@ popa pop eax ;ed_pos mov ecx,ed_offset sub eax,ecx - .nxt: mov ebp,eax ;проверка на выход закрашиваемой области за пределы длины add ebp,ebx @@ -926,8 +937,31 @@ pusha jna @f mov ax,ed_size @@: - mov ed_pos,ax - call .check_offset + test word ed_flags,ed_shift_bac + je @f + mov ebp,dword ed_color + mov ebx,dword ed_shift_pos + push eax + call .sh_cl_ + and word ed_flags,ed_shift_cl + pop eax + +@@: + test word ed_flags,ed_shift + je @f + mov ebx,ed_pos + mov ed_shift_pos,ebx + + mov ed_pos,eax + mov ebp,dword shift_color + + call .sh_cl_ + or word ed_flags,ed_shift_bac ;установим бит что мы выделили + and word ed_flags,ed_shift_off + jmp .m_sh +@@: + mov ed_pos,ax +.m_sh: call .draw_text call .draw_cursor ;---------------------------------------------------------- ;--- процедура установки фокуса --------------------------- @@ -941,6 +975,7 @@ pusha jne @f btr word ed_flags,1 ; если не в фокусе, выходим jnc @f + mov ebp,ed_color call .clear_cursor .drc: call .draw_border @@ -1032,6 +1067,28 @@ struc edit_box width,left,top,color,focus_border_color,\ .shift_old dd 0 } +struc edit_box1 width,left,top,color,focus_border_color,\ + blur_border_color,text_color,max,text,flags,ed_size +{ +.width dd width +.left dd left +.top dd top +.color dd color +.focus_border_color dd focus_border_color +.blur_border_color dd blur_border_color +.text_color dd text_color +.max dd max +.text dd text +.flags dw flags+0 +.size dd ed_size +.pos dd 0 +.offset dd 0 +.cl_curs_x dd 0 +.cl_curs_y dd 0 +.shift dd 0 +.shift_old dd 0 +} + macro edit_boxes_set_sys_color start,end,color_table { mov edi,start diff --git a/programs/develop/examples/editbox/trunk/editbox.asm b/programs/develop/examples/editbox/trunk/editbox.asm index 655a8998b2..8c0fec0e9b 100644 --- a/programs/develop/examples/editbox/trunk/editbox.asm +++ b/programs/develop/examples/editbox/trunk/editbox.asm @@ -82,7 +82,7 @@ draw_window: ; ;DATA данные editboxes: edit1 edit_box 168,5,10,0xffffff,0,0,0,99,ed_buffer.2,ed_figure_only -edit2 edit_box 168,5,30,0xffffff,0,0,0,512,ed_buffer.1,ed_focus +edit2 edit_box1 250,5,30,0xffffff,0,0,0,308,hed,ed_focus,53 edit3 edit_box 35,5,50,0xffffff,0,0,0,9,ed_buffer.3,ed_figure_only edit4 edit_box 16,5,70,0xffffff,0,0,0,1,ed_buffer.4,ed_figure_only editboxes_end: @@ -97,6 +97,7 @@ ed_buffer: ;buffer: dd 0 buffer_end: hed db 'EDITBOX optimization and retype date 07.03.2007',0 +rb 256 i_end1: rb 1024 i_end: \ No newline at end of file