Modify macros and add History, FAQ.txt

git-svn-id: svn://kolibrios.org@468 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Alexey Teplov ( 2007-04-20 04:19:47 +00:00
parent 69252dd603
commit 016062e7e6
4 changed files with 305 additions and 121 deletions

View File

@ -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
}

View 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
И так далее ))).
Надеюсь я для тебя прояснил общий алгоритм изменения

View 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

View File

@ -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