Support new flags for checkbox.

git-svn-id: svn://kolibrios.org@1660 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Alexey Teplov ( 2010-10-15 07:08:53 +00:00
parent 635692c4f4
commit 425d79e6aa
3 changed files with 95 additions and 10 deletions

View File

@ -107,6 +107,9 @@ macro edit_boxes_set_sys_color start,end,color_table
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ch_struc_size=36 ;размер структуры ch_struc_size=36 ;размер структуры
ch_flag_en=10b ;флаг установленного чек бокса. ch_flag_en=10b ;флаг установленного чек бокса.
ch_flag_top=0x0 ;флаг расположения текста вверху т.е. 3-й бит
ch_flag_middle=100b ;флаг расположения текста в центре т.е. 4-й бит.
ch_flag_bottom=1000b ;флаг расположения текста в низу т.е. по умолчанию принимается значение внизу т.е. отсуствие 3-го и 4-го бита
ch_left_s equ [ebp] ;кордината начала рисования по х ch_left_s equ [ebp] ;кордината начала рисования по х
ch_top_s equ [ebp+4] ;координата начала рисования по у ch_top_s equ [ebp+4] ;координата начала рисования по у
@ -131,6 +134,42 @@ struc check_box left_s,top_s,ch_text_margin,color,border_color,text_color,text,f
.size_of_str: dd 0x0 ;длинна строки, вычисляется при инициализации компонента .size_of_str: dd 0x0 ;длинна строки, вычисляется при инициализации компонента
} }
;Макрос проверки щелчка мышки над группой checkboxes.
macro init_checkboxes start,end
{
mov ebp,start
mov ecx,((end-start)/ch_struc_size)
@@:
push ebp ;указатель на первый checkbox
call [check_box_mouse] ;макрос проверки мышки над checkbox'ом
add ebp,ch_struc_size
loop @b
}
;Макрос отрисовки группы checkboxes.
macro checkboxes_draw start,end
{
mov ebp,start
mov ecx,((end-start)/ch_struc_size)
@@:
push ebp ;указатель на первый checkbox
call [check_box_draw] ;нарисовать checkbox
add ebp,ch_struc_size
loop @b
}
;Макрос отрисовки группы checkboxes.
macro checkboxes_draw start,end
{
mov ebp,start
mov ecx,((end-start)/ch_struc_size)
@@:
push ebp ;указатель на первый checkbox
call [check_box_draw] ;нарисовать checkbox
add ebp,ch_struc_size
loop @b
}
macro check_boxes_set_sys_color start,end,color_table macro check_boxes_set_sys_color start,end,color_table
{ {
mov ebp,start mov ebp,start

View File

@ -68,6 +68,15 @@ err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i
push dword check3 push dword check3
call [init_checkbox] call [init_checkbox]
push dword check4
call [init_checkbox]
push dword check5
call [init_checkbox]
push dword check6
call [init_checkbox]
window: window:
call draw_window ;ïåðâîíà÷àëüíî íåîáõîäèìî íàðèñîâàòü îêíî call draw_window ;ïåðâîíà÷àëüíî íåîáõîäèìî íàðèñîâàòü îêíî
@ -91,6 +100,16 @@ still: ;
call [check_box_mouse] call [check_box_mouse]
push dword check4
call [check_box_mouse]
push dword check5
call [check_box_mouse]
push dword check6
call [check_box_mouse]
jmp still ;åñëè íè÷åãî èç ïåðå÷èñëåííîãî òî ñíîâà â öèêë jmp still ;åñëè íè÷åãî èç ïåðå÷èñëåííîãî òî ñíîâà â öèêë
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
button: button:
@ -118,6 +137,15 @@ draw_window: ;
push dword check3 push dword check3
call [check_box_draw] call [check_box_draw]
push dword check4
call [check_box_draw]
push dword check5
call [check_box_draw]
push dword check6
call [check_box_draw]
mcall 12,2 mcall 12,2
ret ret
@ -151,16 +179,22 @@ aCheck_box_draw db 'check_box_draw',0
aCheck_box_mouse db 'check_box_mouse',0 aCheck_box_mouse db 'check_box_mouse',0
aVersion_ch db 'version_ch',0 aVersion_ch db 'version_ch',0
;--------------------------------------------------------------------- ;---------------------------------------------------------------------
check1 check_box (20 shl 16 + 12),(45 shl 16 + 12),6,0xC0AABBCC,0,0x80000000,check_text,ch_flag_en check1 check_box (10 shl 16 + 12),(10 shl 16 + 12),6,0xC0AABBCC,0,0x80000000,check_text,ch_flag_en
check2 check_box (20 shl 16 + 22),(60 shl 16 + 12),6,0xC0AABBCC,0,0x80000000,check_text2 check2 check_box (10 shl 16 + 22),(25 shl 16 + 12),6,0xC0AABBCC,0,0x80000000,check_text2
check3 check_box (20 shl 16 + 12),(75 shl 16 + 22),6,0xC0AABBCC,0,0x80000000,check_text3 check3 check_box (10 shl 16 + 12),(40 shl 16 + 22),6,0xC0AABBCC,0,0x80000000,check_text3
check4 check_box (10 shl 16 + 12),(70 shl 16 + 22),6,0xC0AABBCC,0,0x80000000,check_text4,ch_flag_top
check5 check_box (10 shl 16 + 12),(100 shl 16 + 22),6,0xC0AABBCC,0,0x80000000,check_text5,ch_flag_middle
check6 check_box (10 shl 16 + 12),(130 shl 16 + 22),6,0xC0AABBCC,0,0x80000000,check_text6,ch_flag_bottom
;--------------------------------------------------------------------- ;---------------------------------------------------------------------
hed db 'CheckBox Exemples <Lrz> date 12.10.2010',0 hed db 'CheckBox Exemples <Lrz> date 15.10.2010',0
hed_end: hed_end:
;--------------------------------------------------------------------- ;---------------------------------------------------------------------
check_text db 'First checkbox',0 check_text db 'First checkbox, set flag ch_flag_en',0
check_text2 db 'Second checkbox',0 check_text2 db 'Second checkbox,not set any flag',0
check_text3 db 'Number 3 checkbox',0 check_text3 db 'Number 3 checkbox, not set any flag',0
check_text4 db 'Set flag is ch_flag_top',0
check_text5 db 'Set flag is ch_flag_middle',0
check_text6 db 'Set flag is ch_flag_bottom',0
;--------------------------------------------------------------------- ;---------------------------------------------------------------------
MEM_END: MEM_END:
cur_dir_path rb 1024 cur_dir_path rb 1024

View File

@ -58,12 +58,24 @@ check_box_draw:
; Оптимизация для ЦП ; Оптимизация для ЦП
mov ebx,dword ch_left_s ;загрузить значение (х shl 16 + длинна) для чек бокса mov ebx,dword ch_left_s ;загрузить значение (х shl 16 + длинна) для чек бокса
mov eax,dword ch_top_s ;загрузим значение по (y shl 16 + длинна) для чек бокса mov eax,dword ch_top_s ;загрузим значение по (y shl 16 + длинна) для чек бокса
mov ecx,eax
add ebx,dword ch_text_margin ;добавим размер стороны и расстояние на котором начнется вывод текста add ebx,dword ch_text_margin ;добавим размер стороны и расстояние на котором начнется вывод текста
shr eax,16 ;сдвинем на 16 разрядов в лево (умножим на 65536) shr eax,16 ;сдвинем на 16 разрядов в право (разделим на 65536) в ax верхная точка
shl ebx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536) shl ebx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536)
add eax,dword ch_top_s ;cкорректируем позицию Х. Т.е. сейчас в верхней части ebx у нас точка начала вывода текста по Y
sub ecx,8 ;корретировка учитываем высоту шрифта
test dword ch_flags,ch_flag_bottom ;проверим, нужно ли выводить вверху надпись
jnz .bottom
test dword ch_flags,ch_flag_middle ;проверим, нужно ли выводить в центр надпись
jz .top ;остался только top
shr cx,1 ;разделим на 2
.bottom:
add ax,cx
.top:
add ebx,dword ch_left_s ;cкорректируем позицию Х. Т.е. сейчас в верхней части ebx у нас точка начала вывода текста по Х add ebx,dword ch_left_s ;cкорректируем позицию Х. Т.е. сейчас в верхней части ebx у нас точка начала вывода текста по Х
sub ax,7 ;внесем смещение для y
mov bx,ax mov bx,ax
;ebx х shl 16 +y координаты вывода строчки ;ebx х shl 16 +y координаты вывода строчки