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_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
|
||||||
|
@ -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
|
||||||
|
@ -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 координаты вывода строчки
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user