forked from KolibriOS/kolibrios
Modify macros and add History, FAQ.txt
git-svn-id: svn://kolibrios.org@468 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
69252dd603
commit
016062e7e6
@ -1,72 +1,15 @@
|
||||
; <Lrz> 04.04.2007 ˆá¯à ¢«¥® ã¯à ¢«¥¨¥ ¬ë誮©, ¯à¨ 㤠«¥¨¨ ¯®á«¥¤¥£® ᨬ¢®« ¢ ¡ãä¥à¥ ¯¨è¥âìáï 0 (ᯠᨡ® Mario79)
|
||||
; <Lrz> 04.04.2007 Œ®¤¥à¨§¨à®¢ « á¨á⥬㠢뤥«¥¨ï, áãé¥á⢥® ¯¥à¥¤¥« ® ã¯à ¢«¥¨¥ ¨ ®¡à ¡®âª , ¤®¡ ¢«¥® ¡«®ª¨à®¢ ¨ï ®¡à ¡®âª¨ ¤àã£¨å ¡®ªá®¢, ¢® ¢à¥¬ï ¢ë¤¥«¥¨ï ¬ë誮© ⥪áâ , ¤«ï í⮣® ¢ ⥪áâ ¯à®£à ¬¬ë ¥®¡å®¤¨¬® ¤®¡ ¢¨âì ¨¤¥â¨ä¨ª â®à ¡®ªá â.¥. dd 0x0 ¨ ¢ ¥£® ¡ã¤¥â ¯®¬¥é âìáï 㪠⥫ì editbox
|
||||
; <Lrz> 30.03.2007 <20>¥à¥¤¥« « ¯à®æ¥¤ãà㠢뤥«¥¨ï, ⥯¥àì ⥪á⠢뤥«ï¥âáï ⮫쪮 ⮫쪮 ¬ë誮©
|
||||
; <Lrz> 09.03.2007 „®¯¨á « ã¯à ¢«¥¨¥ mouse + shift ¢ë¤¥«¥¨¥ ¨ ¯¥à¥¬¥é¥¨¥
|
||||
; <Lrz> 07.03.2007 „®¯¨á « ã¯à ¢«¥¨¥ á shift home + end ãá¯à ¢¨« ¥áª®«ìª® ¡ £®¢
|
||||
; <Lrz> 06.03.2007 <20>¥à¥¯¨á « ¯®«®áâìî «£®à¨â¬ ã¯à ¢«¥¨ï shift
|
||||
; <Lrz> 15.02.2007 ã«ãç襨¥ áïâ¨ï ¢ë¤¥«¥¨ï ¨ ¯¥à¥à¨á®¢ª¨ ®ç¨é ¥¬®© ®¡« áâ¨, § ç¨â¥«ì® ¯à¨ï⥥ à ¡®â ¥â ª®¬¯®¥â
|
||||
; <Lrz> 13.02.2007 ã¡à « ¯® ¢®§¬®¦®á⨠¬¥àæ ¨¥, ã«ãçè¥ ®¡à ¡®âª ¯¥à¥à¨á®¢ª¨ ä®
|
||||
; ¤®¡ ¢¨« ä¨âçã ¢¥á¥¨ï 0å0 ¯® ¤à¥áã ed_size ¨ ç¥ ã Maxxx32 ¡ë«¨ ¥á®áâ몮¢ª¨ ¢ ª®¤¥. <20>à¨ç¨ ¢ ⮬, çâ® ®¯â¨¬¨§ æ¨ï ¡ë« ᢥ¤¥ ª ⮬ã, çâ® ï ¥ ç¨á⨫ ᨬ¢®«ë ¢ ¡ãä¥à¥, ª®£¤ 㤠«ï«, ï ¯à®áâ® ¨å ¥ ¢ë¢®¤¨«, ¨ ¯®â®¬, ª®£¤ ¢®á¨«áï ®¢ë© ᨬ¢®«, ® ¯®¯à®áâã § â¨à « 㦥 ¨¬¥î騩áï. …᫨ ¡ë, ¯à®£à ¬¬ ®¡à ¡ âë¢ « ª®¥æ áâப¨ ¯® ed_size, ¯à®¡«¥¬ë ¥ ¢®§¨ª«®. <20>® ᥩç á íâ®â ¥¤®áâ ⮪ ¨á¯à ¢«¥.
|
||||
; <Lrz> 01.02.2007 ¤®à ¡®âª edit_box, ¨á¯à ¢¨« ¡ £¨.
|
||||
; <Lrz> 26.01.2007 ®à¬ «ì ï à ¡®â ª®¬¯ ¥â ¨á¯à ¢¨« äãªæ¨î .check_offset
|
||||
; <Lrz> 24.01.2007 ¯®ä¨ªá¥« ¡ £¨ ¢ë§¢ ë¥ ¥ ¯à ¢¨«ìë¬ ª®¤®¬ )).
|
||||
; <Lrz> 22.01.2007 ¨§¡ ¢¨«áï ®â £«îª®¢ ¯à¨ à ¡®â¥ á ¢ë¤¥«¥¨¥¬ ¨ 㤠«¥¨¥, ª®à४â ï à ¡®â ª« ¢¨è¥© del & backspase
|
||||
; <Lrz> 20.01.2007 ॠ«¨§®¢ « ¢ë¤¥«¥¨¥ ⥪áâ ¯® shift
|
||||
; <Lrz> 12.12.2006 ॠ«¨§®¢ « ¯®¤¤¥à¦ªã ª®¯ª¨ insert ¨ ᥣ®¤ï ª®¬¯®¥â ¯®çâ¨ à ¡®â ¥â!!!!
|
||||
; <Lrz> 07.12.2006 ¯à®¤®«¦ ¥âáï à ¡®â ¤ ¯¥à¥à ¡®âª®© ª®¬¯®¥â ,¨§¬¥¥¨ï¬ ¯®¤¢¥à£«¨áì ¬®£¨¥ äãªæ¨¨, ¯¥à¥à ¡®â ¢ë¢®¤ ⥪áâ , â ª ¦¥ «£®à¨â¬ ¢¥á¥¨ï ᨬ¢®«®¢.
|
||||
; <Lrz> 03.09.2006 ¯® ¢®§¬®¦®á⨠®âª § «áï ®â 16 ¡¨â®© à¨ä¬¥â¨ª¨, ¤®¡ ¢¨« ®¢ë¥ ¡ £¨
|
||||
; <Lrz> 09.08.2006 ¯à®¨§¢¥¤¥ ®¯â¨¬¨§ æ¨ï à ¡®âë ª®¯®ª DEL ¨ Backspace, 㬥ìè¥ à §¬¥à ¢ë¯®«ï¥¬®£® ª®¤ .
|
||||
; <Lrz> 21.07.2006 ¤®¡ ¢«¥ äãªæ¨ï ª®¯ª¨ Del, ⥯¥àì ¬®¦® 㤠«ïâì ᨬ¢®«ë ¯à¨ ¯®¬®é¨ ¤ ®© ª« ¢¨è¨
|
||||
; €¢â®à: …¢â¨å®¢ Œ ªá¨¬ (Maxxxx32) email: maxxxxm@mail.ru
|
||||
; „ â ¯®á«¥¤¨å ¨§¬¥¥¨©: 13.06.06 10:40
|
||||
; <20> ¯¨è¨â¥ ¢ ¨á室®¬ ª®¤¥ ᢮¥© ¯à®£à ¬¬ë use_edit_box,
|
||||
; íâ® ¢áâ ¢¨â ¥®¡å®¤¨¬ë¥ ¯à®æ¥¤ãàë ¢ ª®¤ ¢ 襩 ¯à®£à ¬¬ë.
|
||||
; <20>à®æ¥¤ãàë:
|
||||
; edit_box.draw - ¯®« ï ¯¥à¥à¨á®¢ª ;
|
||||
; edit_box.key - ®¡à ¡®âª ª« ¢¨ âãàë;
|
||||
; edit_box.mouse - ®¡à ¡®âª ¬ëè¨;
|
||||
; edit_box.focus - ãáâ ®¢ª 䮪ãá ;
|
||||
; edit_box.blur - ¥£® à §¬ë¢ ¨¥;
|
||||
; edit_box.get_n - ¯®«ãç¨âì ª®«¨ç¥á⢮ ¯à®à¨á®¢ë¢ ¥¬ëå ᨬ¢®«®¢.
|
||||
; <20>ਠ¢ë§®¢¥ «î¡ëå ¨§ íâ¨å ¯à®æ¥¤ãà ¢ ॣ¨áâॠedi á«¥¤ã¥â
|
||||
; ®áâ ¢¨âì 㪠§ ⥫ì áâàãªâãàã.
|
||||
; <20>ਬ¥à áâàãªâãàë:
|
||||
; some_edit edit_box 100,10,30,0x00ffffff,0,0x00aaaaaa,0,255,some_edit_text
|
||||
; ¤«¨ , ¢ëá®â , ¢¥àå, 梥â ä® , 梥â à ¬ª¨, ¥á«¨ ¢ë¡à ,
|
||||
; 梥â à ¬ª¨, ¥á«¨ ¥ ¢ë¡à , ¬ ªá¨¬ «ì®¥ ª®«¨ç¥á⢮ ᨬ¢®«®¢,
|
||||
; 㪠§ â¥«ì ¡ãä¥à, £¤¥ ¡ã¤ãâ åà ¨âáï ᨬ¢®«ë. <20>ãä¥à ¤®«¦¥
|
||||
; ®ª 稢 âìáï ã«¥¬, ¯à¨¬¥à ¥á«¨ ¬ ªá¨¬ «ì®¥ ª®«¨ç¥á⢮ 255:
|
||||
; some_edit_text:
|
||||
; rb 256 ;255+1
|
||||
|
||||
; <20>ਬ¥à ¢ë§®¢ ¯à®æ¥¤ãàë:
|
||||
; mov edi,some_edit
|
||||
; call edit_box.draw
|
||||
|
||||
; <20>ਠ¢ë§®¢¥ ¯à®æ¥¤ãàë 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
|
||||
; <20>¥à¥¤ ¢ë§®¢®¬ ®¡à ¡®â稪 ¬ëè¨ á«¥¤ã¥â ¯à®¢¥à¨âì, ï¥âáï «¨ ®ª®
|
||||
; ªâ¨¢ë¬.
|
||||
; …᫨ 饫箪 ¬ëè¨ ¡ë« ¯à®©§¢¥¤¥ § ¯à¥¤¥« ¬¨ 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
|
||||
;;;;;;;;;;;;;;;;;;
|
||||
;<3B>®«ã稫¨ ª®®à¤¨ âë ¢ eax ¬ë誨, â.¥. ªã¤ ® ¯¥à¥¬¥á⨫ áì
|
||||
;<3B>¨á®¢ ¨¥ § ªà è¥ëå ¯àאַ㣮«ì¨ª®¢ ¨ ®ç¨á⪠¨å
|
||||
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 ;á®åà ¨¬ ®¢®¥ § 票¥
|
||||
;<3B>¨á®¢ ¨¥ § ªà è¥ëå ¯àאַ㣮«ì¨ª®¢ ¨ ®ç¨á⪠¨å
|
||||
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
|
||||
}
|
||||
@ -1241,3 +1200,13 @@ 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
|
||||
}
|
187
programs/develop/examples/editbox/trunk/FAQ.txt
Normal file
187
programs/develop/examples/editbox/trunk/FAQ.txt
Normal file
@ -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 - положение курсора - говорим, что бы он находился в конце строчки на последним символе, больше это значение быть не должно, т.к. иначе глюки :)))
|
||||
<DATA> - тут расположен сам буффер, + текст.
|
||||
hed db 'EDITBOX optimization and retype <Lrz> 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
|
||||
|
||||
И так далее ))).
|
||||
Надеюсь я для тебя прояснил общий алгоритм изменения
|
30
programs/develop/examples/editbox/trunk/History
Normal file
30
programs/develop/examples/editbox/trunk/History
Normal file
@ -0,0 +1,30 @@
|
||||
История и копирайты. Распространяется по лицензии GPL
|
||||
|
||||
P.S. История пишится мертвыми зайцами..... (R) Магазинчик БО
|
||||
Да, еще кто - то спрашивал пишут ли программеры на асме нецензурно - конечно нет, но да бы не разочаровать публику ....
|
||||
You bunny wrote ..... в продолжении все тех же кроликов, которые все пишут и пишут ......
|
||||
Это не много фольклера, связанное, с тем, что написание программ длинные и муторный процесс, и он не обходиться без выражений подобного содержания, но не попадающего в коментарии и основной код.....
|
||||
|
||||
Теплов Алексей Юрьевич aka <Lrz>
|
||||
; <Lrz> 19.04.2007 Общая доработка макросов
|
||||
; <Lrz> 14.04.2007 Исправлено управление мышкой, при удалении последнего символа в буфере пишеться 0 (спасибо Mario79)
|
||||
; <Lrz> 04.04.2007 Модернизировал систему выделения, существенно переделано управление и обработка, добавленно блокирования обработки других боксов, во время выделения мышкой текста, для этого в текст программы необходимо добавить идентификатор бокса т.е. dd 0x0 и в него будет помещаться укаатель на editbox
|
||||
; <Lrz> 30.03.2007 Переделал процедуру выделения, теперь текст выделяется только только мышкой
|
||||
; <Lrz> 09.03.2007 Дописал управление mouse + shift выделение и перемещение
|
||||
; <Lrz> 07.03.2007 Дописал управление с shift home + end усправил несколько багов
|
||||
; <Lrz> 06.03.2007 Переписал полностью алгоритм управления shift
|
||||
; <Lrz> 15.02.2007 улучшение снятия выделения и перерисовки очищаемой области, значительно приятнее работает компонент
|
||||
; <Lrz> 13.02.2007 убрал по возможности мерцание, улучшена обработка перерисовки фона
|
||||
; добавил фитчу внесения 0х0 по адресу ed_size иначе у Maxxx32 были несостыковки в коде. Причина в том, что оптимизация была сведена к тому, что я не чистил символы в буфере, когда удалял, я просто их не выводил, и потом, когда вносился новый символ, он попросту затирал уже имеющийся. Если бы, программа обрабатывала конец строки по ed_size, проблемы не возникло. Но сейчас этот недостаток исправлен.
|
||||
; <Lrz> 01.02.2007 доработка edit_box, исправил баги.
|
||||
; <Lrz> 26.01.2007 нормальная работа компанента исправил фукцию .check_offset
|
||||
; <Lrz> 24.01.2007 пофиксел баги вызваные не правильным кодом )).
|
||||
; <Lrz> 22.01.2007 избавился от глюков при работе с выделением и удаление, корректная работа клавишей del & backspase
|
||||
; <Lrz> 20.01.2007 реализовал выделение текста по shift
|
||||
; <Lrz> 12.12.2006 реализовал поддержку кнопки insert и сегодя компонент почти работает!!!!
|
||||
; <Lrz> 07.12.2006 продолжается работа над переработкой компонента,изменениям подверглись многие функции, переработан вывод текста, а така же алгоритм внесения символов.
|
||||
; <Lrz> 03.09.2006 по возможности отказался от 16 битной арифметики, добавил новые баги
|
||||
; <Lrz> 09.08.2006 произведена оптимизация работы конпок DEL и Backspace, уменьшен размер выполняемого кода.
|
||||
; <Lrz> 21.07.2006 добавлена функция кнопки Del, теперь можно удалять символы при помощи данной клавиши
|
||||
; после этого времени указанного ниже, доработкой компонента занимался я...
|
||||
; Автор: Евтихов Максим (Maxxxx32) email: maxxxxm@mail.ru дата релиза 13.06.06 10:40
|
@ -1,5 +1,4 @@
|
||||
; <Lrz> 30.03.2007 ¯à®¨§¢¥¤¥ ®¯â¨¬¨§ æ¨ï à ¡®âë ª®¯®ª DEL ¨ Backspace? 㬥ìè¥ à §¬¥à ¢ë¯®«ï¥¬®£® ª®¤ .
|
||||
;<3B>ä䥪⨢®¥ ¯à®£à ¬¬¨à®¢ ¨¥ ¢ KOLIBRI
|
||||
;<3B> á¯à®áâà ï¥âáï ¯® «¨æ¥§¨¨ GPL SEE YOU File FAQ.txt and HISTORY. Good Like!
|
||||
;Ž¯â¨¬¨§¨à®¢ ë© ª®¬¯®¥â EditBox (ˆáå®¤ë© ¢ ਠ⠮â Maxxxx32)
|
||||
;Ž¯â¨¬¨§ æ¨ï ª®¬ ¤.
|
||||
;<Lrz> - ’¥¯«®¢ €«¥ªá¥© 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 <Lrz> date 13.04.2007',0
|
||||
hed db 'EDITBOX optimization and retype <Lrz> date 19.04.2007',0
|
||||
rb 256
|
||||
ed_buffer:
|
||||
;.1: rb 514;256
|
||||
|
Loading…
Reference in New Issue
Block a user