git-svn-id: svn://kolibrios.org@1640 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Alexey Teplov ( 2010-10-03 17:24:53 +00:00
parent e32fd4f0e3
commit abbc09c677
2 changed files with 60 additions and 58 deletions

View File

@ -103,48 +103,49 @@ macro edit_boxes_set_sys_color start,end,color_table
} }
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Basic macros for use CheckBox ; ;Basic macros for use CheckBox ;
;Last change 25.09.2010
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ch_struc_size=36 ;à §¬¥à áâàãªâãàë ch_struc_size=36
ch_flag_en=10b ;ä« £ ãáâ ­®¢«¥­­®£® 祪 ¡®ªá . ch_flag_en=10b ;í«¥¬¥­â ¢ë¡à ­
ch_left equ [ebp] ;ª®à¤¨­ â  ­ ç «  à¨á®¢ ­¨ï ¯® å ch_left equ [edi] ;ª®®à¤¨­ â  ­ ç «  à¨á®¢ ­¨ï ¯® å
ch_top equ [ebp+2] ;ª®®à¤¨­ â  ­ ç «  à¨á®¢ ­¨ï ¯® ã ch_top equ [edi+2] ;ª®®à¤¨­ â  ­ ç «  à¨á®¢ ­¨ï ¯® ã
ch_text_margin equ [ebp+4] ;=4 à ááâ®ï­¨¥ ®â ¯àאַ㣮«ì­¨ª  祪 ¡®ªá  ¤® ­ ¤¯¨á¨ ch_text_margin equ [edi+4] ;=4 à ááâ®ï­¨¥ ®â ¯àאַ㣮«ì­¨ª  祪 ¡®ªá  ¤® ­ ¤¯¨á¨
ch_size equ [ebp+8] ;12 à §¬¥à ª¢ ¤à â  祪 ¡®ªá  ch_size equ [edi+8] ;12 à §¬¥à ª¢ ¤à â  祪 ¡®ªá 
ch_color equ [ebp+12] ;梥⠢­ãâਠcheckbox ch_color equ [edi+12] ;梥⠢­ãâਠcheckbox
ch_border_color equ [ebp+16] ; or [edi+4] ;梥â à ¬ª¨ checkbox ¥¥ ¬®¦­® § ¤ âì á ¬®áâ®ï⥫쭮 ch_border_color equ [edi+16] ; or [edi+4] ;梥â à ¬ª¨ checkbox ¥¥ ¬®¦­® § ¤ âì á ¬®áâ®ï⥫쭮
ch_text_color equ [ebp+20] ;[edi+4] ;梥â ⥪áâ  ch_text_color equ [edi+20] ;[edi+4] ;梥â ⥪áâ 
ch_text_ptr equ [ebp+24] ;㪠§ â¥«ì ­  ­ ç «® ⥪á⮢®© áâப¨ ch_text_ptr equ [edi+24] ;㪠§ â¥«ì ­  ­ ç «® ⥪á⮢®© áâப¨
ch_text_length equ [ebp+28] ;¤«¨­­  áâப¨ ch_text_length equ [edi+28]
ch_flags equ [ebp+32] ;ä« £¨ ch_flags equ [edi+32] ;ä« £¨
struc check_box left,top,ch_text_margin,ch_size,color,border_color,text_color,text,ch_text_length,flags struc check_box left,top,ch_text_margin,ch_size,color,border_color,text_color,text,ch_text_length,flags
{ ;áâàãªâãà  ¯ à ¬¥â஢ ¤«ï 祪 ¡®ªá  { ;áâàãªâãà  ¯ à ¬¥â஢ ¤«ï 祪 ¡®ªá 
.left: dw left ;+0 ¯®«®¦¥­¨¥ ¯® å .left: dw left ;+0 ¯®«®¦¥­¨¥ ¯® å
.top: dw top ;+2 ¯®«®¦¥­¨¥ ¯® ã .top: dw top ;+2 ¯®«®¦¥­¨¥ ¯® ã
.ch_text_margin: dd ch_text_margin ;à ááâ®ï­¨¥ ®â ¯àאַ㣮«ì­¨ª  祪 ¡®ªá  ¤® ­ ¤¯¨á¨ .ch_text_margin: dd ch_text_margin ;à ááâ®ï­¨¥ ®â ¯àאַ㣮«ì­¨ª  祪 ¡®ªá  ¤® ­ ¤¯¨á¨
.ch_size: dd ch_size ;à §¬¥à ª¢ ¤à â  祪 ¡®ªá , ¤«ï ¯à¨¬¥à  12 .ch_size: dd ch_size ;à §¬¥à ª¢ ¤à â  祪 ¡®ªá , ¤«ï ¯à¨¬¥à  12
.color: dd color ;梥⠢­ãâਠ祪¡®ªá  .color: dd color ;梥⠢­ãâਠ祪¡®ªá 
.border_color: dd border_color ;梥â à ¬ª¨ .border_color: dd border_color ;梥â à ¬ª¨
.text_color: dd text_color ;梥⠭ ¤¯¨á¨ .text_color: dd text_color ;梥⠭ ¤¯¨á¨
.text: dd text ; ¤à¥á ¢ ª®¤¥ ¯à®£à ¬¬ë £¤¥ à á¯®«®¦¥­ ⥪áâ .text: dd text ; ¤à¥á ¢ ª®¤¥ ¯à®£à ¬¬ë £¤¥ à á¯®«®¦¥­ ⥪áâ
.ch_text_length: dd ch_text_length ;¤«¨­­  áâப¨ á ᨬ¢®« ¬¨ .ch_text_length: dd ch_text_length ;¤«¨­­  áâப¨ á ᨬ¢®« ¬¨
.flags: dd flags+0 ; ä« £¨ .flags: dd flags+0 ; ä« £¨
} }
macro check_boxes_set_sys_color start,end,color_table macro check_boxes_set_sys_color start,end,color_table
{ {
mov edi,start mov edi,start
mov ecx,((end-start)/ch_struc_size) mov ecx,((end-start)/ch_struc_size)
mov esi,color_table mov esi,color_table
@@: @@:
push dword [esi+32] ;梥â ⥪áâ  ¢ à ¡®ç¥© ®¡« á⨠®ª­  ; push dword [esi+20] ;梥â à ¡®ç¥© ®¡« á⨠®ª­ 
pop dword ch_text_color ; pop dword ch_color
push dword [esi+36] ;梥⠣à ä¨ª¨ ¢ ®ª­¥ (à §¤¥«¨â¥«ì­ë¥ «¨­¨¨ ¨ â.¯.) push dword [esi+32] ;梥â ⥪áâ  ¢ à ¡®ç¥© ®¡« á⨠®ª­ 
pop dword ch_border_color pop dword ch_text_color
add edi,ch_struc_size push dword [esi+36] ;梥⠣à ä¨ª¨ ¢ ®ª­¥ (à §¤¥«¨â¥«ì­ë¥ «¨­¨¨ ¨ â.¯.)
loop @b pop dword ch_border_color
add edi,ch_struc_size
loop @b
} }
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@ -6,44 +6,45 @@ macro use_checkbox_draw
{ {
check_box_draw: check_box_draw:
pusha ;сохраним все регистры pusha ;сохраним все регистры
mov edi,dword [esp+36] mov edi,dword [esp+36]
mov eax,13 mov eax,13
movzx ebx,word ch_left movzx ebx,word ch_left
shl ebx,16 shl ebx,16
add ebx,ch_size add ebx,ch_size
mov ecx,ch_top mov ecx,ch_top
shl ecx,16 shl ecx,16
add ecx,dword ch_size add ecx,dword ch_size
mov edx,dword ch_border_color mov edx,dword ch_border_color
mcall ;рисуем рамку mcall ;рисуем рамку
mov edx,dword ch_color mov edx,dword ch_color
add ebx,1 shl 16 - 2 add ebx,1 shl 16 - 2
add ecx,1 shl 16 - 2 add ecx,1 shl 16 - 2
mcall ;закрашиваем внутренности чекбокса mcall ;закрашиваем внутренности чекбокса
test dword ch_flags,2 ;достать значение бита из переменной и поместить в флаг CF test dword ch_flags,2 ;достать значение бита из переменной и поместить в флаг CF
jz @f ;в если CF=1, то выполним следующую процедуру иначе перейти на нижнюю @@ jz @f ;в если CF=1, то выполним следующую процедуру иначе перейти на нижнюю @@
call check_box_draw_ch ;нарисовать включенный чек бокс call check_box_draw_ch ;нарисовать включенный чек бокс
@@: @@:
;---------------------------- ;----------------------------
;расчет куда будет произведен вывод текста ;расчет куда будет произведен вывод текста
;---------------------------- ;----------------------------
movzx ebx,word ch_left ;загрузить значение х для чек бокса movzx ebx,word ch_left ;загрузить значение х для чек бокса
add ebx,dword ch_size add ebx,dword ch_size
add ebx,dword ch_text_margin ;добавить размер стороны и расстояние на котором начнется вывод текста add ebx,dword ch_text_margin;добавить размер стороны и расстояние на котором начнется вывод текста
shl ebx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536) shl ebx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536)
mov bx,word ch_top ;загрузим значение по y mov bx,word ch_top ;загрузим значение по y
add ebx,ch_size add ebx,ch_size
mov ecx,dword ch_text_color ;загрузим цвет надписи + flags mov ecx,dword ch_text_color ;загрузим цвет надписи + flags
sub ebx,7 ;добавим значение длины стороны -9+2 sub ebx,7 ;добавим значение длины стороны -9+2
mov edx,dword ch_text_ptr ;укажем адрес от куда нужно выводить строку mov edx,dword ch_text_ptr ;укажем адрес от куда нужно выводить строку
mov esi,dword ch_text_length mov esi,dword ch_text_length
mov eax,4 ;внесем в eax значение вывода надписи на канву ;внесем в eax значение вывода надписи на канву
mcall ;Вывод mov eax,4
popa ;восстановить значения регистров из стека mcall ;Вывод
ret 4 ;выйдем из процедуры popa ;восстановить значения регистров из стека
ret 4 ;выйдем из процедуры
check_box_clear_ch: ;очистка чек бокса check_box_clear_ch: ;очистка чек бокса
mov edx,dword ch_color ;цвет внутри чек бокса mov edx,dword ch_color ;цвет внутри чек бокса
@ -53,7 +54,7 @@ check_box_draw_ch: ;
@@: @@:
movzx ebx,word ch_left ;загрузить координату по х movzx ebx,word ch_left ;загрузить координату по х
mov eax,dword ch_size mov eax,dword ch_size
mov di,ax mov bp,ax
shr eax,2 shr eax,2
push ax push ax