;Оптимизированный компонент CheckBox (Исходный вариант от Maxxxx32) ;Оптимизирован вывод строки, надписи для CheckBox'a + теперь при проверке не ;происходит подсчет кол-ва символов в строке ;Оптимизация команд. ;21.02.2007 модернизация и поддержка двух разных вариантов с использованием сис цветов и старой схемой ;19.02.2007 общее улучшение кода, уменьшение размера и использование системных цветов для отображения checkbox ;22.08.2006 произведена оптимизация команд, приняты во внимание замечания DIAMOND'а. ; - Теплов Алексей www.lrz.land.ru ;заголовок приложения use32 ; транслятор, использующий 32 разрядных команды org 0x0 ; базовый адрес кода, всегда 0x0 db 'MENUET01' ; идентификатор исполняемого файла (8 байт) dd 0x1 ; версия формата заголовка исполняемого файла dd start ; адрес, на который система передаёт управление ; после загрузки приложения в память dd i_end ; размер приложения dd i_end ; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта dd i_end ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше dd 0x0,0x0 ; указатель на строку с параметрами. ; если после запуска неравно нулю, приложение было ; запущено с параметрами из командной строки ; указатель на строку, в которую записан путь, ; откуда запущено приложение ;------------------ include '..\..\..\..\macros.inc' include 'check.inc' ;включить файл check.inc ; version_ch ;необходимый макрос для включения "старой" версии check_box version_ch1 ;необходимый макрос для включения new версии check_box1 ;Недопустимо включение двух макросво version_ch1 и version_ch - они взамоисключают друг- дргуга. use_check_box ;используя макросы внести процедуры для рисования чек бокса ;Область кода align 4 start: ;Точка входа в программу mov eax,48 ;получить системные цвета mov ebx,3 mov ecx,sc mov edx,sizeof.system_colors mcall mov eax,40 ;установить маску для ожидаемых событий mov ebx,0x25 ;система будет реагировать только на сообщение о перерисовке,нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении) mcall red_win: call draw_window ;первоначально необходимо нарисовать окно still: ;основной обработчик mov eax,10 ;Ожидать события mcall ;ожидать событие в течение 2 миллисекунд cmp al,0x1 ;если изменилось положение окна jz red_win cmp al,0x3 ;если нажата кнопка то перейти jz button mouse_check_boxes check_boxes,check_boxes_end ;проверка чек бокса jmp still ;если ничего из перечисленного то снова в цикл button: or eax,-1 ;в eax,-1 - 5 ,байтов у нас же только 3 выйти mcall ;далее выполняется выход из программы ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>> draw_window: ;рисование окна приложения mov eax,12 ;в регистр внести значение = 12 mov ebx,1 ;присвоить 1 mcall xor eax,eax ;обнулить eax mov ebx,50*65536+180 ;[координата по оси x]*65536 + [размер по оси x] mov ecx,30*65536+100 ;[координата по оси y]*65536 + [размер по оси y] mov edx,[sc.work] ; color of work area RRGGBB,8->color gl or edx,0xb3000000 mov edi,hed mcall ;нарисовать окно приложения draw_check_boxes check_boxes,check_boxes_end ;рисование чекбоксов mov eax,12 ;Функция 12 - начать/закончить перерисовку окна. mov ebx,2 ;Подфункция 2 - закончить перерисовку окна. mcall ret ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;DATA данные ;Формат данных чек бокса: ;10 - координата чек бокса по х ;30 - координата чек бокса по у ;0 - цвет заливки внутри чек бокса ;0xfffffff - цвет рамки чек бокса если нужно так используются ситемные цвета ;0 - цвет текста надписи если нужно так используются ситемные цвета ;ch_text.1 - указатель на начало строки ;ch_text.e1-ch_text.1 - длина строки ; align 4 check_boxes: ;ch1 check_box 10,15,0xffffff,0,0,ch_text.1,ch_text.e1-ch_text.1,ch_flag_en ;ch2 check_box 10,30,0xffffff,0,0,ch_text.2,ch_text.e2-ch_text.2 ;ch3 check_box 10,45,0xffffff,0,0,ch_text.3,ch_text.e3-ch_text.3 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;DATA данные для check_box1 - использует системные цвета ;Формат данных чек бокса: ;10 - координата чек бокса по х ;30 - координата чек бокса по у ;ch_text.1 - указатель на начало строки ;ch_text.e1-ch_text.1 - длина строки ; ch1 check_box1 10,15,ch_text.1,ch_text.e1-ch_text.1,ch_flag_en ch2 check_box1 10,30,ch_text.2,ch_text.e2-ch_text.2 ch3 check_box1 10,45,ch_text.3,ch_text.e3-ch_text.3 check_boxes_end: ch_text: ;сопровождающий текст для чек боксов .1 db 'Check_Box #1' .e1: .2 db 'Check_Box #2' .e2: .3 db 'Check_Box #3' .e3: hed db 'Checkbox [21.02.2007]',0 ;заголовок приложения align 16 sc system_colors rb 0x100 i_end: ;конец кода