Subversion Repositories Kolibri OS

Rev

Rev 366 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;Оптимизированный компонент CheckBox (Исходный вариант от Maxxxx32)
  2. ;Оптимизирован вывод строки, надписи для CheckBox'a + теперь при проверке не ;происходит подсчет кол-ва символов в строке
  3. ;Оптимизация команд.
  4. ;21.02.2007 модернизация и поддержка двух разных вариантов с использованием сис цветов и старой схемой
  5. ;19.02.2007 общее улучшение кода, уменьшение размера и использование системных цветов для отображения checkbox
  6. ;22.08.2006 произведена оптимизация команд, приняты во внимание замечания DIAMOND'а.
  7. ;<Lrz>  - Теплов Алексей  www.lrz.land.ru
  8.  
  9. ;заголовок приложения
  10. use32                ; транслятор, использующий 32 разрядных команды
  11.     org 0x0                ; базовый адрес кода, всегда 0x0
  12.     db 'MENUET01'        ; идентификатор исполняемого файла (8 байт)
  13.     dd 0x1                ; версия формата заголовка исполняемого файла
  14.     dd start                ; адрес, на который система передаёт управление
  15.                         ; после загрузки приложения в память
  16.     dd i_end                ; размер приложения
  17.     dd (i_end+0x100) and not 3        ; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта
  18.     dd (i_end+0x100) and not 3        ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше
  19.     dd 0x0,0x0                ; указатель на строку с параметрами.
  20.                  ;    если после запуска неравно нулю, приложение было
  21.                  ;    запущено с параметрами из командной строки
  22.  
  23.                  ;    указатель на строку, в которую записан путь,
  24.                  ;    откуда запущено приложение
  25. ;------------------
  26.         include '..\..\..\..\macros.inc'
  27.         include 'check.inc'     ;включить файл check.inc
  28. ;        version_ch             ;необходимый макрос для включения "старой" версии check_box
  29.         version_ch1             ;необходимый макрос для включения new версии check_box1
  30. ;Недопустимо включение двух макросво version_ch1 и version_ch - они взамоисключают друг- дргуга.
  31.         use_check_box           ;используя макросы внести процедуры для рисования чек бокса
  32. ;Область кода
  33. align 4
  34. start:                          ;Точка входа в программу
  35.         mov  eax,48             ;получить системные цвета
  36.         mov  ebx,3
  37.         mov  ecx,sc
  38.         mov  edx,sizeof.system_colors
  39.         mcall
  40.  
  41.         mov  eax,40          ;установить маску для ожидаемых событий
  42.         mov  ebx,0x25        ;система будет реагировать только на сообщение о перерисовке,нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
  43.         mcall
  44. red_win:
  45.         call draw_window     ;первоначально необходимо нарисовать окно
  46. still:                       ;основной обработчик
  47.         mov  eax,10          ;Ожидать события
  48.         mcall            ;ожидать событие в течение 2 миллисекунд
  49.  
  50.         cmp al,0x1    ;если изменилось положение окна
  51.         jz  red_win
  52.         cmp al,0x3    ;если нажата кнопка то перейти
  53.         jz  button
  54.      mouse_check_boxes check_boxes,check_boxes_end  ;проверка чек бокса      
  55.         jmp still    ;если ничего из перечисленного то снова в цикл
  56. button:
  57.          or eax,-1       ;в eax,-1 - 5 ,байтов у нас же только 3  выйти
  58.          mcall ;далее выполняется выход из программы
  59.  
  60. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  61. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  62. draw_window:                ;рисование окна приложения
  63.     mov eax,12                ;в регистр внести значение = 12
  64.     mov ebx,1                 ;присвоить 1
  65.     mcall
  66.  
  67.     xor  eax,eax              ;обнулить eax
  68.     mov  ebx,50*65536+180     ;[координата по оси x]*65536 + [размер по оси x]
  69.     mov  ecx,30*65536+100     ;[координата по оси y]*65536 + [размер по оси y]
  70.     mov  edx,[sc.work]        ; color of work area RRGGBB,8->color gl
  71.     or   edx,0xb3000000
  72.     mov  edi,hed
  73.     mcall                 ;нарисовать окно приложения
  74.        
  75.         draw_check_boxes check_boxes,check_boxes_end ;рисование чекбоксов
  76.  
  77.     mov eax,12                ;Функция 12 - начать/закончить перерисовку окна.
  78.     mov ebx,2                 ;Подфункция 2 - закончить перерисовку окна.
  79.     mcall
  80.     ret
  81. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  82. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  83. ;DATA данные
  84. ;Формат данных чек бокса:
  85. ;10 - координата чек бокса по х
  86. ;30 - координата чек бокса по у
  87. ;0 - цвет заливки внутри чек бокса
  88. ;0xfffffff - цвет рамки чек бокса если нужно так используются ситемные цвета
  89. ;0 - цвет текста надписи  если нужно так используются ситемные цвета
  90. ;ch_text.1 - указатель на начало строки
  91. ;ch_text.e1-ch_text.1 - длина строки
  92. ;
  93. align 4
  94. check_boxes:
  95. ;ch1 check_box 10,15,0xffffff,0,0,ch_text.1,ch_text.e1-ch_text.1,ch_flag_en
  96. ;ch2 check_box 10,30,0xffffff,0,0,ch_text.2,ch_text.e2-ch_text.2
  97. ;ch3 check_box 10,45,0xffffff,0,0,ch_text.3,ch_text.e3-ch_text.3
  98.  
  99. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  100. ;DATA данные  для check_box1 - использует системные цвета
  101. ;Формат данных чек бокса:
  102. ;10 - координата чек бокса по х
  103. ;30 - координата чек бокса по у
  104. ;ch_text.1 - указатель на начало строки
  105. ;ch_text.e1-ch_text.1 - длина строки
  106.  
  107. ;
  108. ch1 check_box1 10,15,ch_text.1,ch_text.e1-ch_text.1,ch_flag_en
  109. ch2 check_box1 10,30,ch_text.2,ch_text.e2-ch_text.2
  110. ch3 check_box1 10,45,ch_text.3,ch_text.e3-ch_text.3
  111. check_boxes_end:
  112.  
  113. ch_text:        ;сопровождающий текст для чек боксов
  114. .1 db 'Check_Box #1'
  115. .e1:
  116. .2 db 'Check_Box #2'
  117. .e2:
  118. .3 db 'Check_Box #3'
  119. .e3:
  120.  
  121. hed db 'Checkbox [21.02.2007]',0        ;заголовок приложения
  122. sc     system_colors
  123. i_end:                ;конец кода