forked from KolibriOS/kolibrios
Copy new version checkbox to trunk.
git-svn-id: svn://kolibrios.org@1682 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
6f90a83af7
commit
3c2f9c9b90
@ -1,5 +1,5 @@
|
|||||||
;include 'editbox.mac' ;macro which should make life easier :) specially for editbox
|
;include 'editbox.mac' ;macro which should make life easier :) specially for editbox
|
||||||
include 'checkbox.mac' ;macro implements checkbox
|
include 'checkbox2.mac' ;macro implements checkbox
|
||||||
;include 'optionbox.mac' ;macro implements optionbox
|
;include 'optionbox.mac' ;macro implements optionbox
|
||||||
;include 'scrollbar.mac' ;macro implements scrollbar
|
;include 'scrollbar.mac' ;macro implements scrollbar
|
||||||
;include 'd_button.mac' ;macro implements dinamic_button
|
;include 'd_button.mac' ;macro implements dinamic_button
|
||||||
|
@ -43,11 +43,11 @@ align 16
|
|||||||
;CheckBox
|
;CheckBox
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
align 16
|
align 16
|
||||||
_init_checkbox ;macro for init checkbox
|
_init_checkbox2 ;macro for init checkbox
|
||||||
align 16
|
align 16
|
||||||
use_checkbox_draw ;macro reveals the function of the display.
|
use_checkbox_draw2 ;macro reveals the function of the display.
|
||||||
align 16
|
align 16
|
||||||
use_checkbox_mouse ;macro reveals processing function of the mouse.
|
use_checkbox_mouse2 ;macro reveals processing function of the mouse.
|
||||||
|
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
@ -133,10 +133,10 @@ dd sz_version, 0x00000001
|
|||||||
;dd sz_edit_box_set_text, edit_box_set_text
|
;dd sz_edit_box_set_text, edit_box_set_text
|
||||||
;dd szVersion_ed, 0x00000001
|
;dd szVersion_ed, 0x00000001
|
||||||
|
|
||||||
dd sz_init_checkbox, init_checkbox
|
dd sz_init_checkbox2, init_checkbox2
|
||||||
dd sz_check_box_draw, check_box_draw
|
dd sz_check_box_draw2, check_box_draw2
|
||||||
dd sz_check_box_mouse, check_box_mouse
|
dd sz_check_box_mouse2, check_box_mouse2
|
||||||
dd szVersion_ch, 0x00000002
|
dd szVersion_ch2, 0x00000002
|
||||||
|
|
||||||
;dd sz_option_box_draw, option_box_draw
|
;dd sz_option_box_draw, option_box_draw
|
||||||
;dd sz_option_box_mouse, option_box_mouse
|
;dd sz_option_box_mouse, option_box_mouse
|
||||||
@ -232,10 +232,10 @@ sz_edit_box_mouse db 'edit_box_mouse',0
|
|||||||
sz_edit_box_set_text db 'edit_box_set_text',0
|
sz_edit_box_set_text db 'edit_box_set_text',0
|
||||||
szVersion_ed db 'version_ed',0
|
szVersion_ed db 'version_ed',0
|
||||||
|
|
||||||
sz_init_checkbox db 'init_checkbox',0
|
sz_init_checkbox2 db 'init_checkbox2',0
|
||||||
sz_check_box_draw db 'check_box_draw',0
|
sz_check_box_draw2 db 'check_box_draw2',0
|
||||||
sz_check_box_mouse db 'check_box_mouse',0
|
sz_check_box_mouse2 db 'check_box_mouse2',0
|
||||||
szVersion_ch db 'version_ch',0
|
szVersion_ch2 db 'version_ch2',0
|
||||||
|
|
||||||
sz_option_box_draw db 'option_box_draw',0
|
sz_option_box_draw db 'option_box_draw',0
|
||||||
sz_option_box_mouse db 'option_box_mouse',0
|
sz_option_box_mouse db 'option_box_mouse',0
|
||||||
|
@ -111,17 +111,17 @@ ch_flag_top=0x0 ;
|
|||||||
ch_flag_middle=100b ;флаг расположения текста в центре т.е. 4-й бит.
|
ch_flag_middle=100b ;флаг расположения текста в центре т.е. 4-й бит.
|
||||||
ch_flag_bottom=1000b ;флаг расположения текста в низу т.е. по умолчанию принимается значение внизу т.е. отсуствие 3-го и 4-го бита
|
ch_flag_bottom=1000b ;флаг расположения текста в низу т.е. по умолчанию принимается значение внизу т.е. отсуствие 3-го и 4-го бита
|
||||||
|
|
||||||
ch_left_s equ [ebp] ;кордината начала рисования по х
|
2ch_left_s equ [ebp] ;кордината начала рисования по х
|
||||||
ch_top_s equ [ebp+4] ;координата начала рисования по у
|
2ch_top_s equ [ebp+4] ;координата начала рисования по у
|
||||||
ch_text_margin equ [ebp+8] ;=4 расстояние от прямоугольника чек бокса до надписи
|
2ch_text_margin equ [ebp+8] ;=4 расстояние от прямоугольника чек бокса до надписи
|
||||||
ch_color equ [ebp+12] ;цвет внутри checkbox
|
2ch_color equ [ebp+12] ;цвет внутри checkbox
|
||||||
ch_border_color equ [ebp+16] ; or [edi+4] ;цвет рамки checkbox ее можно задать самостоятельно
|
2ch_border_color equ [ebp+16] ; or [edi+4] ;цвет рамки checkbox ее можно задать самостоятельно
|
||||||
ch_text_color equ [ebp+20] ;[edi+4] ;цвет текста
|
2ch_text_color equ [ebp+20] ;[edi+4] ;цвет текста
|
||||||
ch_text_ptr equ [ebp+24] ;указатель на начало текстовой строки
|
2ch_text_ptr equ [ebp+24] ;указатель на начало текстовой строки
|
||||||
ch_flags equ [ebp+28] ;флаги
|
2ch_flags equ [ebp+28] ;флаги
|
||||||
ch_sz_str equ [ebp+32] ;длинна строки, вычисляется при инициализации компонента
|
2ch_sz_str equ [ebp+32] ;длинна строки, вычисляется при инициализации компонента
|
||||||
|
|
||||||
struc check_box left_s,top_s,ch_text_margin,color,border_color,text_color,text,flags
|
struc check_box2 left_s,top_s,ch_text_margin,color,border_color,text_color,text,flags
|
||||||
{ ;структура параметров для чек бокса
|
{ ;структура параметров для чек бокса
|
||||||
.left_s: dd left_s ;+0 положение по х dw + размер dw
|
.left_s: dd left_s ;+0 положение по х dw + размер dw
|
||||||
.top_s: dd top_s ;+4 положение по у dw + размер dw
|
.top_s: dd top_s ;+4 положение по у dw + размер dw
|
||||||
@ -135,37 +135,37 @@ struc check_box left_s,top_s,ch_text_margin,color,border_color,text_color,text,f
|
|||||||
}
|
}
|
||||||
|
|
||||||
;Макрос проверки щелчка мышки над группой checkboxes.
|
;Макрос проверки щелчка мышки над группой checkboxes.
|
||||||
macro init_checkboxes start,end
|
macro init_checkboxes2 start,end
|
||||||
{
|
{
|
||||||
mov ebp,start
|
mov ebp,start
|
||||||
mov ecx,((end-start)/ch_struc_size)
|
mov ecx,((end-start)/ch_struc_size)
|
||||||
@@:
|
@@:
|
||||||
push ebp ;указатель на первый checkbox
|
push ebp ;указатель на первый checkbox
|
||||||
call [init_checkbox] ;макрос проверки мышки над checkbox'ом
|
call [init_checkbox2] ;макрос проверки мышки над checkbox'ом
|
||||||
add ebp,ch_struc_size
|
add ebp,ch_struc_size
|
||||||
loop @b
|
loop @b
|
||||||
}
|
}
|
||||||
|
|
||||||
;Макрос проверки мышки группы checkboxes.
|
;Макрос проверки мышки группы checkboxes.
|
||||||
macro checkboxes_mouse start,end
|
macro checkboxes_mouse2 start,end
|
||||||
{
|
{
|
||||||
mov ebp,start
|
mov ebp,start
|
||||||
mov ecx,((end-start)/ch_struc_size)
|
mov ecx,((end-start)/ch_struc_size)
|
||||||
@@:
|
@@:
|
||||||
push ebp ;указатель на первый checkbox
|
push ebp ;указатель на первый checkbox
|
||||||
call [check_box_mouse] ;нарисовать checkbox
|
call [check_box_mouse2] ;нарисовать checkbox
|
||||||
add ebp,ch_struc_size
|
add ebp,ch_struc_size
|
||||||
loop @b
|
loop @b
|
||||||
}
|
}
|
||||||
|
|
||||||
;Макрос отрисовки группы checkboxes.
|
;Макрос отрисовки группы checkboxes.
|
||||||
macro checkboxes_draw start,end
|
macro checkboxes_draw2 start,end
|
||||||
{
|
{
|
||||||
mov ebp,start
|
mov ebp,start
|
||||||
mov ecx,((end-start)/ch_struc_size)
|
mov ecx,((end-start)/ch_struc_size)
|
||||||
@@:
|
@@:
|
||||||
push ebp ;указатель на первый checkbox
|
push ebp ;указатель на первый checkbox
|
||||||
call [check_box_draw] ;нарисовать checkbox
|
call [check_box_draw2] ;нарисовать checkbox
|
||||||
add ebp,ch_struc_size
|
add ebp,ch_struc_size
|
||||||
loop @b
|
loop @b
|
||||||
}
|
}
|
||||||
|
@ -174,17 +174,17 @@ version_ch dd aVersion_ch
|
|||||||
dd 0,0
|
dd 0,0
|
||||||
|
|
||||||
|
|
||||||
aInit_checkbox db 'init_checkbox',0
|
aInit_checkbox db 'init_checkbox2',0
|
||||||
aCheck_box_draw db 'check_box_draw',0
|
aCheck_box_draw db 'check_box_draw2',0
|
||||||
aCheck_box_mouse db 'check_box_mouse',0
|
aCheck_box_mouse db 'check_box_mouse2',0
|
||||||
aVersion_ch db 'version_ch',0
|
aVersion_ch db 'version_ch2',0
|
||||||
;---------------------------------------------------------------------
|
;---------------------------------------------------------------------
|
||||||
check1 check_box (10 shl 16 + 12),(10 shl 16 + 12),6,0xC0AABBCC,0,0x80000000,check_text,ch_flag_en
|
check1 check_box2 (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
|
check2 check_box2 (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
|
check3 check_box2 (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
|
check4 check_box2 (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
|
check5 check_box2 (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
|
check6 check_box2 (10 shl 16 + 12),(130 shl 16 + 22),6,0xC0AABBCC,0,0x80000000,check_text6,ch_flag_bottom
|
||||||
;---------------------------------------------------------------------
|
;---------------------------------------------------------------------
|
||||||
hed db 'CheckBox Exemples <Lrz> date 15.10.2010',0
|
hed db 'CheckBox Exemples <Lrz> date 15.10.2010',0
|
||||||
hed_end:
|
hed_end:
|
||||||
|
@ -4,14 +4,14 @@
|
|||||||
;Checkbox
|
;Checkbox
|
||||||
|
|
||||||
;Инициализация checkbox
|
;Инициализация checkbox
|
||||||
macro _init_checkbox
|
macro _init_checkbox2
|
||||||
{
|
{
|
||||||
init_checkbox:
|
init_checkbox2:
|
||||||
;подсчитаем кол-во символов в длинне выводимой строки.
|
;подсчитаем кол-во символов в длинне выводимой строки.
|
||||||
pushad
|
pushad
|
||||||
mov ebp,dword [esp+36] ;загружаем указатель на структуру, указатель мы передаем в стеке
|
mov ebp,dword [esp+36] ;загружаем указатель на структуру, указатель мы передаем в стеке
|
||||||
mov ebx,dword ch_text_margin ;eax=0
|
mov ebx,dword 2ch_text_margin ;eax=0
|
||||||
mov esi,dword ch_text_ptr ;указатель на строчку
|
mov esi,dword 2ch_text_ptr ;указатель на строчку
|
||||||
lodsb ;в al первый символ из строки
|
lodsb ;в al первый символ из строки
|
||||||
test al,al
|
test al,al
|
||||||
jz .ex_loop
|
jz .ex_loop
|
||||||
@ -22,26 +22,26 @@ init_checkbox:
|
|||||||
jnz @b
|
jnz @b
|
||||||
.ex_loop:
|
.ex_loop:
|
||||||
|
|
||||||
mov dword ch_sz_str,ebx ;запишим длинну строки с учетом отступа от квадратика
|
mov dword 2ch_sz_str,ebx ;запишим длинну строки с учетом отступа от квадратика
|
||||||
popad
|
popad
|
||||||
ret 4
|
ret 4
|
||||||
}
|
}
|
||||||
|
|
||||||
macro use_checkbox_draw
|
macro use_checkbox_draw2
|
||||||
{
|
{
|
||||||
check_box_draw:
|
check_box_draw2:
|
||||||
pushad ;сохраним все регистры
|
pushad ;сохраним все регистры
|
||||||
mov ebp,dword [esp+36] ;загружаем указатель на структуру, указатель мы передаем в стеке
|
mov ebp,dword [esp+36] ;загружаем указатель на структуру, указатель мы передаем в стеке
|
||||||
mcall 13,ch_left_s,ch_top_s,ch_border_color ;рисуем рамку чек бокса, фактически рисуем прямоугольник и закрашиваем фон внутри цветом рамки бокса
|
mcall 13,2ch_left_s,2ch_top_s,2ch_border_color ;рисуем рамку чек бокса, фактически рисуем прямоугольник и закрашиваем фон внутри цветом рамки бокса
|
||||||
|
|
||||||
mov edx,dword ch_color ;загружаем цвет фона
|
mov edx,dword 2ch_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 2ch_flags,2 ;достать значение бита из переменной и поместить в флаг CF
|
||||||
jz @f ;в если CF=1, то выполним следующую процедуру иначе перейти на нижнюю @@
|
jz @f ;в если CF=1, то выполним следующую процедуру иначе перейти на нижнюю @@
|
||||||
call check_box_draw_ch ;нарисовать включенный чек бокс
|
call check_box_draw_ch2 ;нарисовать включенный чек бокс
|
||||||
@@:
|
@@:
|
||||||
;----------------------------
|
;----------------------------
|
||||||
;расчет куда будет произведен вывод текста
|
;расчет куда будет произведен вывод текста
|
||||||
@ -56,44 +56,44 @@ check_box_draw:
|
|||||||
; add eax,dword ch_top_s ;cкорректируем позицию Х. Т.е. сейчас в верхней части ebx у нас точка начала вывода текста по Y
|
; add eax,dword ch_top_s ;cкорректируем позицию Х. Т.е. сейчас в верхней части ebx у нас точка начала вывода текста по Y
|
||||||
|
|
||||||
; Оптимизация для ЦП
|
; Оптимизация для ЦП
|
||||||
mov ebx,dword ch_left_s ;загрузить значение (х shl 16 + длинна) для чек бокса
|
mov ebx,dword 2ch_left_s ;загрузить значение (х shl 16 + длинна) для чек бокса
|
||||||
mov eax,dword ch_top_s ;загрузим значение по (y shl 16 + длинна) для чек бокса
|
mov eax,dword 2ch_top_s ;загрузим значение по (y shl 16 + длинна) для чек бокса
|
||||||
mov ecx,eax
|
mov ecx,eax
|
||||||
add ebx,dword ch_text_margin ;добавим размер стороны и расстояние на котором начнется вывод текста
|
add ebx,dword 2ch_text_margin ;добавим размер стороны и расстояние на котором начнется вывод текста
|
||||||
shr eax,16 ;сдвинем на 16 разрядов в право (разделим на 65536) в ax верхная точка
|
shr eax,16 ;сдвинем на 16 разрядов в право (разделим на 65536) в ax верхная точка
|
||||||
shl ebx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536)
|
shl ebx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536)
|
||||||
|
|
||||||
sub ecx,8 ;корретировка учитываем высоту шрифта
|
sub ecx,8 ;корретировка учитываем высоту шрифта
|
||||||
|
|
||||||
test dword ch_flags,ch_flag_bottom ;проверим, нужно ли выводить вверху надпись
|
test dword 2ch_flags,ch_flag_bottom ;проверим, нужно ли выводить вверху надпись
|
||||||
jnz .bottom
|
jnz .bottom
|
||||||
|
|
||||||
test dword ch_flags,ch_flag_middle ;проверим, нужно ли выводить в центр надпись
|
test dword 2ch_flags,ch_flag_middle ;проверим, нужно ли выводить в центр надпись
|
||||||
jz .top ;остался только top
|
jz .top ;остался только top
|
||||||
|
|
||||||
shr cx,1 ;разделим на 2
|
shr cx,1 ;разделим на 2
|
||||||
.bottom:
|
.bottom:
|
||||||
add ax,cx
|
add ax,cx
|
||||||
.top:
|
.top:
|
||||||
add ebx,dword ch_left_s ;cкорректируем позицию Х. Т.е. сейчас в верхней части ebx у нас точка начала вывода текста по Х
|
add ebx,dword 2ch_left_s ;cкорректируем позицию Х. Т.е. сейчас в верхней части ebx у нас точка начала вывода текста по Х
|
||||||
mov bx,ax
|
mov bx,ax
|
||||||
;ebx х shl 16 +y координаты вывода строчки
|
;ebx х shl 16 +y координаты вывода строчки
|
||||||
|
|
||||||
mov ecx,dword ch_text_color ;загрузим цвет надписи + flags
|
mov ecx,dword 2ch_text_color ;загрузим цвет надписи + flags
|
||||||
mov edx,dword ch_text_ptr ;укажем адрес от куда нужно выводить строку
|
mov edx,dword 2ch_text_ptr ;укажем адрес от куда нужно выводить строку
|
||||||
mcall 4 ;Вывод
|
mcall 4 ;Вывод
|
||||||
popad ;восстановить значения регистров из стека
|
popad ;восстановить значения регистров из стека
|
||||||
ret 4 ;выйдем из процедуры и удалим из стека указатель на структуру (4 байта)
|
ret 4 ;выйдем из процедуры и удалим из стека указатель на структуру (4 байта)
|
||||||
|
|
||||||
check_box_clear_ch: ;очистка чек бокса
|
check_box_clear_ch2: ;очистка чек бокса
|
||||||
mov edx,dword ch_color ;цвет внутри чек бокса
|
mov edx,dword 2ch_color ;цвет внутри чек бокса
|
||||||
jmp @f ;безусловный прыжок на нижнюю метку @@
|
jmp @f ;безусловный прыжок на нижнюю метку @@
|
||||||
check_box_draw_ch: ;нарисовать включенный чек бокс
|
check_box_draw_ch2: ;нарисовать включенный чек бокс
|
||||||
mov edx,dword ch_border_color ;загрузить цвет
|
mov edx,dword 2ch_border_color ;загрузить цвет
|
||||||
@@:
|
@@:
|
||||||
;Отобразить включеный checkbox
|
;Отобразить включеный checkbox
|
||||||
mov ebx,dword ch_left_s ;загружаем х shl 16 + длинна по Х
|
mov ebx,dword 2ch_left_s ;загружаем х shl 16 + длинна по Х
|
||||||
mov ecx,dword ch_top_s ;загружаем Y shl 16 + длинна по Y
|
mov ecx,dword 2ch_top_s ;загружаем Y shl 16 + длинна по Y
|
||||||
add ebx,2 shl 16 - 4 ;после этих изменений (X+2) shl 16 +длинна по (Х-2)
|
add ebx,2 shl 16 - 4 ;после этих изменений (X+2) shl 16 +длинна по (Х-2)
|
||||||
add ecx,2 shl 16 - 4 ;после этих изменений (Y+2) shl 16 +длинна по (Y-2)
|
add ecx,2 shl 16 - 4 ;после этих изменений (Y+2) shl 16 +длинна по (Y-2)
|
||||||
mcall 13 ;отобразить квадрат внутри checkbox
|
mcall 13 ;отобразить квадрат внутри checkbox
|
||||||
@ -101,14 +101,14 @@ check_box_draw_ch: ;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
macro use_checkbox_mouse
|
macro use_checkbox_mouse2
|
||||||
{
|
{
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;Обработчик mouse
|
;Обработчик mouse
|
||||||
;При попадании мышки + нажата клавиша в область checkbox состояние бокса должно менятся активный - не активный.
|
;При попадании мышки + нажата клавиша в область checkbox состояние бокса должно менятся активный - не активный.
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
check_box_mouse: ;обработка мыши
|
check_box_mouse2: ;обработка мыши
|
||||||
pushad
|
pushad
|
||||||
mov ebp,dword [esp+36] ;загружаем указатель на структуру, указатель мы передаем в стеке
|
mov ebp,dword [esp+36] ;загружаем указатель на структуру, указатель мы передаем в стеке
|
||||||
mcall 37,2 ;проверяем состояние клавиш мышки. Было ли событие нажатая клавиша на мышке.
|
mcall 37,2 ;проверяем состояние клавиш мышки. Было ли событие нажатая клавиша на мышке.
|
||||||
@ -119,7 +119,7 @@ pushad
|
|||||||
mcall 37,1 ;получить координаты курсора относительно окна
|
mcall 37,1 ;получить координаты курсора относительно окна
|
||||||
;на выходе в eax x shl 16 + y
|
;на выходе в eax x shl 16 + y
|
||||||
;сравнение верхней точки по Y
|
;сравнение верхней точки по Y
|
||||||
mov ecx,dword ch_top_s ;y shl 16 +длинна по y
|
mov ecx,dword 2ch_top_s ;y shl 16 +длинна по y
|
||||||
mov ebx,ecx
|
mov ebx,ecx
|
||||||
shr ebx,16 ;bx = координата по y
|
shr ebx,16 ;bx = координата по y
|
||||||
cmp ax,bx
|
cmp ax,bx
|
||||||
@ -131,24 +131,24 @@ pushad
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
shr eax,16 ;сместим координату по Х в нижную часть регистра т.е. в ax
|
shr eax,16 ;сместим координату по Х в нижную часть регистра т.е. в ax
|
||||||
;сравнение по начальной точке Х
|
;сравнение по начальной точке Х
|
||||||
mov ecx,dword ch_left_s ;загрузить значение (х shl 16 + длинна) для чек бокса
|
mov ecx,dword 2ch_left_s ;загрузить значение (х shl 16 + длинна) для чек бокса
|
||||||
mov ebx,ecx
|
mov ebx,ecx
|
||||||
shr ebx,16 ;bx = координата по X
|
shr ebx,16 ;bx = координата по X
|
||||||
cmp ax,bx
|
cmp ax,bx
|
||||||
jb .check_box_mouse_end ;указатель мышки меньше начальной координаты по X чем координата по X у бокса
|
jb .check_box_mouse_end ;указатель мышки меньше начальной координаты по X чем координата по X у бокса
|
||||||
;сравнение конечной точки по X
|
;сравнение конечной точки по X
|
||||||
add bx,cx ;сложим длинну по x и координату точки по х получим координату конечной точки по Х
|
add bx,cx ;сложим длинну по x и координату точки по х получим координату конечной точки по Х
|
||||||
add bx,word ch_sz_str ;добавим длинну строки текста с отступом предвартиельно записав их в момент инициализации
|
add bx,word 2ch_sz_str ;добавим длинну строки текста с отступом предвартиельно записав их в момент инициализации
|
||||||
cmp ax,bx
|
cmp ax,bx
|
||||||
ja .check_box_mouse_end ;указатель мышки больше конечной координаты по х чем координата по Х у бокса
|
ja .check_box_mouse_end ;указатель мышки больше конечной координаты по х чем координата по Х у бокса
|
||||||
;если все проверки были успешно пройдены мы обязаны поменять состояние бокса
|
;если все проверки были успешно пройдены мы обязаны поменять состояние бокса
|
||||||
btc dword ch_flags,2 ;перенос 2-го бита в cf и инверсия его
|
btc dword 2ch_flags,2 ;перенос 2-го бита в cf и инверсия его
|
||||||
jc .enable_box ;если CF=1 то отобразим включенный бокс и выйдем
|
jc .enable_box ;если CF=1 то отобразим включенный бокс и выйдем
|
||||||
push dword .check_box_mouse_end ;фокус -покус, вернемся после вызова check_box_clear_ch на метку check_box_mouse_end
|
push dword .check_box_mouse_end ;фокус -покус, вернемся после вызова check_box_clear_ch на метку check_box_mouse_end
|
||||||
jmp check_box_clear_ch ;выключить чек бокс т.е. на месте закрашенного прямоугольника отобразить цвет фона.
|
jmp check_box_clear_ch2 ;выключить чек бокс т.е. на месте закрашенного прямоугольника отобразить цвет фона.
|
||||||
|
|
||||||
.enable_box:
|
.enable_box:
|
||||||
call check_box_draw_ch ;отобразить включенный чек бокс
|
call check_box_draw_ch2 ;отобразить включенный чек бокс
|
||||||
.check_box_mouse_end:
|
.check_box_mouse_end:
|
||||||
popad ;восстановить регистры из стека
|
popad ;восстановить регистры из стека
|
||||||
ret 4 ;выйти и восстановим стек
|
ret 4 ;выйти и восстановим стек
|
@ -1,5 +1,6 @@
|
|||||||
include 'editbox.mac' ;macro which should make life easier :) specially for editbox
|
include 'editbox.mac' ;macro which should make life easier :) specially for editbox
|
||||||
include 'checkbox.mac' ;macro implements checkbox
|
include 'checkbox.mac' ;macro implements checkbox old version
|
||||||
|
include 'checkbox2.mac' ;macro implements checkbox version 2
|
||||||
include 'optionbox.mac' ;macro implements optionbox
|
include 'optionbox.mac' ;macro implements optionbox
|
||||||
include 'scrollbar.mac' ;macro implements scrollbar
|
include 'scrollbar.mac' ;macro implements scrollbar
|
||||||
include 'd_button.mac' ;macro implements dinamic_button
|
include 'd_button.mac' ;macro implements dinamic_button
|
||||||
|
@ -37,13 +37,22 @@ align 16
|
|||||||
use_editbox_mouse ;macro reveals processing function of the mouse.
|
use_editbox_mouse ;macro reveals processing function of the mouse.
|
||||||
|
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
;CheckBox
|
;CheckBox old version
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
align 16
|
align 16
|
||||||
use_checkbox_draw ;macro reveals the function of the display.
|
use_checkbox_draw ;macro reveals the function of the display.
|
||||||
align 16
|
align 16
|
||||||
use_checkbox_mouse ;macro reveals processing function of the mouse.
|
use_checkbox_mouse ;macro reveals processing function of the mouse.
|
||||||
|
|
||||||
|
;----------------------------------------------------
|
||||||
|
;CheckBox2
|
||||||
|
;----------------------------------------------------
|
||||||
|
align 16
|
||||||
|
_init_checkbox2 ;macro for init checkbox
|
||||||
|
align 16
|
||||||
|
use_checkbox_draw2 ;macro reveals the function of the display.
|
||||||
|
align 16
|
||||||
|
use_checkbox_mouse2 ;macro reveals processing function of the mouse.
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
;radiobutton Group
|
;radiobutton Group
|
||||||
@ -132,6 +141,12 @@ dd sz_check_box_draw, check_box_draw
|
|||||||
dd sz_check_box_mouse, check_box_mouse
|
dd sz_check_box_mouse, check_box_mouse
|
||||||
dd szVersion_ch, 0x00000001
|
dd szVersion_ch, 0x00000001
|
||||||
|
|
||||||
|
dd sz_init_checkbox2, init_checkbox2
|
||||||
|
dd sz_check_box_draw2, check_box_draw2
|
||||||
|
dd sz_check_box_mouse2, check_box_mouse2
|
||||||
|
dd szVersion_ch2, 0x00000002
|
||||||
|
|
||||||
|
|
||||||
dd sz_option_box_draw, option_box_draw
|
dd sz_option_box_draw, option_box_draw
|
||||||
dd sz_option_box_mouse, option_box_mouse
|
dd sz_option_box_mouse, option_box_mouse
|
||||||
dd szVersion_op, 0x00000001
|
dd szVersion_op, 0x00000001
|
||||||
@ -230,6 +245,11 @@ sz_check_box_draw db 'check_box_draw',0
|
|||||||
sz_check_box_mouse db 'check_box_mouse',0
|
sz_check_box_mouse db 'check_box_mouse',0
|
||||||
szVersion_ch db 'version_ch',0
|
szVersion_ch db 'version_ch',0
|
||||||
|
|
||||||
|
sz_init_checkbox2 db 'init_checkbox2',0
|
||||||
|
sz_check_box_draw2 db 'check_box_draw2',0
|
||||||
|
sz_check_box_mouse2 db 'check_box_mouse2',0
|
||||||
|
szVersion_ch2 db 'version_ch2',0
|
||||||
|
|
||||||
sz_option_box_draw db 'option_box_draw',0
|
sz_option_box_draw db 'option_box_draw',0
|
||||||
sz_option_box_mouse db 'option_box_mouse',0
|
sz_option_box_mouse db 'option_box_mouse',0
|
||||||
szVersion_op db 'version_op',0
|
szVersion_op db 'version_op',0
|
||||||
|
@ -148,6 +148,94 @@ macro check_boxes_set_sys_color start,end,color_table
|
|||||||
loop @b
|
loop @b
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;Basic macros for use CheckBox ;
|
||||||
|
;Last change 12.10.2010 ;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
ch_struc_size=36 ;à §¬¥à áâàãªâãàë
|
||||||
|
ch_flag_en=10b ;ä« £ ãáâ ®¢«¥®£® 祪 ¡®ªá .
|
||||||
|
ch_flag_top=0x0 ;ä« £ à ᯮ«®¦¥¨ï ⥪áâ ¢¢¥àåã â.¥. 3-© ¡¨â
|
||||||
|
ch_flag_middle=100b ;ä« £ à ᯮ«®¦¥¨ï ⥪áâ ¢ æ¥âॠâ.¥. 4-© ¡¨â.
|
||||||
|
ch_flag_bottom=1000b ;ä« £ à ᯮ«®¦¥¨ï ⥪áâ ¢ ¨§ã â.¥. ¯® 㬮«ç ¨î ¯à¨¨¬ ¥âáï § 票¥ ¢¨§ã â.¥. ®âáãá⢨¥ 3-£® ¨ 4-£® ¡¨â
|
||||||
|
|
||||||
|
2ch_left_s equ [ebp] ;ª®à¤¨ â ç « à¨á®¢ ¨ï ¯® å
|
||||||
|
2ch_top_s equ [ebp+4] ;ª®®à¤¨ â ç « à¨á®¢ ¨ï ¯® ã
|
||||||
|
2ch_text_margin equ [ebp+8] ;=4 à ááâ®ï¨¥ ®â ¯àאַ㣮«ì¨ª 祪 ¡®ªá ¤® ¤¯¨á¨
|
||||||
|
2ch_color equ [ebp+12] ;梥⠢ãâਠcheckbox
|
||||||
|
2ch_border_color equ [ebp+16] ; or [edi+4] ;梥â à ¬ª¨ checkbox ¥¥ ¬®¦® § ¤ âì á ¬®áâ®ï⥫ì®
|
||||||
|
2ch_text_color equ [ebp+20] ;[edi+4] ;梥â ⥪áâ
|
||||||
|
2ch_text_ptr equ [ebp+24] ;㪠§ ⥫ì ç «® ⥪á⮢®© áâப¨
|
||||||
|
2ch_flags equ [ebp+28] ;ä« £¨
|
||||||
|
2ch_sz_str equ [ebp+32] ;¤«¨ áâப¨, ¢ëç¨á«ï¥âáï ¯à¨ ¨¨æ¨ «¨§ 樨 ª®¬¯®¥â
|
||||||
|
|
||||||
|
struc check_box2 left_s,top_s,ch_text_margin,color,border_color,text_color,text,flags
|
||||||
|
{ ;áâàãªâãà ¯ à ¬¥â஢ ¤«ï 祪 ¡®ªá
|
||||||
|
.left_s: dd left_s ;+0 ¯®«®¦¥¨¥ ¯® å dw + à §¬¥à dw
|
||||||
|
.top_s: dd top_s ;+4 ¯®«®¦¥¨¥ ¯® ã dw + à §¬¥à dw
|
||||||
|
.ch_text_margin: dd ch_text_margin ;à ááâ®ï¨¥ ®â ¯àאַ㣮«ì¨ª 祪 ¡®ªá ¤® ¤¯¨á¨
|
||||||
|
.color: dd color ;梥⠢ãâਠ祪¡®ªá
|
||||||
|
.border_color: dd border_color ;梥â à ¬ª¨
|
||||||
|
.text_color: dd text_color ;梥⠤¯¨á¨
|
||||||
|
.text: dd text ; ¤à¥á ¢ ª®¤¥ ¯à®£à ¬¬ë £¤¥ à ᯮ«®¦¥ ⥪áâ
|
||||||
|
.flags: dd flags+0 ;ä« £¨
|
||||||
|
.size_of_str: dd 0x0 ;¤«¨ áâப¨, ¢ëç¨á«ï¥âáï ¯à¨ ¨¨æ¨ «¨§ 樨 ª®¬¯®¥â
|
||||||
|
}
|
||||||
|
|
||||||
|
;Œ ªà®á ¯à®¢¥àª¨ é¥«çª ¬ë誨 ¤ £à㯯®© checkboxes.
|
||||||
|
macro init_checkboxes2 start,end
|
||||||
|
{
|
||||||
|
mov ebp,start
|
||||||
|
mov ecx,((end-start)/ch_struc_size)
|
||||||
|
@@:
|
||||||
|
push ebp ;㪠§ â¥«ì ¯¥à¢ë© checkbox
|
||||||
|
call [init_checkbox2] ;¬ ªà®á ¯à®¢¥àª¨ ¬ë誨 ¤ checkbox'®¬
|
||||||
|
add ebp,ch_struc_size
|
||||||
|
loop @b
|
||||||
|
}
|
||||||
|
|
||||||
|
;Œ ªà®á ¯à®¢¥àª¨ ¬ë誨 £à㯯ë checkboxes.
|
||||||
|
macro checkboxes_mouse2 start,end
|
||||||
|
{
|
||||||
|
mov ebp,start
|
||||||
|
mov ecx,((end-start)/ch_struc_size)
|
||||||
|
@@:
|
||||||
|
push ebp ;㪠§ â¥«ì ¯¥à¢ë© checkbox
|
||||||
|
call [check_box_mouse2] ; à¨á®¢ âì checkbox
|
||||||
|
add ebp,ch_struc_size
|
||||||
|
loop @b
|
||||||
|
}
|
||||||
|
|
||||||
|
;Œ ªà®á ®âà¨á®¢ª¨ £à㯯ë checkboxes.
|
||||||
|
macro checkboxes_draw2 start,end
|
||||||
|
{
|
||||||
|
mov ebp,start
|
||||||
|
mov ecx,((end-start)/ch_struc_size)
|
||||||
|
@@:
|
||||||
|
push ebp ;㪠§ â¥«ì ¯¥à¢ë© checkbox
|
||||||
|
call [check_box_draw2] ; à¨á®¢ âì checkbox
|
||||||
|
add ebp,ch_struc_size
|
||||||
|
loop @b
|
||||||
|
}
|
||||||
|
|
||||||
|
macro check_boxes_set_sys_color2 start,end,color_table
|
||||||
|
{
|
||||||
|
mov ebp,start
|
||||||
|
mov ecx,((end-start)/ch_struc_size)
|
||||||
|
mov esi,color_table
|
||||||
|
@@:
|
||||||
|
push dword [esi+32] ;梥â ⥪áâ ¢ à ¡®ç¥© ®¡« á⨠®ª
|
||||||
|
pop dword ch_text_color
|
||||||
|
push dword [esi+36] ;梥⠣à 䨪¨ ¢ ®ª¥ (à §¤¥«¨â¥«ìë¥ «¨¨¨ ¨ â.¯.)
|
||||||
|
pop dword ch_border_color
|
||||||
|
add ebp,ch_struc_size
|
||||||
|
loop @b
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;Basic macros for use OptionBox ;
|
;Basic macros for use OptionBox ;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
155
programs/develop/libraries/box_lib/trunk/checkbox2.mac
Normal file
155
programs/develop/libraries/box_lib/trunk/checkbox2.mac
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
;Последная модификация 03.10.2010
|
||||||
|
;файл создан 13.02.2009 <Lrz> На код применена GPL2 лицензия
|
||||||
|
;Макрос для системной библиотеки box_lib.obj
|
||||||
|
;Checkbox
|
||||||
|
|
||||||
|
;Инициализация checkbox
|
||||||
|
macro _init_checkbox2
|
||||||
|
{
|
||||||
|
init_checkbox2:
|
||||||
|
;подсчитаем кол-во символов в длинне выводимой строки.
|
||||||
|
pushad
|
||||||
|
mov ebp,dword [esp+36] ;загружаем указатель на структуру, указатель мы передаем в стеке
|
||||||
|
mov ebx,dword 2ch_text_margin ;eax=0
|
||||||
|
mov esi,dword 2ch_text_ptr ;указатель на строчку
|
||||||
|
lodsb ;в al первый символ из строки
|
||||||
|
test al,al
|
||||||
|
jz .ex_loop
|
||||||
|
@@:
|
||||||
|
add ebx,6 ;ширина символа
|
||||||
|
lodsb
|
||||||
|
test al,al
|
||||||
|
jnz @b
|
||||||
|
.ex_loop:
|
||||||
|
|
||||||
|
mov dword 2ch_sz_str,ebx ;запишим длинну строки с учетом отступа от квадратика
|
||||||
|
popad
|
||||||
|
ret 4
|
||||||
|
}
|
||||||
|
|
||||||
|
macro use_checkbox_draw2
|
||||||
|
{
|
||||||
|
check_box_draw2:
|
||||||
|
pushad ;сохраним все регистры
|
||||||
|
mov ebp,dword [esp+36] ;загружаем указатель на структуру, указатель мы передаем в стеке
|
||||||
|
mcall 13,2ch_left_s,2ch_top_s,2ch_border_color ;рисуем рамку чек бокса, фактически рисуем прямоугольник и закрашиваем фон внутри цветом рамки бокса
|
||||||
|
|
||||||
|
mov edx,dword 2ch_color ;загружаем цвет фона
|
||||||
|
add ebx,1 shl 16 - 2
|
||||||
|
add ecx,1 shl 16 - 2
|
||||||
|
mcall ;закрашиваем внутренности чекбокса фоном
|
||||||
|
|
||||||
|
test dword 2ch_flags,2 ;достать значение бита из переменной и поместить в флаг CF
|
||||||
|
jz @f ;в если CF=1, то выполним следующую процедуру иначе перейти на нижнюю @@
|
||||||
|
call check_box_draw_ch2 ;нарисовать включенный чек бокс
|
||||||
|
@@:
|
||||||
|
;----------------------------
|
||||||
|
;расчет куда будет произведен вывод текста
|
||||||
|
;----------------------------
|
||||||
|
; mov ebx,dword ch_left_s ;загрузить значение (х shl 16 + длинна) для чек бокса
|
||||||
|
; add ebx,dword ch_text_margin ;добавим размер стороны и расстояние на котором начнется вывод текста
|
||||||
|
; shl ebx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536)
|
||||||
|
; add ebx,dword ch_left_s ;cкорректируем позицию Х. Т.е. сейчас в верхней части ebx у нас точка начала вывода текста по Х
|
||||||
|
|
||||||
|
; mov eax,word ch_top_s ;загрузим значение по (y shl 16 + длинна) для чек бокса
|
||||||
|
; shr eax,16 ;сдвинем на 16 разрядов в лево (умножим на 65536)
|
||||||
|
; add eax,dword ch_top_s ;cкорректируем позицию Х. Т.е. сейчас в верхней части ebx у нас точка начала вывода текста по Y
|
||||||
|
|
||||||
|
; Оптимизация для ЦП
|
||||||
|
mov ebx,dword 2ch_left_s ;загрузить значение (х shl 16 + длинна) для чек бокса
|
||||||
|
mov eax,dword 2ch_top_s ;загрузим значение по (y shl 16 + длинна) для чек бокса
|
||||||
|
mov ecx,eax
|
||||||
|
add ebx,dword 2ch_text_margin ;добавим размер стороны и расстояние на котором начнется вывод текста
|
||||||
|
shr eax,16 ;сдвинем на 16 разрядов в право (разделим на 65536) в ax верхная точка
|
||||||
|
shl ebx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536)
|
||||||
|
|
||||||
|
sub ecx,8 ;корретировка учитываем высоту шрифта
|
||||||
|
|
||||||
|
test dword 2ch_flags,ch_flag_bottom ;проверим, нужно ли выводить вверху надпись
|
||||||
|
jnz .bottom
|
||||||
|
|
||||||
|
test dword 2ch_flags,ch_flag_middle ;проверим, нужно ли выводить в центр надпись
|
||||||
|
jz .top ;остался только top
|
||||||
|
|
||||||
|
shr cx,1 ;разделим на 2
|
||||||
|
.bottom:
|
||||||
|
add ax,cx
|
||||||
|
.top:
|
||||||
|
add ebx,dword 2ch_left_s ;cкорректируем позицию Х. Т.е. сейчас в верхней части ebx у нас точка начала вывода текста по Х
|
||||||
|
mov bx,ax
|
||||||
|
;ebx х shl 16 +y координаты вывода строчки
|
||||||
|
|
||||||
|
mov ecx,dword 2ch_text_color ;загрузим цвет надписи + flags
|
||||||
|
mov edx,dword 2ch_text_ptr ;укажем адрес от куда нужно выводить строку
|
||||||
|
mcall 4 ;Вывод
|
||||||
|
popad ;восстановить значения регистров из стека
|
||||||
|
ret 4 ;выйдем из процедуры и удалим из стека указатель на структуру (4 байта)
|
||||||
|
|
||||||
|
check_box_clear_ch2: ;очистка чек бокса
|
||||||
|
mov edx,dword 2ch_color ;цвет внутри чек бокса
|
||||||
|
jmp @f ;безусловный прыжок на нижнюю метку @@
|
||||||
|
check_box_draw_ch2: ;нарисовать включенный чек бокс
|
||||||
|
mov edx,dword 2ch_border_color ;загрузить цвет
|
||||||
|
@@:
|
||||||
|
;Отобразить включеный checkbox
|
||||||
|
mov ebx,dword 2ch_left_s ;загружаем х shl 16 + длинна по Х
|
||||||
|
mov ecx,dword 2ch_top_s ;загружаем Y shl 16 + длинна по Y
|
||||||
|
add ebx,2 shl 16 - 4 ;после этих изменений (X+2) shl 16 +длинна по (Х-2)
|
||||||
|
add ecx,2 shl 16 - 4 ;после этих изменений (Y+2) shl 16 +длинна по (Y-2)
|
||||||
|
mcall 13 ;отобразить квадрат внутри checkbox
|
||||||
|
ret
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
macro use_checkbox_mouse2
|
||||||
|
{
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;Обработчик mouse
|
||||||
|
;При попадании мышки + нажата клавиша в область checkbox состояние бокса должно менятся активный - не активный.
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
check_box_mouse2: ;обработка мыши
|
||||||
|
pushad
|
||||||
|
mov ebp,dword [esp+36] ;загружаем указатель на структуру, указатель мы передаем в стеке
|
||||||
|
mcall 37,2 ;проверяем состояние клавиш мышки. Было ли событие нажатая клавиша на мышке.
|
||||||
|
test eax,eax ;проверка если у нас в eax=0, выйдем
|
||||||
|
jz .check_box_mouse_end ;обработка закончилась
|
||||||
|
; Да событие: нажатие клавиши мышки произошло.
|
||||||
|
@@:
|
||||||
|
mcall 37,1 ;получить координаты курсора относительно окна
|
||||||
|
;на выходе в eax x shl 16 + y
|
||||||
|
;сравнение верхней точки по Y
|
||||||
|
mov ecx,dword 2ch_top_s ;y shl 16 +длинна по y
|
||||||
|
mov ebx,ecx
|
||||||
|
shr ebx,16 ;bx = координата по y
|
||||||
|
cmp ax,bx
|
||||||
|
jb .check_box_mouse_end ;указатель мышки меньше начальной координаты по y чем координата по Y у бокса
|
||||||
|
;сравнение нижней точки по Y
|
||||||
|
add cx,bx ;сложим длинну по y и координату верхней точки по y поличим координату нижней точки по Y
|
||||||
|
cmp ax,cx
|
||||||
|
ja .check_box_mouse_end ;указатель мышки больше конечной координаты по y чем координата по Y у бокса
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
shr eax,16 ;сместим координату по Х в нижную часть регистра т.е. в ax
|
||||||
|
;сравнение по начальной точке Х
|
||||||
|
mov ecx,dword 2ch_left_s ;загрузить значение (х shl 16 + длинна) для чек бокса
|
||||||
|
mov ebx,ecx
|
||||||
|
shr ebx,16 ;bx = координата по X
|
||||||
|
cmp ax,bx
|
||||||
|
jb .check_box_mouse_end ;указатель мышки меньше начальной координаты по X чем координата по X у бокса
|
||||||
|
;сравнение конечной точки по X
|
||||||
|
add bx,cx ;сложим длинну по x и координату точки по х получим координату конечной точки по Х
|
||||||
|
add bx,word 2ch_sz_str ;добавим длинну строки текста с отступом предвартиельно записав их в момент инициализации
|
||||||
|
cmp ax,bx
|
||||||
|
ja .check_box_mouse_end ;указатель мышки больше конечной координаты по х чем координата по Х у бокса
|
||||||
|
;если все проверки были успешно пройдены мы обязаны поменять состояние бокса
|
||||||
|
btc dword 2ch_flags,2 ;перенос 2-го бита в cf и инверсия его
|
||||||
|
jc .enable_box ;если CF=1 то отобразим включенный бокс и выйдем
|
||||||
|
push dword .check_box_mouse_end ;фокус -покус, вернемся после вызова check_box_clear_ch на метку check_box_mouse_end
|
||||||
|
jmp check_box_clear_ch2 ;выключить чек бокс т.е. на месте закрашенного прямоугольника отобразить цвет фона.
|
||||||
|
|
||||||
|
.enable_box:
|
||||||
|
call check_box_draw_ch2 ;отобразить включенный чек бокс
|
||||||
|
.check_box_mouse_end:
|
||||||
|
popad ;восстановить регистры из стека
|
||||||
|
ret 4 ;выйти и восстановим стек
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user