From 016062e7e6fdf311833e4853c667d45c5c979720 Mon Sep 17 00:00:00 2001 From: "Alexey Teplov (" Date: Fri, 20 Apr 2007 04:19:47 +0000 Subject: [PATCH] Modify macros and add History, FAQ.txt git-svn-id: svn://kolibrios.org@468 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../examples/editbox/trunk/EDITBOX.INC | 197 ++++++++---------- .../develop/examples/editbox/trunk/FAQ.txt | 187 +++++++++++++++++ .../develop/examples/editbox/trunk/History | 30 +++ .../examples/editbox/trunk/editbox.asm | 12 +- 4 files changed, 305 insertions(+), 121 deletions(-) create mode 100644 programs/develop/examples/editbox/trunk/FAQ.txt create mode 100644 programs/develop/examples/editbox/trunk/History diff --git a/programs/develop/examples/editbox/trunk/EDITBOX.INC b/programs/develop/examples/editbox/trunk/EDITBOX.INC index bb74e7476d..daca7ef758 100644 --- a/programs/develop/examples/editbox/trunk/EDITBOX.INC +++ b/programs/develop/examples/editbox/trunk/EDITBOX.INC @@ -1,72 +1,15 @@ -; 04.04.2007 €бЇа ў«Ґ­® гЇа ў«Ґ­ЁҐ ¬лиЄ®©, ЇаЁ г¤ «Ґ­ЁЁ Ї®б«Ґ¤­ҐЈ® бЁ¬ў®«  ў ЎгдҐаҐ ЇЁиҐвмбп 0 (бЇ бЁЎ® Mario79) -; 04.04.2007 Њ®¤Ґа­Ё§Ёа®ў « бЁб⥬㠢뤥«Ґ­Ёп, бгйҐб⢥­­® ЇҐаҐ¤Ґ« ­® гЇа ў«Ґ­ЁҐ Ё ®Ўа Ў®вЄ , ¤®Ў ў«Ґ­­® Ў«®ЄЁа®ў ­Ёп ®Ўа Ў®вЄЁ ¤агЈЁе Ў®Єб®ў, ў® ўаҐ¬п ўл¤Ґ«Ґ­Ёп ¬лиЄ®© ⥪бв , ¤«п нв®Ј® ў ⥪бв Їа®Ја ¬¬л ­Ґ®Ўе®¤Ё¬® ¤®Ў ўЁвм Ё¤Ґ­вЁдЁЄ в®а Ў®Єб  в.Ґ. dd 0x0 Ё ў ­ҐЈ® Ўг¤Ґв Ї®¬Ґй вмбп гЄ  вҐ«м ­  editbox -; 30.03.2007 ЏҐаҐ¤Ґ« « Їа®жҐ¤га㠢뤥«Ґ­Ёп, ⥯Ґам ⥪б⠢뤥«пҐвбп в®«мЄ® в®«мЄ® ¬лиЄ®© -; 09.03.2007 „®ЇЁб « гЇа ў«Ґ­ЁҐ mouse + shift ўл¤Ґ«Ґ­ЁҐ Ё ЇҐаҐ¬ҐйҐ­ЁҐ -; 07.03.2007 „®ЇЁб « гЇа ў«Ґ­ЁҐ б shift home + end гбЇа ўЁ« ­ҐбЄ®«мЄ® Ў Ј®ў -; 06.03.2007 ЏҐаҐЇЁб « Ї®«­®бвмо  «Ј®аЁв¬ гЇа ў«Ґ­Ёп shift -; 15.02.2007 г«гз襭ЁҐ б­пвЁп ўл¤Ґ«Ґ­Ёп Ё ЇҐаҐаЁб®ўЄЁ ®зЁй Ґ¬®© ®Ў« бвЁ, §­ зЁвҐ«м­® ЇаЁпв­ҐҐ а Ў®в Ґв Є®¬Ї®­Ґ­в -; 13.02.2007 гЎа « Ї® ў®§¬®¦­®бвЁ ¬Ґаж ­ЁҐ, г«гз襭  ®Ўа Ў®вЄ  ЇҐаҐаЁб®ўЄЁ д®­  -; ¤®Ў ўЁ« дЁвзг ў­ҐбҐ­Ёп 0е0 Ї®  ¤аҐбг ed_size Ё­ зҐ г Maxxx32 Ўл«Ё ­Ґб®бвлЄ®ўЄЁ ў Є®¤Ґ. ЏаЁзЁ­  ў ⮬, зв® ®ЇвЁ¬Ё§ жЁп Ўл«  ᢥ¤Ґ­  Є ⮬г, зв® п ­Ґ зЁбвЁ« бЁ¬ў®«л ў ЎгдҐаҐ, Є®Ј¤  г¤ «п«, п Їа®бв® Ёе ­Ґ ўлў®¤Ё«, Ё Ї®в®¬, Є®Ј¤  ў­®бЁ«бп ­®ўл© бЁ¬ў®«, ®­ Ї®Їа®бвг § вЁа « 㦥 Ё¬ҐойЁ©бп. …б«Ё Ўл, Їа®Ја ¬¬  ®Ўа Ў влў «  Є®­Ґж бва®ЄЁ Ї® ed_size, Їа®Ў«Ґ¬л ­Ґ ў®§­ЁЄ«®. Ќ® ᥩз б нв®в ­Ґ¤®бв в®Є ЁбЇа ў«Ґ­. -; 01.02.2007 ¤®а Ў®вЄ  edit_box, ЁбЇа ўЁ« Ў ЈЁ. -; 26.01.2007 ­®а¬ «м­ п а Ў®в  Є®¬Ї ­Ґ­в  ЁбЇа ўЁ« дгЄжЁо .check_offset -; 24.01.2007 Ї®дЁЄбҐ« Ў ЈЁ ўл§ў ­лҐ ­Ґ Їа ўЁ«м­л¬ Є®¤®¬ )). -; 22.01.2007 Ё§Ў ўЁ«бп ®в Ј«оЄ®ў ЇаЁ а Ў®вҐ б ўл¤Ґ«Ґ­ЁҐ¬ Ё г¤ «Ґ­ЁҐ, Є®а४⭠п а Ў®в  Є« ўЁиҐ© del & backspase -; 20.01.2007 ॠ«Ё§®ў « ўл¤Ґ«Ґ­ЁҐ ⥪бв  Ї® shift -; 12.12.2006 ॠ«Ё§®ў « Ї®¤¤Ґа¦Єг Є­®ЇЄЁ insert Ё ᥣ®¤п Є®¬Ї®­Ґ­в Ї®звЁ а Ў®в Ґв!!!! -; 07.12.2006 Їа®¤®«¦ Ґвбп а Ў®в  ­ ¤ ЇҐаҐа Ў®вЄ®© Є®¬Ї®­Ґ­в ,Ё§¬Ґ­Ґ­Ёп¬ Ї®¤ўҐаЈ«Ёбм ¬­®ЈЁҐ дг­ЄжЁЁ, ЇҐаҐа Ў®в ­ ўлў®¤ ⥪бв ,   в Є  ¦Ґ  «Ј®аЁв¬ ў­ҐбҐ­Ёп бЁ¬ў®«®ў. -; 03.09.2006 Ї® ў®§¬®¦­®бвЁ ®вЄ § «бп ®в 16 ЎЁв­®©  аЁд¬ҐвЁЄЁ, ¤®Ў ўЁ« ­®ўлҐ Ў ЈЁ -; 09.08.2006 Їа®Ё§ўҐ¤Ґ­  ®ЇвЁ¬Ё§ жЁп а Ў®вл Є®­Ї®Є DEL Ё Backspace, 㬥­м襭 а §¬Ґа ўлЇ®«­пҐ¬®Ј® Є®¤ . -; 21.07.2006 ¤®Ў ў«Ґ­  дг­ЄжЁп Є­®ЇЄЁ Del, ⥯Ґам ¬®¦­® г¤ «пвм бЁ¬ў®«л ЇаЁ Ї®¬®йЁ ¤ ­­®© Є« ўЁиЁ -; Ђўв®а: …ўвЁе®ў Њ ЄбЁ¬ (Maxxxx32) email: maxxxxm@mail.ru -; „ в  Ї®б«Ґ¤­Ёе Ё§¬Ґ­Ґ­Ё©: 13.06.06 10:40 -; Ќ ЇЁиЁвҐ ў Ёб室­®¬ Є®¤Ґ бў®Ґ© Їа®Ја ¬¬л use_edit_box, -; нв® ўбв ўЁв ­Ґ®Ўе®¤Ё¬лҐ Їа®жҐ¤гал ў Є®¤ ў иҐ© Їа®Ја ¬¬л. -; Џа®жҐ¤гал: -; edit_box.draw - Ї®«­ п ЇҐаҐаЁб®ўЄ ; -; edit_box.key - ®Ўа Ў®вЄ  Є« ўЁ вгал; -; edit_box.mouse - ®Ўа Ў®вЄ  ¬лиЁ; -; edit_box.focus - гбв ­®ўЄ  д®Єгб ; -; edit_box.blur - ҐЈ® а §¬лў ­ЁҐ; -; edit_box.get_n - Ї®«гзЁвм Є®«ЁзҐбвў® Їа®аЁб®ўлў Ґ¬ле бЁ¬ў®«®ў. -; ЏаЁ ўл§®ўҐ «оЎле Ё§ нвЁе Їа®жҐ¤га ў ॣЁбвॠedi б«Ґ¤гҐв -; ®бв ўЁвм гЄ § вҐ«м ­  бвагЄвгаг. -; ЏаЁ¬Ґа бвагЄвгал: -; some_edit edit_box 100,10,30,0x00ffffff,0,0x00aaaaaa,0,255,some_edit_text -; ¤«Ё­ , ўлб®в , ўҐае, 梥в д®­ , 梥в а ¬ЄЁ, Ґб«Ё ўлЎа ­, -; 梥в а ¬ЄЁ, Ґб«Ё ­Ґ ўлЎа ­, ¬ ЄбЁ¬ «м­®Ґ Є®«ЁзҐбвў® бЁ¬ў®«®ў, -; гЄ § вҐ«м ­  ЎгдҐа, Ј¤Ґ Ўг¤гв еа ­Ёвбп бЁ¬ў®«л. ЃгдҐа ¤®«¦Ґ­ -; ®Є ­зЁў вмбп ­г«Ґ¬, ­ ЇаЁ¬Ґа Ґб«Ё ¬ ЄбЁ¬ «м­®Ґ Є®«ЁзҐбвў® 255: -; some_edit_text: -; rb 256 ;255+1 - -; ЏаЁ¬Ґа ўл§®ў  Їа®жҐ¤гал: -; mov edi,some_edit -; call edit_box.draw - -; ЏаЁ ўл§®ўҐ Їа®жҐ¤гал edit_box.key Є®¤ Є« ўЁиЁ ¤®«¦Ґ­ -; ­ е®¤Ёвбп ў ah, в® Ґбвм ЇҐаҐ¤ ўл§®ў®¬ нв®© Їа®жҐ¤гал ­ ¤® ўл§ў вм -; 2-го бЁбҐ¬­го дг­ЄжЁо, ­ ЇаЁ¬Ґа: -; mov eax,2 -; int 0x40 -; mov edi,some_edit1 -; call edit_box.key -; mov edi,some_edit2 -; call edit_box.key -; ЏҐаҐ¤ ўл§®ў®¬ ®Ўа Ў®взЁЄ  ¬лиЁ б«Ґ¤гҐв Їа®ўҐаЁвм, пў«пҐвбп «Ё ®Є­® -;  ЄвЁў­л¬. -; …б«Ё 饫箪 ¬лиЁ Ўл« Їа®©§ўҐ¤Ґ­ §  ЇаҐ¤Ґ« ¬Ё edit box -; д®Єгб вҐапҐвбп. +; SEE YOU File FAQ.txt and HISTORY. Good Like! ;;;;;;;;;;;;;;;;;; include 'editbox.mac' ;¬ Єа®б Є®в®ал© ¤®«¦Ґ­ ®Ў«ҐЈзЁвм ¦Ё§­м :) бЇҐжЁ «м­® ¤«п editbox ;;;;;;;;;;;;;;;;;; -macro use_edit_box +macro use_edit_box structure_of_potock,scr_h,scr_w { edit_box: ed_width equ [edi] ;иЁаЁ­  Є®¬Ї®­Ґ­в  ed_left equ [edi+4] ;Ї®«®¦Ґ­ЁҐ Ї® ®бЁ е ed_top equ [edi+8] ;Ї®«®¦Ґ­ЁҐ Ї® ®бЁ г ed_color equ [edi+12] ;梥в д®­  Є®¬Ї®­Ґ­в  -shift_color equ [edi+16] ;=0x6a9480 +shift_color equ [edi+16] ;=0x6a9480 ed_focus_border_color equ [edi+20] ;梥в а ¬ЄЁ Є®¬Ї®­Ґ­в  ed_blur_border_color equ [edi+24] ;梥⠭Ґ  ЄвЁў­®Ј® Є®¬Ї®­Ґ­в  ed_text_color equ [edi+28] ;梥в ⥪бв  @@ -184,7 +127,7 @@ ret mov ecx,cl_curs_y jmp .draw_curs .draw_cursor: - mov edx,ed_text_color + mov edx,ed_text_color mov ebx,ed_pos mov ecx,ed_offset sub ebx,ecx @@ -751,9 +694,9 @@ edit_ex pusha mov eax,ed_size mov ebx,ed_text - test eax,eax + test eax,eax add eax,ebx - jne @f + jne @f inc eax @@: xor ebx,ebx mov [eax],bl @@ -909,13 +852,9 @@ edit_ex je @f jmp ._blur ;---------------------------------------------------------- -;--- ¬®¤ЁдЁжЁа㥬 Є®®а¤Ё­ вл, в.Ґ. ¤®Ў ў«пҐ¬ Є®®а¤Ё­ вл ®Є­ . -;---------------------------------------------------------- -@@: mcall 9,structure_of_potock,-1 -;---------------------------------------------------------- ;--- Ї®«гз Ґ¬ Є®®а¤Ё­ вл ¬лиЁ ®в­®бЁвҐ«м­® 0 в.Ґ ўбҐ© ®Ў« бвЁ нЄа ­  ;---------------------------------------------------------- - mcall 37,0 +@@: mcall 37,0 ;---------------------------------------------------------- ;--- Ђ ­Ґ 㤥নў Ґ¬ «Ё ¬л Є« ўЁиг ¬лиЄЁ, ЇҐаҐ¬Ґй п Єгаб®а, ў® ўбҐ а §­лҐ бв®а®­л? ;---------------------------------------------------------- @@ -927,7 +866,10 @@ edit_ex ;---------------------------------------------------------- mov ebx,dword [ecx+38] add ebx,ed_top - add ebx,22 +if scr_h eq +else + add ebx,scr_h +end if cmp ax,bx jl ._blur;.mouse_end_no_focus @@ -939,7 +881,10 @@ edit_ex mov ebx,dword [ecx+34] add ebx,ed_left - add ebx,5 +if scr_w eq +else + add ebx,scr_w +end if cmp ax,bx jl ._blur;.mouse_end_no_focus @@ -957,7 +902,11 @@ edit_ex xor edx,edx sub eax,ed_left sub eax,ebx - sub eax,5-2 ;в®«йЁ­  ®Ўў®¤ЄЁ бЄЁ­  =5 +if scr_w eq +else + add ebx,scr_w + sub eax,2 +end if mov ebx,6 div bx add eax,ed_offset @@ -1037,16 +986,18 @@ edit_ex mov ecx,structure_of_potock mov ebx,dword [ecx+34] add ebx,ed_left - add ebx,5 +if scr_w eq +else + add ebx,scr_w +end if + cmp eax,ebx + jb .mleft - cmp eax,ebx - jb .mleft + add ebx,ed_width + cmp eax,ebx + ja .mright - add ebx,ed_width - cmp eax,ebx - ja .mright - - sub ebx,ed_width + sub ebx,ed_width xor edx,edx sub eax,ebx ; ўлзвЁ¬ Ё§ Є®®а¤Ё­ в ¬лиЄЁ Ї® ®бЁ е Є®®а¤Ё­ вл ¤® editbox Ї® ®бЁ е @@ -1057,13 +1008,13 @@ edit_ex ;;;;;;;;;;;;;;;;;; ;Џ®«гзЁ«Ё Є®®а¤Ё­ вл ў eax ¬лиЄЁ, в.Ґ. Єг¤  ®­  ЇҐаҐ¬ҐбвЁ« бм ;ђЁб®ў ­ЁҐ § Єа иҐ­ле Їаאַ㣮«м­ЁЄ®ў Ё ®зЁбвЄ  Ёе - add eax,ed_offset ;¤®Ў ўЁ¬ ᬥ饭ЁҐ - cmp eax,dword ed_size ;Ґб«Ё ўли«Ё §  ЇаҐ¤Ґ«л, в® ­ЁзҐЈ® ­Ґ ¤Ґ« вм - ja .mwigvag + add eax,ed_offset ;¤®Ў ўЁ¬ ᬥ饭ЁҐ + cmp eax,dword ed_size ;Ґб«Ё ўли«Ё §  ЇаҐ¤Ґ«л, в® ­ЁзҐЈ® ­Ґ ¤Ґ« вм + ja .mwigvag .mdraw: mov dword ed_pos,eax ;б®еа ­Ё¬ ­®ў®Ґ §­ зҐ­ЁҐ ;ђЁб®ў ­ЁҐ § Єа иҐ­ле Їаאַ㣮«м­ЁЄ®ў Ё ®зЁбвЄ  Ёе - mov ecx,dword ed_shift_pos + mov ecx,dword ed_shift_pos mov ebx,dword ed_shift_pos_old mov dword ed_shift_pos_old,eax ;ў­ҐбҐ¬ ­®ў®Ґ §­ зҐ­ЁҐ бв а®© Ї®§ЁжЁЁ Єгаб®а  ;Їа®ўҐаЄ  Ё аЁб®ў ­ЁҐ § Єа иҐ­ле ®Ў« б⥩ @@ -1072,7 +1023,7 @@ edit_ex jb .msmaller ;¤ўЁ¦Ґ­ЁҐ Ўл«® -> cmp ebx,eax ;¤ўЁ¦Ґ­ЁҐ Ўл«® ¤® нв®Ј® <- Ё вгв ¬л Їа®ўҐа塞 ᥩз б Єг¤  ¤ўЁ¦Ґ­ЁҐ Їа®Ёб室Ёв ja .m1_shem ;Ґб«Ё Ўл«® ¤ўЁ¦Ґ­ЁҐ <- в® ­г¦­® § Єа бЁвм ®Ў« бвм - je .mwigvag ;Ґб«Ё Ё§¬Ґ­Ґ­Ёп ­Ґ Ўл«®, в® ­ЁзҐЈ® ­Ґ ¤Ґ« вм + je .mwigvag ;Ґб«Ё Ё§¬Ґ­Ґ­Ёп ­Ґ Ўл«®, в® ­ЁзҐЈ® ­Ґ ¤Ґ« вм mov ebp,ed_color ;вгв ­г¦­® ®зЁбвЁвм ®Ў« бвм c ed_pos ed_shift_pos_old ;ўе®¤­лҐ Ї а ¬Ґвал ebp=color ebx=ed_shift_pos call .sh_cl_ @@ -1088,39 +1039,39 @@ edit_ex .m1_shem: mov ebp,shift_color ;ўе®¤­лҐ Ї а ¬Ґвал ebp=color ebx=ed_shift_pos - mov ebx,ecx + mov ebx,ecx call .sh_cl_ jmp .mwigvag .mwigvag: and word ed_flags,ed_shift_mcl - jmp .draw_cursor_text + jmp .draw_cursor_text ; popa ; ret .mleft: - mov eax,ed_pos - test eax,eax - jz .mwigvag - dec eax - call .check_offset - push eax - mov ebx,ed_shift_pos - mov ebp,shift_color - call .sh_cl_ - pop eax - jmp .mdraw + mov eax,ed_pos + cmp eax,0 + jbe .mwigvag + dec eax + call .check_offset + push eax + mov ebx,ed_shift_pos + mov ebp,shift_color + call .sh_cl_ + pop eax + jmp .mdraw .mright: - mov eax,ed_pos - mov ebx,ed_size - cmp eax,ebx - jae .mwigvag - inc eax - call .check_offset - mov ebx,ed_shift_pos - mov ebp,shift_color - push eax - call .sh_cl_ - pop eax - jmp .mdraw + mov eax,ed_pos + mov ebx,ed_size + cmp eax,ebx + jae .mwigvag + inc eax + call .check_offset + mov ebx,ed_shift_pos + mov ebp,shift_color + push eax + call .sh_cl_ + pop eax + jmp .mdraw } ed_figure_only= 1000000000000000b ;®¤­Ё бЁ¬ў®«л @@ -1144,20 +1095,24 @@ ed_mouse_on = 100000000b ed_mous_adn_b= 100011000b ed_mouse_on_off=1111111011111111b ed_height=14 ; ўлб®в  -macro draw_edit_boxes start,end +macro draw_edit_boxes start,_end,use_f9,structure_of_potock { +if use_f9 eq +else + mcall 9,structure_of_potock,-1 +end if mov edi,start - mov ecx,((end-start)/ed_struc_size) + mov ecx,((_end-start)/ed_struc_size) @@: call edit_box.draw add edi,ed_struc_size loop @b } -macro mouse_edit_boxes start,end +macro mouse_edit_boxes start,_end { mov edi,start - mov ecx,((end-start)/ed_struc_size) + mov ecx,((_end-start)/ed_struc_size) @@: call edit_box.mouse add edi,ed_struc_size @@ -1224,8 +1179,12 @@ macro edit_boxes_set_sys_color start,end,color_table loop @b } -macro draw_edit_box ed_ptr +macro draw_edit_box ed_ptr,use_f9,structure_of_potock { +if use_f9 eq +else + mcall 9,structure_of_potock,-1 +end if mov edi,ed_ptr call edit_box.draw } @@ -1240,4 +1199,14 @@ macro key_edit_box ed_ptr { mov edi,ed_ptr call edit_box.key +} +macro default_box ed_ptr +{ +pusha +; xor eax,eax +; mov ed_shift_pos,eax +; mov ed_shift_pos_old,eax + and word ed_flags,ed_shift_cl +; mov ed_offset,eax +popa } \ No newline at end of file diff --git a/programs/develop/examples/editbox/trunk/FAQ.txt b/programs/develop/examples/editbox/trunk/FAQ.txt new file mode 100644 index 0000000000..b5f27a29cf --- /dev/null +++ b/programs/develop/examples/editbox/trunk/FAQ.txt @@ -0,0 +1,187 @@ +Посдедная модификация +;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;Структурное описание возможности компоента и моделей его использования. +;;;;;;;;;;;;;;;;;;;;;;;;;;; + Напишите в исходном коде своей программы use_edit_box, +это вставит необходимые процедуры в код вашей программы. + Процедуры: + edit_box.draw - полная перерисовка; + edit_box.key - обработка клавиатуры; + edit_box.mouse - обработка мыши; + edit_box.focus - установка фокуса; + edit_box.blur - его размывание; + edit_box.get_n - получить количество прорисовываемых символов. + При вызове любых из этих процедур в регистре edi следует +оставить указатель на структуру. + Пример структуры: +some_edit edit_box 100,10,30,0x00ffffff,0,0x00aaaaaa,0,255,some_edit_text +длина, высота, верх, цвет фона, цвет рамки, если выбран, +цвет рамки, если не выбран, максимальное количество символов, +указатель на буфер, где будут хранится символы. Буфер должен +оканчиваться нулем, например если максимальное количество 255: + some_edit_text: + rb 256 ;255+1 + Пример вызова процедуры: + mov edi,some_edit + call edit_box.draw + При вызове процедуры edit_box.key код клавиши должен +находится в ah, то есть перед вызовом этой процедуры надо вызвать + 2-ую сисемную функцию, например: + mov eax,2 + int 0x40 + mov edi,some_edit1 + call edit_box.key + mov edi,some_edit2 + call edit_box.key + Перед вызовом обработчика мыши следует проверить, является ли окно +активным. + Если щелчок мыши был пройзведен за пределами edit box +фокус теряется. +::::::::::::::::::::::::: +;;;Макросы, и передаваемые им параметры +;;;;;;;;;;;;;;;;;;;;;;;;; +*********** +use_edit_box +данный макрос вставляет общий код editbox +structure_of_potock - указатель на информационную стрктуру 9 фунции - обязательный параметр + +Если вы используете при прорисовке окна + mcall 0,(50*65536+390),(30*65536+200),0xb3AABBCC,0x805080DD,hed +то 0xb3AABBCC - третий бит - который говорит что координаты отчитывать от клиентской области, вам нужно указать обязательно два этих параметра +В других случаях передавать эти параметры не нужно +scr_h - не обязательный параметр обычно 22 +scr_w - не обязательный параметр обычно 5 +*********** +mouse_edit_boxes +код обработки мышки, вставляется обычно посел обработки всех предыдуших событий +Передаваемые параметры +editboxes - указатель на информационную струкуру боксов +editboxes_end - конец информационной структуры боксов + +Как под вариант существует макрос +mouse_edit_box - он используется если выводитьсяч один бокс +Передаваемый параметр +editboxes - указатель на информационную струкуру боксов +Больше никаких параметров передавать не нужно. +********** +key_edit_boxes - макрос обрабоки клавиш боксами вставляется после того как происходит обработка события что нажата клавиша +Передаваемые параметры +editboxes - указатель на информационную струкуру боксов +editboxes_end - конец информационной структуры боксов + +Как под вариант существует макрос +key_edit_box - он используется если выводитьсяч один бокс +Передаваемый параметр +editboxes - указатель на информационную струкуру боксов +Больше никаких параметров передавать не нужно. +********** +draw_edit_boxes - макрос для вывода боксов используется в выводе окна +Передаваемые параметры +editboxes - указатель на информационную струкуру боксов +editboxes_end - конец информационной структуры боксов +use_f9 и structure_of_potock - при передаче этого параметра - при перерисовки боксов будет исползована фунция +mcall 9,structure_of_potock,-1 +которая получает данные о окне и складывает параметры по адресу structure_of_potock- его то же обязательно нужно передавать!!!! +Если в программе уже используется эта фунция, то не нужно указывать данные параметр!!!! + +Как под вариант существует макрос +draw_edit_box - он используется если выводитьсяч один бокс +Передаваемый параметр +editboxes - указатель на информационную струкуру боксов +use_f9 и structure_of_potock - при передаче этого параметра - при перерисовки боксов будет исползована фунция +mcall 9,structure_of_potock,-1 +которая получает данные о окне и складывает параметры по адресу structure_of_potock- его то же обязательно нужно передавать!!!! +Если в программе уже используется эта фунция, то не нужно указывать данные параметр!!!! +Больше никаких параметров передавать не нужно. +********** +default_box - макрос который приводит основые данные макроса по дефолту т.е. Снимает битовую матрицу выделения +Специально дла KFM :)) Нужно добавить этот код при при обработчике yes or no при копировании. Если будет вести себя неадекватно - необходимо раскоментировать строки в данном макросе + + + + + + +Q: +Возникла пара проблем: +1) Длина максимально набираемого текста ничем не ограничена, в результате при превышении размера буфера затираются данные, которые идут после буфера или код, если он там расположен. +2) Положение элемента фиксировано, хотелось бы работать с динамически вычисляемыми значениями. Например, если размер окна изменился, а элемент должен располагаться по центру окна всегда. + +A: +1) Длинна набираемого текста ограничена, вот смотри: +edit2 edit_box 250,5,30,0xffffff,0,0,0,308,hed,ed_focus,53 - это пример инициализации editbox +Итак попорядку: +Это макрос инициализации структуры +struc edit_box width,left,top,color,focus_border_color,blur_border_color,text_color,max,text,flags,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 size+0 +.pos dd 0 - где будет находиться курсор +.offset dd 0 +.cl_curs_x dd 0 +.cl_curs_y dd 0 +.shift dd 0 +.shift_old dd 0 +} +250 - это длинна editbox width +5 - отступ от левого края left +30 - отступ с верха top +0xffffff - цвет внутри editbox +0x6a9480 - цвет при выделении мышкой или по shift +0 - focus_border_color цвет рамки editbox, когда в фокусе т.е. активен editbox +0 - blur_border_color цвет рамки editbox, когда в не фокусе т.е. не активен editbox +0 - text_color цвет текста editbox. +308 - max максимальное кол-во текста которое можноввести (ответ на твой вопрос, обрати внимание на то что это значение должно быть меньше на 2 чем размер буффера!! Иначе у тебя будут затерты 2 байта следующие после буффера!) +hed - tex указатель на начало буффера +ed_focus - флаг(и0 в данном случае установить фокус этому Editbox'у - flags +53 - текущее значение размера size. его необходимо указывать, если тебе нужно уже отображать существующий текст. Или можно еще сделать так, ты указываешь, буфер с текстом, но тут ничего не пишешь, или 0, тогда, если человек начинает вводить свой, существующий текст уже будет автоматом затерт. +53 - положение курсора - говорим, что бы он находился в конце строчки на последним символе, больше это значение быть не должно, т.к. иначе глюки :))) + - тут расположен сам буффер, + текст. +hed db 'EDITBOX optimization and retype date 09.03.2007',0 ; итого 54 символа +rb 256 ; 256+54 =310 у меня указан размер 308 - 2 байта на систеиные нужды (по идее должно хватать одного, но где - то есть косяк в коде) + +2) Изменять положение при изменении размеров окна. Вообще это не задача editbox, но это достаточно просто сделать, +.width dd width +.left dd left +.top dd top +Вот часть стуктуры. + +;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +;DATA данные +editboxes: +edit1 edit_box 168,5,10,0xffffff,0x6a9480,0,0,0,99,ed_buffer.2,ed_figure_only +edit2 edit_box 250,5,30,0xffffff,0x6a9480,0,0xAABBCC,0,308,hed,ed_focus,53,53 +edit3 edit_box 35,5,50,0xffffff,0x6a9480,0,0,0,9,ed_buffer.3,ed_figure_only +edit4 edit_box 16,5,70,0xffffff,0x6a9480,0,0,0,1,ed_buffer.4,ed_figure_only +editboxes_end: + + +А это пример инициализации +Итак получаем +lea eax, editboxes - в еах указатель на данные боксов. +Далее вносим по адресу +mov dword [eax], новое значение width +mov dword [eax+4], новое значение left +mov dword [eax+8], новое значение top + +Это все для первого editbox +для второго +add eax,ed_struc_size +; это размерность в байтах записи длинны одного editbox +И снова +mov dword [eax], новое значение width +mov dword [eax+4], новое значение left +mov dword [eax+8], новое значение top +Это уже для второго editbox + +И так далее ))). +Надеюсь я для тебя прояснил общий алгоритм изменения \ No newline at end of file diff --git a/programs/develop/examples/editbox/trunk/History b/programs/develop/examples/editbox/trunk/History new file mode 100644 index 0000000000..31aee4fca6 --- /dev/null +++ b/programs/develop/examples/editbox/trunk/History @@ -0,0 +1,30 @@ +История и копирайты. Распространяется по лицензии GPL + +P.S. История пишится мертвыми зайцами..... (R) Магазинчик БО +Да, еще кто - то спрашивал пишут ли программеры на асме нецензурно - конечно нет, но да бы не разочаровать публику .... +You bunny wrote ..... в продолжении все тех же кроликов, которые все пишут и пишут ...... +Это не много фольклера, связанное, с тем, что написание программ длинные и муторный процесс, и он не обходиться без выражений подобного содержания, но не попадающего в коментарии и основной код..... + +Теплов Алексей Юрьевич aka +; 19.04.2007 Общая доработка макросов +; 14.04.2007 Исправлено управление мышкой, при удалении последнего символа в буфере пишеться 0 (спасибо Mario79) +; 04.04.2007 Модернизировал систему выделения, существенно переделано управление и обработка, добавленно блокирования обработки других боксов, во время выделения мышкой текста, для этого в текст программы необходимо добавить идентификатор бокса т.е. dd 0x0 и в него будет помещаться укаатель на editbox +; 30.03.2007 Переделал процедуру выделения, теперь текст выделяется только только мышкой +; 09.03.2007 Дописал управление mouse + shift выделение и перемещение +; 07.03.2007 Дописал управление с shift home + end усправил несколько багов +; 06.03.2007 Переписал полностью алгоритм управления shift +; 15.02.2007 улучшение снятия выделения и перерисовки очищаемой области, значительно приятнее работает компонент +; 13.02.2007 убрал по возможности мерцание, улучшена обработка перерисовки фона +; добавил фитчу внесения 0х0 по адресу ed_size иначе у Maxxx32 были несостыковки в коде. Причина в том, что оптимизация была сведена к тому, что я не чистил символы в буфере, когда удалял, я просто их не выводил, и потом, когда вносился новый символ, он попросту затирал уже имеющийся. Если бы, программа обрабатывала конец строки по ed_size, проблемы не возникло. Но сейчас этот недостаток исправлен. +; 01.02.2007 доработка edit_box, исправил баги. +; 26.01.2007 нормальная работа компанента исправил фукцию .check_offset +; 24.01.2007 пофиксел баги вызваные не правильным кодом )). +; 22.01.2007 избавился от глюков при работе с выделением и удаление, корректная работа клавишей del & backspase +; 20.01.2007 реализовал выделение текста по shift +; 12.12.2006 реализовал поддержку кнопки insert и сегодя компонент почти работает!!!! +; 07.12.2006 продолжается работа над переработкой компонента,изменениям подверглись многие функции, переработан вывод текста, а така же алгоритм внесения символов. +; 03.09.2006 по возможности отказался от 16 битной арифметики, добавил новые баги +; 09.08.2006 произведена оптимизация работы конпок DEL и Backspace, уменьшен размер выполняемого кода. +; 21.07.2006 добавлена функция кнопки Del, теперь можно удалять символы при помощи данной клавиши +; после этого времени указанного ниже, доработкой компонента занимался я... +; Автор: Евтихов Максим (Maxxxx32) email: maxxxxm@mail.ru дата релиза 13.06.06 10:40 diff --git a/programs/develop/examples/editbox/trunk/editbox.asm b/programs/develop/examples/editbox/trunk/editbox.asm index 0e5bdfcdf6..ca361458d7 100644 --- a/programs/develop/examples/editbox/trunk/editbox.asm +++ b/programs/develop/examples/editbox/trunk/editbox.asm @@ -1,5 +1,4 @@ -; 30.03.2007 Їа®Ё§ўҐ¤Ґ­  ®ЇвЁ¬Ё§ жЁп а Ў®вл Є®­Ї®Є DEL Ё Backspace? 㬥­м襭 а §¬Ґа ўлЇ®«­пҐ¬®Ј® Є®¤ . -;ќд䥪⨢­®Ґ Їа®Ја ¬¬Ёа®ў ­ЁҐ ў KOLIBRI +;ђ бЇа®бва ­пҐвбп Ї® «ЁжҐ­§ЁЁ GPL SEE YOU File FAQ.txt and HISTORY. Good Like! ;ЋЇвЁ¬Ё§Ёа®ў ­­л© Є®¬Ї®­Ґ­в EditBox (€б室­л© ў аЁ ­в ®в Maxxxx32) ;ЋЇвЁ¬Ё§ жЁп Є®¬ ­¤. ; - ’ҐЇ«®ў Ђ«ҐЄбҐ© www.lrz.land.ru @@ -16,7 +15,7 @@ use32 ; dd 0x0,0x0 ; гЄ § вҐ«м ­  бва®Єг б Ї а ¬Ґва ¬Ё. include 'macros.inc' include 'editbox.inc' - use_edit_box + use_edit_box structure_of_potock,22,5 ;ЋЎ« бвм Є®¤  start: ;’®зЄ  ўе®¤  ў Їа®Ја ¬¬г mcall 40,0x27 ;гбв ­®ўЁвм ¬ бЄг ¤«п ®¦Ё¤ Ґ¬ле б®ЎлвЁ© @@ -24,8 +23,7 @@ start: ; red_win: call draw_window ;ЇҐаў®­ з «м­® ­Ґ®Ўе®¤Ё¬® ­ аЁб®ў вм ®Є­® still: ;®б­®ў­®© ®Ўа Ў®взЁЄ - mcall 10 ;Ћ¦Ё¤ вм б®ЎлвЁп ў вҐзҐ­ЁҐ 2 ¬Ё««ЁбҐЄг­¤ - + mcall 10 ;Ћ¦Ё¤ вм б®ЎлвЁп cmp al,0x1 ;Ґб«Ё Ё§¬Ґ­Ё«®бм Ї®«®¦Ґ­ЁҐ ®Є­  jz red_win cmp al,0x2 ;Ґб«Ё ­ ¦ в  Є« ўЁи  в® ЇҐаҐ©вЁ @@ -50,7 +48,7 @@ key: draw_window: ;аЁб®ў ­ЁҐ ®Є­  ЇаЁ«®¦Ґ­Ёп mcall 12,1 mcall 0,(50*65536+390),(30*65536+200),0xb3AABBCC,0x805080DD,hed - draw_edit_boxes editboxes,editboxes_end ;аЁб®ў ­ЁҐ edit box'®ў + draw_edit_boxes editboxes,editboxes_end,use_f9,structure_of_potock ;аЁб®ў ­ЁҐ edit box'®ў mcall 12,2 ret ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -63,7 +61,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 13.04.2007',0 +hed db 'EDITBOX optimization and retype date 19.04.2007',0 rb 256 ed_buffer: ;.1: rb 514;256