Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
144 Lrz 1
;Оптимизированный компонент CheckBox (Исходный вариант от Maxxxx32)
2
;Оптимизирован вывод строки, надписи для CheckBox'a + теперь при проверке не ;происходит подсчет кол-ва символов в строке
3
;Оптимизация команд.
366 Lrz 4
;21.02.2007 модернизация и поддержка двух разных вариантов с использованием сис цветов и старой схемой
360 Lrz 5
;19.02.2007 общее улучшение кода, уменьшение размера и использование системных цветов для отображения checkbox
144 Lrz 6
;22.08.2006 произведена оптимизация команд, приняты во внимание замечания DIAMOND'а.
360 Lrz 7
;  - Теплов Алексей  www.lrz.land.ru
144 Lrz 8
 
9
;заголовок приложения
366 Lrz 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                ; указатель на строку с параметрами.
144 Lrz 20
                 ;    если после запуска неравно нулю, приложение было
21
                 ;    запущено с параметрами из командной строки
22
 
366 Lrz 23
                 ;    указатель на строку, в которую записан путь,
144 Lrz 24
                 ;    откуда запущено приложение
25
;------------------
485 heavyiron 26
        include '..\..\..\..\macros.inc'
366 Lrz 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           ;используя макросы внести процедуры для рисования чек бокса
144 Lrz 32
;Область кода
366 Lrz 33
align 4
34
start:                          ;Точка входа в программу
35
        mov  eax,48             ;получить системные цвета
36
        mov  ebx,3
37
        mov  ecx,sc
38
        mov  edx,sizeof.system_colors
485 heavyiron 39
        mcall
360 Lrz 40
 
366 Lrz 41
        mov  eax,40          ;установить маску для ожидаемых событий
42
        mov  ebx,0x25        ;система будет реагировать только на сообщение о перерисовке,нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
485 heavyiron 43
        mcall
144 Lrz 44
red_win:
366 Lrz 45
        call draw_window     ;первоначально необходимо нарисовать окно
46
still:                       ;основной обработчик
47
        mov  eax,10          ;Ожидать события
485 heavyiron 48
        mcall            ;ожидать событие в течение 2 миллисекунд
144 Lrz 49
 
366 Lrz 50
        cmp al,0x1    ;если изменилось положение окна
51
        jz  red_win
52
        cmp al,0x3    ;если нажата кнопка то перейти
53
        jz  button
144 Lrz 54
     mouse_check_boxes check_boxes,check_boxes_end  ;проверка чек бокса
366 Lrz 55
        jmp still    ;если ничего из перечисленного то снова в цикл
144 Lrz 56
button:
366 Lrz 57
         or eax,-1       ;в eax,-1 - 5 ,байтов у нас же только 3  выйти
485 heavyiron 58
         mcall ;далее выполняется выход из программы
144 Lrz 59
 
60
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
366 Lrz 61
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
62
draw_window:                ;рисование окна приложения
63
    mov eax,12                ;в регистр внести значение = 12
64
    mov ebx,1                 ;присвоить 1
485 heavyiron 65
    mcall
144 Lrz 66
 
366 Lrz 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
360 Lrz 71
    or   edx,0xb3000000
72
    mov  edi,hed
485 heavyiron 73
    mcall                 ;нарисовать окно приложения
360 Lrz 74
 
366 Lrz 75
        draw_check_boxes check_boxes,check_boxes_end ;рисование чекбоксов
144 Lrz 76
 
366 Lrz 77
    mov eax,12                ;Функция 12 - начать/закончить перерисовку окна.
78
    mov ebx,2                 ;Подфункция 2 - закончить перерисовку окна.
485 heavyiron 79
    mcall
144 Lrz 80
    ret
81
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
82
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
83
;DATA данные
84
;Формат данных чек бокса:
85
;10 - координата чек бокса по х
86
;30 - координата чек бокса по у
366 Lrz 87
;0 - цвет заливки внутри чек бокса
88
;0xfffffff - цвет рамки чек бокса если нужно так используются ситемные цвета
360 Lrz 89
;0 - цвет текста надписи  если нужно так используются ситемные цвета
144 Lrz 90
;ch_text.1 - указатель на начало строки
91
;ch_text.e1-ch_text.1 - длина строки
92
;
366 Lrz 93
align 4
144 Lrz 94
check_boxes:
366 Lrz 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
144 Lrz 111
check_boxes_end:
112
 
366 Lrz 113
ch_text:        ;сопровождающий текст для чек боксов
144 Lrz 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
 
366 Lrz 121
hed db 'Checkbox [21.02.2007]',0        ;заголовок приложения
360 Lrz 122
sc     system_colors
366 Lrz 123
i_end:                ;конец кода