diff --git a/programs/develop/box_lib/C--/trunk/EditBox2.c-- b/programs/develop/box_lib/C--/trunk/EditBox2.c-- index 06737f78cd..3bcff001d0 100644 --- a/programs/develop/box_lib/C--/trunk/EditBox2.c-- +++ b/programs/develop/box_lib/C--/trunk/EditBox2.c-- @@ -3,7 +3,7 @@ #pragma option A #codesize -#include "..\..\lib\kolibri.h--" +#include "..\lib\kolibri.h--" #include "use_library.h--" ////////////////////////////////////////////////////////////////// //Bit mask from editbox @@ -62,7 +62,7 @@ byte id; } - edit_box_mouse stdcall (dword 0,0,#edit1); + edit_box_mouse stdcall (#edit1); } diff --git a/programs/develop/box_lib/C--/trunk/EditBox2.kex b/programs/develop/box_lib/C--/trunk/EditBox2.kex index 325723b06c..ab0b9da98e 100644 Binary files a/programs/develop/box_lib/C--/trunk/EditBox2.kex and b/programs/develop/box_lib/C--/trunk/EditBox2.kex differ diff --git a/programs/develop/box_lib/trunk/box_lib.asm b/programs/develop/box_lib/trunk/box_lib.asm index 278f9b96a7..fa0fa4e9c3 100644 --- a/programs/develop/box_lib/trunk/box_lib.asm +++ b/programs/develop/box_lib/trunk/box_lib.asm @@ -30,12 +30,7 @@ cl_curs_y equ [edi+60] ; ed_shift_pos equ [edi+64] ;положение курсора ed_shift_pos_old equ [edi+68] ;старое положение курсора .draw: - pusha - mov eax,9 - push procinfo - pop ebx - or ecx,-1 - mcall + pushad ;--- рисуем рамку --- mov edi,dword [esp+36] call .draw_border ; Функция стабильна @@ -59,14 +54,14 @@ ed_shift_pos_old equ [edi+68] ; ;Общий выход из editbox для всех функций и пост обработчиков ;;;;;;;;;;;;;;;;;;;;;;;;;; .editbox_exit: - popa + popad ret 4 ;========================================================== ;=== обработка клавиатуры ================================= ;========================================================== edit_box_key: -pusha +pushad mov edi,dword [esp+36] test word ed_flags,ed_focus ; если не в фокусе, выходим je edit_box.editbox_exit @@ -106,18 +101,7 @@ use_work_key ;========================================================== ;save for stdcall ebx,esi,edi,ebp edit_box_mouse: - pop eax ;opint to back - pop edx ;scr_w - pop ecx ;ebp ;scr_h - push eax - -; pop eax -; pop edx ;scr_w -; pop ecx ;scr_h -; push eax ;pointer to back -pusha - mov ebp,ecx - +pushad mov edi,dword [esp+36] ;debug ;---------------------------------------------------------- @@ -146,7 +130,7 @@ pusha ;---------------------------------------------------------- ;--- получаем координаты мыши относительно 0 т.е всей области экрана ;---------------------------------------------------------- -@@: mcall 37,0 +@@: mcall 37,1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Функция обработки мышки получение координат и проверка их + выделения ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -162,7 +146,7 @@ use_key_func ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Функции для работы с mouse ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -use_mouse_func ;scr_w +use_mouse_func ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Bit mask from editbox ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -548,4 +532,3 @@ szVersion_op db 'version_op',0 ;;;;;;;;;;; align 16 mouse_flag dd 0x0 -procinfo process_information \ No newline at end of file diff --git a/programs/develop/box_lib/trunk/box_lib.obj b/programs/develop/box_lib/trunk/box_lib.obj index f7b1b343dd..813ef883c1 100644 Binary files a/programs/develop/box_lib/trunk/box_lib.obj and b/programs/develop/box_lib/trunk/box_lib.obj differ diff --git a/programs/develop/box_lib/trunk/editbox.mac b/programs/develop/box_lib/trunk/editbox.mac index 94171cda34..aa0d068631 100644 --- a/programs/develop/box_lib/trunk/editbox.mac +++ b/programs/develop/box_lib/trunk/editbox.mac @@ -154,7 +154,7 @@ ret ; в общей битовой маррице состояния компонентов word ed_flags ;---------------------------------------------------------- edit_box.check_offset: -pusha +pushad mov ecx,ed_pos mov ebx,ed_offset cmp ebx,ecx @@ -830,11 +830,10 @@ edit_box_mouse.mouse_wigwag: ;;;;;;;;;;;;;;;;;; ;;процедура обработки положения выделенного текста, когда происходит выход за пределы editbox ;;;;;;;;;;;;;;;;;; - mov ebx,[procinfo.box.left] - add ebx,ed_left - - add ebx,dword [esp+20];scr_w + test ax,0x8000 + jnz edit_box_mouse.mleft + mov ebx,ed_left cmp eax,ebx jb edit_box_mouse.mleft @@ -920,8 +919,6 @@ edit_box_mouse.mright: } macro use_work_mouse -; pop edx ;scr_h -; pop ebp ;scr_w ;---------------------------------------------------------- ;--- А не удерживаем ли мы клавишу мышки, перемещая курсор, во все разные стороны? ;---------------------------------------------------------- @@ -931,48 +928,41 @@ macro use_work_mouse ;---------------------------------------------------------- ;--- проверяем, попадает ли курсор в edit box ------------- ;---------------------------------------------------------- - mov ebx,[procinfo.box.top] - add ebx,ed_top - add ebx,dword [esp+24] ;ecx scr_h + mov ebx,ed_top cmp ax,bx jl edit_box_mouse._blur;.mouse_end_no_focus - + add ebx,ed_height cmp ax,bx jg edit_box_mouse._blur;.mouse_end_no_focus shr eax,16 - mov ebx,[procinfo.box.left] - add ebx,ed_left - add ebx,dword [esp+20] ;edx scr_w - + mov ebx,ed_left cmp ax,bx jl edit_box_mouse._blur;.mouse_end_no_focus add ebx,ed_width + cmp ax,bx - jg edit_box_mouse._blur;.mouse_end_no_focus + jg edit_box_mouse._blur;.mouse_end_no_focus + ;--- изменяем позицию курсора --- push eax mov ebp,ed_color call edit_box.clear_cursor pop eax edit_box_mouse._mvpos: - mov ebx,dword [procinfo.box.left] xor edx,edx sub eax,ed_left - sub eax,ebx -; - add ebx,dword [esp+20] ; scr_w - sub eax,2 -; + mov ebx,6 div bx add eax,ed_offset cmp eax,ed_size jna edit_box_mouse._mshift mov eax,ed_size + edit_box_mouse._mshift: ;;;;;;; ;;Секция обработки shift и выделения по shift @@ -1025,7 +1015,7 @@ edit_box_mouse.drc: call edit_box.draw_border ; Макрос выхода macro edit_ex { -popa +popad ret } macro debug diff --git a/programs/develop/box_lib/trunk/editbox_ex.asm b/programs/develop/box_lib/trunk/editbox_ex.asm index 53e2145d4f..13ffc4394a 100644 --- a/programs/develop/box_lib/trunk/editbox_ex.asm +++ b/programs/develop/box_lib/trunk/editbox_ex.asm @@ -111,13 +111,9 @@ still: ; jz button push dword edit1 - push 22 - push 5 call [edit_box_mouse] push dword edit2 - push 22 - push 5 call [edit_box_mouse] push dword check1 diff --git a/programs/develop/box_lib/trunk/editbox_ex.kex b/programs/develop/box_lib/trunk/editbox_ex.kex index 1fa2f6afed..4aa38c87be 100644 Binary files a/programs/develop/box_lib/trunk/editbox_ex.kex and b/programs/develop/box_lib/trunk/editbox_ex.kex differ diff --git a/programs/develop/box_lib/trunk/run.bat b/programs/develop/box_lib/trunk/run.bat index 6340cc7cb6..d4c84e2bf4 100644 --- a/programs/develop/box_lib/trunk/run.bat +++ b/programs/develop/box_lib/trunk/run.bat @@ -1,4 +1,4 @@ -..\FASM\fasm.exe box_lib.asm -..\FASM\fasm.exe editbox_ex.asm editbox_ex.kex +@fasm.exe box_lib.asm +@fasm.exe editbox_ex.asm editbox_ex.kex REM ..\FASM\kpack.exe editbox_ex -..\emul\klbrinwin.exe editbox_ex.kex \ No newline at end of file +@klbrinwin.exe editbox_ex.kex \ No newline at end of file diff --git a/programs/develop/examples/editbox/trunk/EDITBOX.INC b/programs/develop/examples/editbox/trunk/EDITBOX.INC index 3b78616a02..e7916027a3 100644 --- a/programs/develop/examples/editbox/trunk/EDITBOX.INC +++ b/programs/develop/examples/editbox/trunk/EDITBOX.INC @@ -2,7 +2,7 @@ ;;;;;;;;;;;;;;;;;; include 'editbox.mac' ;макрос который должен облегчить жизнь :) специально для editbox ;;;;;;;;;;;;;;;;;; -macro use_edit_box procinfo,scr_h,scr_w +macro use_edit_box { edit_box: ed_width equ [edi] ;ширина компонента @@ -16,18 +16,18 @@ ed_text_color equ [edi+28] ;цве ed_max equ [edi+32] ;кол-во символов которые можно максимально ввести ed_text equ [edi+36] ;указатель на буфер ed_flags equ [edi+40] ;флаги -ed_size equ [edi+42] ;кол-во символов -ed_pos equ [edi+46] ;позиция курсора -ed_offset equ [edi+50] ;смещение -cl_curs_x equ [edi+54] ;предыдущее координата курсора по х -cl_curs_y equ [edi+58] ;предыдущее координата курсора по у -ed_shift_pos equ [edi+62] ;положение курсора -ed_shift_pos_old equ [edi+66] ;старое положение курсора +ed_size equ [edi+44] ;кол-во символов +ed_pos equ [edi+48] ;позиция курсора +ed_offset equ [edi+52] ;смещение +cl_curs_x equ [edi+56] ;предыдущее координата курсора по х +cl_curs_y equ [edi+60] ;предыдущее координата курсора по у +ed_shift_pos equ [edi+64] ;положение курсора +ed_shift_pos_old equ [edi+68] ;старое положение курсора ;========================================================== ;=== процедура прорисовки ================================= ;========================================================== .draw: -pusha +pushad ;--- рисуем рамку --- call .draw_border ; Функция стабильна .draw_bg_cursor_text: @@ -54,7 +54,7 @@ edit_ex ;=== обработка клавиатуры ================================= ;========================================================== .key: -pusha +pushad test word ed_flags,ed_focus ; если не в фокусе, выходим je .editbox_exit test word ed_flags,ed_mouse_on @@ -91,7 +91,7 @@ use_work_key ;=== обработка мыши ======================================= ;========================================================== .mouse: -pusha +pushad ;debug ;---------------------------------------------------------- ;--- получаем состояние кнопок мыши ----------------------- @@ -117,13 +117,14 @@ pusha je @f jmp ._blur ;---------------------------------------------------------- -;--- получаем координаты мыши относительно 0 т.е всей области экрана +;--- получаем координаты мыши относительно окна ;---------------------------------------------------------- -@@: mcall 37,0 +@@: mcall 37,1 + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Функция обработки мышки получение координат и проверка их + выделения ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -use_work_mause scr_h,scr_w +use_work_mouse ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Общие функции обработки ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -135,7 +136,7 @@ use_key_func ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Функции для работы с mouse ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -use_mouse_func scr_w +use_mouse_func } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Bit mask from editbox @@ -161,12 +162,8 @@ ed_mouse_on = 100000000b ed_mous_adn_b= 100011000b ed_mouse_on_off=1111111011111111b ed_height=14 ; высота -macro draw_edit_boxes start,_end,use_f9,procinfo +macro draw_edit_boxes start,_end { -if use_f9 eq -else - mcall 9,procinfo,-1 -end if mov edi,start mov ecx,((_end-start)/ed_struc_size) @@: @@ -194,7 +191,7 @@ macro key_edit_boxes start,end add edi,ed_struc_size loop @b } -ed_struc_size=70 +ed_struc_size=72 struc edit_box width,left,top,color,shift_color,focus_border_color,\ blur_border_color,text_color,max,text,flags,size,pos { @@ -208,7 +205,7 @@ struc edit_box width,left,top,color,shift_color,focus_border_color,\ .text_color dd text_color .max dd max .text dd text -.flags dw flags+0 +.flags dd flags+0 .size dd size+0 .pos dd pos+0 .offset dd 0 @@ -245,12 +242,8 @@ macro edit_boxes_set_sys_color start,end,color_table loop @b } -macro draw_edit_box ed_ptr,use_f9,procinfo +macro draw_edit_box ed_ptr { -if use_f9 eq -else - mcall 9,procinfo,-1 -end if mov edi,ed_ptr call edit_box.draw } diff --git a/programs/develop/examples/editbox/trunk/FAQ.txt b/programs/develop/examples/editbox/trunk/FAQ.txt index a0eac20661..230c4355f3 100644 --- a/programs/develop/examples/editbox/trunk/FAQ.txt +++ b/programs/develop/examples/editbox/trunk/FAQ.txt @@ -84,23 +84,17 @@ draw_edit_boxes - ╧хЁхфртрхь√х ярЁрьхЄЁ√ editboxes - єърчрЄхы№ эр шэЇюЁьрЎшюээє■ ёЄЁєъЄєЁє сюъёют editboxes_end - ъюэхЎ шэЇюЁьрЎшюээющ ёЄЁєъЄєЁ√ сюъёют -use_f9 ш procinfo - яЁш яхЁхфрўх ¤Єюую ярЁрьхЄЁр - яЁш яхЁхЁшёютъш сюъёют сєфхЄ шёяюычютрэр ЇєэЎш  -mcall 9,procinfo,-1 -ъюЄюЁр  яюыєўрхЄ фрээ√х ю юъэх ш ёъырф√трхЄ ярЁрьхЄЁ√ яю рфЁхёє procinfo- хую Єю цх юс чрЄхы№эю эєцэю яхЁхфртрЄ№!!!! -┼ёыш т яЁюуЁрььх єцх шёяюы№чєхЄё  ¤Єр ЇєэъЎш , Єю эх эєцэю єърч√трЄ№ фрээ√х ярЁрьхЄЁ!!!! + ╩ръ яюф трЁшрэЄ ёє∙хёЄтєхЄ ьръЁюё draw_edit_box - юэ шёяюы№чєхЄё  хёыш т√тюфшЄё  юфшэ сюъё ╧хЁхфртрхь√щ ярЁрьхЄЁ editboxes - єърчрЄхы№ эр шэЇюЁьрЎшюээє■ ёЄЁєъЄєЁє сюъёют -use_f9 ш procinfo - яЁш яхЁхфрўх ¤Єюую ярЁрьхЄЁр - яЁш яхЁхЁшёютъш сюъёют сєфхЄ шёяюы№чютрэр ЇєэъЎш  -mcall 9,procinfo,-1 -ъюЄюЁр  яюыєўрхЄ фрээ√х ю юъэх ш ёъырф√трхЄ ярЁрьхЄЁ√ яю рфЁхёє procinfo- хую Єю цх юс чрЄхы№эю эєцэю яхЁхфртрЄ№!!!! -┼ёыш т яЁюуЁрььх єцх шёяюы№чєхЄё  ¤Єр ЇєэъЎш , Єю эх эєцэю єърч√трЄ№ фрээ√х ярЁрьхЄЁ!!!! ┴юы№°х эшъръшї ярЁрьхЄЁют яхЁхфртрЄ№ эх эєцэю. ********** default_box - ьръЁюё ъюЄюЁ√щ яЁштюфшЄ юёэютэ√х фрээ√х ьръЁюёр яю фхЇюыЄє Є.х. ╤эшьрхЄ сшЄютє■ ьрЄЁшЎє т√фхыхэш  ╤яхЎшры№эю фы  KFM :)) ═єцэю фюсртшЄ№ ¤ЄюЄ ъюф яЁш юсЁрсюЄўшъх yes or no яЁш ъюяшЁютрэшш. ┼ёыш сєфхЄ тхёЄш ёхс  эхрфхътрЄэю - эхюсїюфшью ЁрёъюььхэЄшЁютрЄ№ ёЄЁюъш т фрээюь ьръЁюёх +Єръ чр тёх тЁхь  ш эх с√ы шёяюы№чютрэ т KFM @@ -128,7 +122,7 @@ struc edit_box width,left,top,color,focus_border_color,blur_border_color,text_co .text_color dd text_color .max dd max .text dd text -.flags dw flags+0 +.flags dd flags+0 .size dd size+0 .pos dd 0 - уфх сєфхЄ эрїюфшЄ№ё  ъєЁёюЁ .offset dd 0 diff --git a/programs/develop/examples/editbox/trunk/History b/programs/develop/examples/editbox/trunk/History index 2b0adc06a2..c14c59bcf2 100644 --- a/programs/develop/examples/editbox/trunk/History +++ b/programs/develop/examples/editbox/trunk/History @@ -6,6 +6,7 @@ You bunny wrote ..... ▌Єю эх ьэюую Їюы№ъыхЁр, ёт чрээюх, ё Єхь, ўЄю эряшёрэшх яЁюуЁрьь фышээ√х ш ьєЄюЁэ√щ яЁюЎхёё, ш юэ эх юсїюфшЄ№ё  схч т√Ёрцхэшщ яюфюсэюую ёюфхЁцрэш , эю эх яюярфр■∙хую т ъюьхэЄрЁшш ш юёэютэющ ъюф..... ╥хяыют └ыхъёхщ ▐Ё№хтшў aka +; 23.07.2008 ╧хЁхяшёрэр юсЁрсюЄър ь√°ъш схч шёяюы№чютрэш  9-ющ ЇєэъЎшш, єьхэ№°шы яЁшьхЁэю эр 50 срщЄ ъюф. ; 20.07.2007 ╩юёьхЄшўхёъшх єыєў°хэш  т ъюфх яЁюуЁрьь√, шёяЁртыхэ юфшэ эхёє∙хёЄтхээ√щ сру. ; 18.05.2007 ╙ыєў°хэшх яюэшьрэш  ЁрсюЄ√ яЁюуЁрьь√ чр ёўхЄ т√эхёр юёэютэ√ї ЇєэъЎшщ т юЄфхы№э√х ьръЁюё√ ; 14.05.2007 ╚ёяюы№чютрэшх ьръЁюёют,єфюсюўшЄрхьюё№ яЁюуЁрьь√ шёяюы№чютрэшх ьръЁюёр mcall фы  т√чютр ёшё. ЇєэъЎшщ diff --git a/programs/develop/examples/editbox/trunk/build_ru.bat b/programs/develop/examples/editbox/trunk/build_ru.bat index e8f11fe8f3..5e71f3c267 100644 --- a/programs/develop/examples/editbox/trunk/build_ru.bat +++ b/programs/develop/examples/editbox/trunk/build_ru.bat @@ -1,3 +1,3 @@ -@fasm editbox.asm editbox +@fasm editbox.asm editbox.kex REM @kpack editbox @pause \ No newline at end of file diff --git a/programs/develop/examples/editbox/trunk/editbox.asm b/programs/develop/examples/editbox/trunk/editbox.asm index b90e2e8f1e..d0f7f72191 100644 --- a/programs/develop/examples/editbox/trunk/editbox.asm +++ b/programs/develop/examples/editbox/trunk/editbox.asm @@ -7,7 +7,7 @@ include 'editbox.inc' meos_app_start align 4 - use_edit_box procinfo,22,5 + use_edit_box ;Область кода code ;Точка входа в программу mcall 40,0x27 ;установить маску для ожидаемых событий @@ -41,7 +41,7 @@ align 4 draw_window: ;рисование окна приложения mcall 12,1 mcall 0,(50*65536+390),(30*65536+200),0xb3AABBCC,0x805080DD,hed - draw_edit_boxes editboxes,editboxes_end,use_f9,procinfo ;рисование edit box'ов + draw_edit_boxes editboxes,editboxes_end ;рисование edit box'ов mcall 12,2 ret ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -54,7 +54,7 @@ edit4 edit_box 16,5,70,0xffffff,0x6a9480,0,0,0,1,ed_buffer.4,ed_figure_only editboxes_end: data_of_code dd 0 mouse_flag dd 0x0 -hed db 'EDITBOX optimization and retype date 20.07.2007',0 +hed db 'EDITBOX optimization and retype date 23.07.2008',0 rb 256 ed_buffer: ;.1: rb 514;256 @@ -64,6 +64,5 @@ ed_buffer: ;два запасных байта необходимы для того что бы не пепереписать следующией байты, в конце буфера 0 buffer_end: align 16 -procinfo process_information meos_app_end udata \ No newline at end of file diff --git a/programs/develop/examples/editbox/trunk/editbox.mac b/programs/develop/examples/editbox/trunk/editbox.mac index 972057e391..f1c2beeb58 100644 --- a/programs/develop/examples/editbox/trunk/editbox.mac +++ b/programs/develop/examples/editbox/trunk/editbox.mac @@ -818,7 +818,7 @@ edit_ex jmp .draw_cursor_text } -macro use_mouse_func scr_w +macro use_mouse_func { ;---------------------------------------------------------- ;--- Обработка .mouse_wigwag @@ -829,12 +829,10 @@ macro use_mouse_func scr_w ;;;;;;;;;;;;;;;;;; ;;процедура обработки положения выделенного текста, когда происходит выход за пределы editbox ;;;;;;;;;;;;;;;;;; - mov ebx,dword [procinfo+34] - add ebx,ed_left -if scr_w eq -else - add ebx,dword scr_w -end if + test ax,0x8000 + jnz .mleft + + mov ebx,ed_left cmp eax,ebx jb .mleft @@ -893,6 +891,7 @@ end if ; popa ; ret .mleft: + mov eax,ed_pos cmp eax,0 jbe .mwigvag @@ -919,7 +918,7 @@ end if jmp .mdraw } -macro use_work_mause scr_h,scr_w +macro use_work_mouse ;---------------------------------------------------------- ;--- А не удерживаем ли мы клавишу мышки, перемещая курсор, во все разные стороны? ;---------------------------------------------------------- @@ -929,48 +928,36 @@ macro use_work_mause scr_h,scr_w ;---------------------------------------------------------- ;--- проверяем, попадает ли курсор в edit box ------------- ;---------------------------------------------------------- - mov ebx,dword [procinfo + 38] - add ebx,ed_top -if scr_h eq -else - add ebx,scr_h -end if + + mov ebx,ed_top cmp ax,bx jl ._blur;.mouse_end_no_focus - + add ebx,ed_height cmp ax,bx jg ._blur;.mouse_end_no_focus shr eax,16 - mov ebx,dword [procinfo + 34] - add ebx,ed_left -if scr_w eq -else - add ebx,scr_w -end if + mov ebx,ed_left cmp ax,bx jl ._blur;.mouse_end_no_focus add ebx,ed_width + cmp ax,bx - jg ._blur;.mouse_end_no_focus + jg ._blur;.mouse_end_no_focus + ;--- изменяем позицию курсора --- push eax mov ebp,ed_color call .clear_cursor pop eax ._mvpos: - mov ebx,dword [procinfo+ 34] + xor edx,edx sub eax,ed_left - sub eax,ebx -if scr_w eq -else - add ebx,scr_w - sub eax,2 -end if + mov ebx,6 div bx add eax,ed_offset @@ -1029,7 +1016,7 @@ end if ; Макрос выхода macro edit_ex { -popa +popad ret } macro debug