diff --git a/programs/develop/examples/radiobutton/trunk/optionbox.asm b/programs/develop/examples/radiobutton/trunk/optionbox.asm index 7177f2c98b..02029dba80 100644 --- a/programs/develop/examples/radiobutton/trunk/optionbox.asm +++ b/programs/develop/examples/radiobutton/trunk/optionbox.asm @@ -1,5 +1,5 @@ -;компонент OptionBox (Основан на Checkbox) -;Огромная благодарность Maxxxx32, Diamond, и другим программистам, и их программам, без +;компонент OptionBox (основан на Checkbox) +;Огромная благодарность Maxxxx32, Diamond, Heavyiron и другим программистам, и их программам, без ;которых я не смог бы написать этот компонент. ;16.02.2007 ; - Теплов Алексей www.lrz.land.ru @@ -23,7 +23,7 @@ use32 ; ;------------------ include 'macros.inc' include 'optionbox.inc' ;включить файл check.inc - use_option_box ;используя макросы внести процедуры для рисования чек бокса + use_option_box ;используя макросы,внести процедуры для рисования optionbox align 16 ;Область кода start: ;Точка входа в программу @@ -49,10 +49,10 @@ still: ; mouse_option_boxes option_boxes,option_boxes_end ;проверка чек бокса jmp still ;если ничего из перечисленного то снова в цикл button: - mov eax,17 ;получить идентификатор нажатой клавиши - int 0x40 - test ah,ah ;если в ah 0, то перейти на обработчик событий still - jz still +; mov eax,17 ;получить идентификатор нажатой клавиши +; int 0x40 +; test ah,ah ;если в ah 0, то перейти на обработчик событий still +; jz still or eax,-1 ;в eax,-1 - 5 ,байтов у нас же только 3 выйти int 0x40 ;далее выполняется выход из программы @@ -67,8 +67,7 @@ draw_window: ; mov ecx,30*65536+200 ;[координата по оси y]*65536 + [размер по оси y] mov edx,[sc.work] ; color of work area RRGGBB,8->color gl or edx,0xb3000000 - mov esi,[sc.work_text] - mov edi,hed;0x005080DD ;0x00RRGGBB - цвет рамки + mov edi,hed int 0x40 ;нарисовать окно приложения draw_option_boxes option_boxes,option_boxes_end ;рисование чекбоксов @@ -83,20 +82,20 @@ draw_window: ; ;Формат данных чек бокса: ;10 - координата чек бокса по х ;30 - координата чек бокса по у -;0xffffff - цвет внутри чек бокса ;0 - цвет рамки чек бокса ;0 - цвет текста надписи ;op_text.1 - указатель на начало строки ;option_group1 - это признак группы, т.е. этот код может обрабатывать много групп из optibox ;op_text.e1-ch_text.1 - длина строки ; +align 16 option_boxes: -op1 option_box 10,15,0xffffff,0,0,ch_text.1,ch_text.e1-ch_text.1,option_group1 -op2 option_box 10,30,0xffffff,0,0,ch_text.2,ch_text.e2-ch_text.2,option_group1 -op3 option_box 10,45,0xffffff,0,0,ch_text.3,ch_text.e3-ch_text.3,option_group1 -op11 option_box 10,80,0xffffff,0,0,ch_text.1,ch_text.e1-ch_text.1,option_group2 -op12 option_box 10,95,0xffffff,0,0,ch_text.2,ch_text.e2-ch_text.2,option_group2 -op13 option_box 10,110,0xffffff,0,0,ch_text.3,ch_text.e3-ch_text.3,option_group2 +op1 option_box 10,15,0,0,ch_text.1,ch_text.e1-ch_text.1,option_group1 +op2 option_box 10,30,0,0,ch_text.2,ch_text.e2-ch_text.2,option_group1 +op3 option_box 10,45,0,0,ch_text.3,ch_text.e3-ch_text.3,option_group1 +op11 option_box 10,80,0,0,ch_text.1,ch_text.e1-ch_text.1,option_group2 +op12 option_box 10,95,0,0,ch_text.2,ch_text.e2-ch_text.2,option_group2 +op13 option_box 10,110,0,0,ch_text.3,ch_text.e3-ch_text.3,option_group2 option_boxes_end: ch_text: ; Сопровождающий текст для чек боксов @@ -112,4 +111,5 @@ option_group2 dd op11 ; hed db 'Optionbox [16.02.2007]',0 ;заголовок приложения sc system_colors -i_end: ;конец кода \ No newline at end of file +i_end: ;конец кода + diff --git a/programs/develop/examples/radiobutton/trunk/optionbox.bat b/programs/develop/examples/radiobutton/trunk/optionbox.bat index b49ee6b60e..d3f11b7ca2 100644 --- a/programs/develop/examples/radiobutton/trunk/optionbox.bat +++ b/programs/develop/examples/radiobutton/trunk/optionbox.bat @@ -1,2 +1,3 @@ @fasm.exe optionbox.asm optionbox -@mtappack.exe optionbox +@kpack.exe optionbox +REM @klbrinwin.exe optionbox \ No newline at end of file diff --git a/programs/develop/examples/radiobutton/trunk/optionbox.inc b/programs/develop/examples/radiobutton/trunk/optionbox.inc index 07659f6755..0e078c1230 100644 --- a/programs/develop/examples/radiobutton/trunk/optionbox.inc +++ b/programs/develop/examples/radiobutton/trunk/optionbox.inc @@ -1,5 +1,5 @@ ;компонент OptionBox (Основан на Checkbox) -;Огромная благодарность Maxxxx32, Diamond, и другим программистам, и их программам, без +;Огромная благодарность Maxxxx32, Diamond, Heavyiron, и другим программистам, и их программам, без ;которых я не смог бы написать этот компонент. ;16.02.2007 ; - Теплов Алексей www.lrz.land.ru @@ -10,12 +10,11 @@ op_text_margin=4 ; op_size=10 ;размер квадрата чек бокса op_left equ [edi] ;координата начала рисования по х op_top equ [edi+2] ;координата начала рисования по у -op_color equ [edi+4] ;цвет внутри optionbox -op_border_color equ [edi+8] ;цвет рамки optionbox -op_text_color equ [edi+12] ;цвет текста -op_text_ptr equ [edi+16] ;указатель на начало текстовой строки -op_text_length equ [edi+20] ;длина надписи (2^64 такой длины может быть текст) -op_optibox_gr equ [edi+22] +op_border_color equ [edi+4] ;цвет рамки optionbox +op_text_color equ [edi+8] ;цвет текста +op_text_ptr equ [edi+12] ;указатель на начало текстовой строки +op_text_length equ [edi+16] ;длина надписи (2^64 такой длины может быть текст) +op_optibox_gr equ [edi+18] option_box: .draw: pusha ;сохраним все регистры @@ -34,7 +33,7 @@ pusha ; ;pop cx ;[координата начала по оси y]*65536 + [координата начала по оси y] ;push cx add ecx,op_size ;[координата начала по оси y]*65536 + [координата конца по оси y] - mov edx,op_border_color ;Цвет линии + mov edx,dword op_border_color ;Цвет линии int 0x40 ;рисование вертикальной левой линии квадрата (прямоугольника) ; mov ebp,ebx ;сохраним регистр bx в регистре указателя базы @@ -70,10 +69,10 @@ pusha ; shl ecx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536) mov cx,bp ;восстановим значение регистра cx ;pop cx - mov edx,op_color ;загрузим цвет полосы + mov edx,dword [sc.work] ;загрузим цвет полосы int 0x40 ;закрасили - mov eax,op_optibox_gr + mov eax,dword op_optibox_gr mov dword eax,[eax] cmp eax,edi jne @f @@ -97,7 +96,7 @@ popa ; ret ;выйдем из процедуры .clear_op: ;очистка чек бокса - mov edx,op_color ;цвет внутри чек бокса + mov edx,dword [sc.work] ;цвет внутри чек бокса jmp @f ;безусловный прыжок на нижнюю метку @@ .draw_op: ;нарисовать включенный чек бокс @@ -133,10 +132,11 @@ pusha ;lea esi,[eax*2+eax] ;shl eax,1 imul esi,6 ; или можно и так умножить на 6 + xor ebx,ebx add esi,op_text_margin ;добавить 3 - расстояние от чек бокса до надписи mov eax,37 ;получим координаты мышки - mov ebx,1 ;добавить 1 + inc ebx ;добавить 1 int 0x40 ;получить координаты курсора относительно окна movzx ebx,word op_top ;загрузить в bx значение координаты у @@ -151,10 +151,10 @@ pusha cmp ax,bx ;сравнить регистры jl .mouse_end ;если меньше add ebx,op_size ;добавить длину стороны прямоугольника - add ebx,esi ;Учесть в значении по х еще и длину надписи к чекбоксу + add ebx,esi ;Учесть в значении по х еще и длину надписи к чекбоксу cmp ax,bx ;стравнить регистры jg .mouse_end ;если больше - mov eax,op_optibox_gr + mov eax,dword op_optibox_gr mov [eax],edi .mouse_end: @@ -162,18 +162,17 @@ popa ; ret ;выйти } -struc option_box left,top,color,border_color,text_color,text,text_length,point_gr,flags +struc option_box left,top,border_color,text_color,text,text_length,point_gr,flags { ;структура параметров для чек бокса .left: dw left ;+0 ;положение по х .top: dw top ;+2 ;положение по у -.color: dd color ;+4 ;цвет внутри чек бокса .border_color: dd border_color ;+8 цвет рамки .text_color: dd text_color ;+12 цвет текста надписи .text: dd text ;+16 адрес в коде программы где расположен текстр .text_length: dw text_length ; +20 длина текста .option_group: dd point_gr ;указатель на размещение edi - идентификатора optibox } -op_struc_size=26 ;общая структура 24 байт +op_struc_size=22 ;общая структура 24 байт op_flag_en=10b macro draw_option_boxes start,end ;рисовать чек боксы { @@ -197,7 +196,7 @@ macro mouse_option_boxes start,end ; mov ecx,((end-start)/op_struc_size) ;Количество чек боксов .home: - mov eax,[edi+22] ;op_optibox_gr + mov eax,[edi+18] ;op_optibox_gr mov dword eax,[eax] pusha