
ch_struc_size=36
ed_struc_size=76
ch_flag_en=10b

ch_left equ [edi]    ;координата начала рисования по х
ch_top equ [edi+2]   ;координата начала рисования по у
ch_text_margin equ [edi+4]      ;=4 расстояние от прямоугольника чек бокса до надписи 
ch_size equ [edi+8]             ;12 размер квадрата чек бокса 
ch_color equ [edi+12]           ;цвет внутри checkbox
ch_border_color equ [edi+16] ; or [edi+4] ;цвет рамки checkbox ее можно задать самостоятельно
ch_text_color equ   [edi+20];[edi+4]  ;цвет текста
ch_text_ptr equ [edi+24]    ;указатель на начало текстовой строки 
ch_text_length equ [edi+28]
ch_flags equ [edi+32]       ;флаги 

ed_width        equ [edi]               ;ширина компонента
ed_left         equ [edi+4]             ;положение по оси х
ed_top          equ [edi+8]             ;положение по оси у
ed_color        equ [edi+12]            ;цвет фона компонента
shift_color     equ [edi+16]            ;=0x6a9480 для примера возьем желеный цвет бокса
ed_focus_border_color   equ [edi+20]    ;цвет рамки компонента
ed_blur_border_color    equ [edi+24]    ;цвет не активного компонента
ed_text_color   equ [edi+28]            ;цвет текста
ed_max          equ [edi+32]                    ;кол-во символов которые можно максимально ввести
ed_text         equ [edi+36]                    ;указатель на буфер
ed_mouse_variable 	equ [edi+40]	; указатель на переменную для бокса/группы 
ed_flags        equ [edi+44]            ;флаги
bp_flags	equ [ebp+44]		;в некоторых процедурах edi используется, взамен указатель храниться в ebp
ed_size equ [edi+48]                    ;кол-во символов
bp_size equ [ebp+48]			;кол-во симвполов, для адресации испльзуется ebpб edi занят
ed_pos  equ [edi+52]                    ;позиция курсора
ed_offset       equ [edi+56]            ;смещение
cl_curs_x       equ [edi+60]            ;предыдущее координата курсора по х
cl_curs_y       equ [edi+64]            ;предыдущее координата курсора по у
ed_shift_pos    equ [edi+68]            ;положение курсора
ed_shift_pos_old equ [edi+72]           ;старое положение курсора

ed_struc_size=76
struc  edit_box width,left,top,color,shift_color,focus_border_color,\
       blur_border_color,text_color,max,text,mouse_variable,flags,size,pos
{
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Bit mask from editbox 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ed_figure_only= 1000000000000000b   ;одни символы 
ed_always_focus= 100000000000000b
ed_focus=                     10b   ;фокус приложения
ed_shift_on=                1000b   ;если не установлен -значит впервые нажат shift,если был установлен, значит мы уже что - то делали удерживая shift
ed_shift_on_off=1111111111110111b
ed_shift=                    100b   ;включается при нажатии на shift т.е. если нажимаю
ed_shift_off=   1111111111111011b
ed_shift_bac=              10000b   ;бит для очистки выделеного shift т.е. при установке говорит что есть выделение
ed_shift_bac_cl=1111111111101111b   ;очистка при удалении выделения
ed_shift_cl=    1111111111100011b
ed_shift_mcl=   1111111111111011b
ed_left_fl=               100000b
ed_right_fl=    1111111111011111b
ed_offset_fl=            1000000b
ed_offset_cl=   1111111110111111b
ed_insert=              10000000b
ed_insert_cl=   1111111101111111b
ed_mouse_on =          100000000b
ed_mous_adn_b=         100011000b
ed_mouse_on_off=1111111011111111b
ed_height=14 ; высота

.width dd width
.left dd left
.top dd top
.color dd color
.shift_color dd shift_color
.focus_border_color dd focus_border_color
.blur_border_color dd blur_border_color
.text_color dd text_color
.max dd max
.text dd text
.mouse_variable dd mouse_variable
.flags dd flags+0
.size dd size+0
.pos dd pos+0
.offset dd 0
.cl_curs_x dd 0
.cl_curs_y dd 0
.shift   dd 0
.shift_old   dd 0
}
macro edit_boxes_set_sys_color start,end,color_table
{
        mov     edi,start
        mov     ecx,((end-start)/ed_struc_size)
        mov     esi,color_table
@@:
        mov     eax,dword [esi+36]
        mov     ebx,dword [esi+20]
        push	dword eax
	pop     dword ed_focus_border_color
        shr     bh,1
        shr     bl,1
        shr     ah,1
        shr     al,1
        add     ah,bh
        add     al,bl
        ror     eax,16
        ror     ebx,16
        shr     bl,1
        shr     al,1
        add     al,bl
        ror     eax,16
	mov	dword ed_blur_border_color,eax
	mov	dword shift_color,eax
        add     edi,ed_struc_size
        loop    @b
}
macro get_sys_colors col_buf
{
        ;mov     eax,48
        push    48
        pop     eax
        ;mov     ebx,3
        push    3
        pop     ebx
        ;mov     ecx,col_buf
        push    col_buf
        pop     ecx
        ;mov     edx,40
        push    40
        pop     edx
        mcall
}
macro check_boxes_set_sys_color start,end,color_table
{
ch_left equ [edi]    ;координата начала рисования по х
ch_top equ [edi+2]   ;координата начала рисования по у
ch_text_margin equ [edi+4]      ;=4 расстояние от прямоугольника чек бокса до надписи 
ch_size equ [edi+8]             ;12 размер квадрата чек бокса 
ch_color equ [edi+12]           ;цвет внутри checkbox
ch_border_color equ [edi+16] ; or [edi+4] ;цвет рамки checkbox ее можно задать самостоятельно
ch_text_color equ   [edi+20];[edi+4]  ;цвет текста
ch_text_ptr equ [edi+24]    ;указатель на начало текстовой строки 
ch_text_length equ [edi+28]
ch_flags equ [edi+32]       ;флаги 


;ch_left equ [edi]    ;координата начала рисования по х
;ch_top equ [edi+2]   ;координата начала рисования по у
;ch_color equ [edi+4] ;цвет внутри checkbox
;ch_border_color equ [edi+8] ;цвет рамки checkbox
;ch_text_color equ [edi+12]  ;цвет текста
;ch_text_ptr equ [edi+16]    ;указатель на начало текстовой строки
;ch_text_length equ [edi+20] ;длина надписи (2^64 такой длины может быть текст)
;ch_flags equ [edi+24]       ;флаги

        mov     edi,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     edi,ch_struc_size
        loop    @b
}
struc check_box left,top,ch_text_margin,ch_size,color,border_color,text_color,text,ch_text_length,flags
{        ;структура параметров для чек бокса
ch_flag_en=10b
.left: dw left      ;+0        ;положение по х
.top: dw top        ;положение по у
.ch_text_margin:  dd ch_text_margin ;расстояние от прямоугольника чек бокса до надписи
.ch_size: dd ch_size ;размер квадрата чек бокса, для примера 12
.color: dd color    ;цвет внутри чекбокса
.border_color: dd border_color ;цвет рамки
.text_color: dd text_color     ;цвет надписи
.text: dd text                 ;адрес в коде программы где расположен текст
.ch_text_length: dd ch_text_length ;длинна строки с символами
.flags: dd flags+0   ; флаги        
}
struc option_box point_gr,left,top,op_text_margin,op_size,color,border_color,text_color,text,op_text_length,flags
{        ;структура параметров для чек бокса
op_flag_en=10b
.option_group: dd point_gr
.left: dw left      ;+0        ;положение по х
.top: dw top        ;положение по у
.ch_text_margin:  dd op_text_margin ;расстояние от прямоугольника чек бокса до надписи
.ch_size: dd op_size ;размер квадрата чек бокса, для примера 12
.color: dd color    ;цвет внутри чекбокса
.border_color: dd border_color ;цвет рамки
.text_color: dd text_color     ;цвет надписи
.text: dd text                 ;адрес в коде программы где расположен текст
.ch_text_length: dd op_text_length ;длинна строки с символами
.flags: dd flags+0   ; флаги        
}

