forked from KolibriOS/kolibrios
Support new flags for checkbox.
git-svn-id: svn://kolibrios.org@1660 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
635692c4f4
commit
425d79e6aa
@ -107,6 +107,9 @@ macro edit_boxes_set_sys_color start,end,color_table
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
ch_struc_size=36 ;размер структуры
|
||||
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_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 ;длинна строки, вычисляется при инициализации компонента
|
||||
}
|
||||
|
||||
;Макрос проверки щелчка мышки над группой 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
|
||||
{
|
||||
mov ebp,start
|
||||
|
@ -68,6 +68,15 @@ err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i
|
||||
push dword check3
|
||||
call [init_checkbox]
|
||||
|
||||
push dword check4
|
||||
call [init_checkbox]
|
||||
|
||||
push dword check5
|
||||
call [init_checkbox]
|
||||
|
||||
push dword check6
|
||||
call [init_checkbox]
|
||||
|
||||
|
||||
window:
|
||||
call draw_window ;ïåðâîíà÷àëüíî íåîáõîäèìî íàðèñîâàòü îêíî
|
||||
@ -91,6 +100,16 @@ still: ;
|
||||
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 ;åñëè íè÷åãî èç ïåðå÷èñëåííîãî òî ñíîâà â öèêë
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
button:
|
||||
@ -118,6 +137,15 @@ draw_window: ;
|
||||
push dword check3
|
||||
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
|
||||
ret
|
||||
@ -151,16 +179,22 @@ aCheck_box_draw db 'check_box_draw',0
|
||||
aCheck_box_mouse db 'check_box_mouse',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
|
||||
check2 check_box (20 shl 16 + 22),(60 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
|
||||
check1 check_box (10 shl 16 + 12),(10 shl 16 + 12),6,0xC0AABBCC,0,0x80000000,check_text,ch_flag_en
|
||||
check2 check_box (10 shl 16 + 22),(25 shl 16 + 12),6,0xC0AABBCC,0,0x80000000,check_text2
|
||||
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:
|
||||
;---------------------------------------------------------------------
|
||||
check_text db 'First checkbox',0
|
||||
check_text2 db 'Second checkbox',0
|
||||
check_text3 db 'Number 3 checkbox',0
|
||||
check_text db 'First checkbox, set flag ch_flag_en',0
|
||||
check_text2 db 'Second checkbox,not set any flag',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:
|
||||
cur_dir_path rb 1024
|
||||
|
@ -58,12 +58,24 @@ check_box_draw:
|
||||
; Оптимизация для ЦП
|
||||
mov ebx,dword ch_left_s ;загрузить значение (х shl 16 + длинна) для чек бокса
|
||||
mov eax,dword ch_top_s ;загрузим значение по (y shl 16 + длинна) для чек бокса
|
||||
mov ecx,eax
|
||||
add ebx,dword ch_text_margin ;добавим размер стороны и расстояние на котором начнется вывод текста
|
||||
shr eax,16 ;сдвинем на 16 разрядов в лево (умножим на 65536)
|
||||
shr eax,16 ;сдвинем на 16 разрядов в право (разделим на 65536) в ax верхная точка
|
||||
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 у нас точка начала вывода текста по Х
|
||||
sub ax,7 ;внесем смещение для y
|
||||
mov bx,ax
|
||||
;ebx х shl 16 +y координаты вывода строчки
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user