Box lib tree list/ru: Difference between revisions
(Created page with '==Функции== *tl_data_init Конструктор элемента, нужно вызывать перед использованием элемента для выделе...') |
No edit summary |
||
Line 1: | Line 1: | ||
==Функции== | ==Функции== | ||
*tl_data_init | *'''tl_data_init''' - Конструктор элемента, нужно вызывать перед использованием элемента для выделения памяти и других настроек. | ||
Конструктор элемента, нужно вызывать перед использованием элемента для выделения памяти и других настроек. | *'''tl_data_clear''' - Деструктор элемента, чистит память по указателям: data_info, data_nodes, data_img и data_img_sys. Если в программе используется несколько элементов с одинаковыми иконками, то указатели data_img и data_img_sys нужно приравнять к 0 в других элементах, так что-бы при вызове деструкторов не было повторного удаления одних и тех же иконок. | ||
*tl_data_clear | *'''tl_info_clear''' - Очистка списка от всех узлов. Это действие нельзя отменить функцией tl_info_undo. | ||
Деструктор элемента, чистит память по указателям: data_info, data_nodes, data_img и data_img_sys. Если в программе используется несколько элементов с одинаковыми иконками, то указатели data_img и data_img_sys нужно приравнять к 0 в других элементах, так что-бы при вызове деструкторов не было повторного удаления одних и тех же иконок. | *'''tl_key''' - Функция которую нужно вызывать при нажатии на клавиатуру. Кнопки, которые не доступны если есть стиль tl_key_no_edit: [Enter], [Delete], [←], [→]. Всегда доступны: [↑], [↓], [Page Up], [Page Dn], [Space]. Функция проверяет включен ли режим scan кодов, и в случае необходимости сама преобразует коды. | ||
*tl_info_clear | *'''tl_mouse''' - функция для событий от мыши. | ||
Очистка списка от всех узлов. Это действие нельзя отменить функцией tl_info_undo. | *'''tl_draw''' - полная перерисовка окна элемента. | ||
*tl_key | *'''tl_info_undo''' - Отменяет добавление узлов. Действует только на весь узел целиком, не учитывая изменения внутри узлов. Т. е. нельзя отменить действия выполненные например функциями: tl_node_set_data, tl_node_lev_inc и им подобным. | ||
Функция которую нужно вызывать при нажатии на клавиатуру. Кнопки, которые не доступны если есть стиль tl_key_no_edit: [Enter], [Delete], [←], [→]. Всегда доступны: [↑], [↓], [Page Up], [Page Dn], [Space]. Функция проверяет включен ли режим scan кодов, и в случае необходимости сама преобразует коды. | *'''tl_info_redo''' - Повтор отмененных действий. Обратная функция по отношению к tl_info_undo. | ||
*tl_mouse | *'''tl_node_add''' - Добавляет узел, в позицию указанную курсором. Пример добавления узла: | ||
*tl_draw | |||
*tl_info_undo | |||
Отменяет добавление узлов. Действует только на весь узел целиком, не учитывая изменения внутри узлов. Т. е. нельзя отменить действия выполненные например функциями: tl_node_set_data, tl_node_lev_inc и им подобным. | |||
*tl_info_redo | |||
Повтор отмененных действий. Обратная функция по отношению к tl_info_undo. | |||
*tl_node_add | |||
Добавляет узел, в позицию указанную курсором. Пример добавления узла: | |||
<asm> push dword tree1 | <asm> push dword tree1 | ||
push dword 0x10002 | push dword 0x10002 | ||
Line 23: | Line 14: | ||
call dword[tl_node_add]</asm> | call dword[tl_node_add]</asm> | ||
где: tree1 - структура tree_list; 0x10002 - параметры узла (старшие байты 0x0001 - индекс иконки, отображаемой возле узла; меньший байт 0x02 - уровень вложености узла); data_buffer - указатель на дынные, добавляемые в узел. | где: tree1 - структура tree_list; 0x10002 - параметры узла (старшие байты 0x0001 - индекс иконки, отображаемой возле узла; меньший байт 0x02 - уровень вложености узла); data_buffer - указатель на дынные, добавляемые в узел. | ||
*tl_node_set_data | *'''tl_node_set_data''' - устанавливает новые данные (пользовательские и подпись) в узел под курсором. | ||
*'''tl_node_get_data''' - берет указатель на данные (пользовательские и подпись) из узла под курсором. | |||
*tl_node_get_data | *'''tl_node_delete''' - удаляет узел, но не окончательно, при необходимости узел можно вернуть функцией tl_info_undo. | ||
*'''tl_cur_beg''' - ставит курсор в начало списка, перематывает скроллинг если нужно. | |||
*tl_node_delete | *'''tl_cur_next''' - переносит курсор на одну позицию ниже. | ||
*'''tl_cur_perv''' - переносит курсор на одну позицию выше. | |||
*tl_cur_beg | *'''tl_node_close_open''' - Открывает или закрывает родительский узел. Если у узла нет дочерних элементов, то ничего не делает. Автоматически перерисовывает окно если состояние узла изменилось. | ||
*'''tl_node_lev_inc''' - Добавить уровень узла под курсором. Делает узел дочерним. | |||
*tl_cur_next | *'''tl_node_lev_dec''' - Уменьшает уровень узла под курсором. Делает узел родительским. | ||
*'''tl_node_move_up''' - Перемещает вверх узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции: | |||
*tl_cur_perv | |||
*tl_node_close_open | |||
Открывает или закрывает родительский узел. Если у узла нет дочерних элементов, то ничего не делает. Автоматически перерисовывает окно если состояние узла изменилось. | |||
*tl_node_lev_inc | |||
Добавить уровень узла под курсором. Делает узел дочерним. | |||
*tl_node_lev_dec | |||
Уменьшает уровень узла под курсором. Делает узел родительским. | |||
*tl_node_move_up | |||
Перемещает вверх узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции: | |||
<asm> push dword tree1 | <asm> push dword tree1 | ||
call dword[tl_node_move_up] ;переместить узел</asm> | call dword[tl_node_move_up] ;переместить узел</asm> | ||
где: tree1 - структура tree_list | где: tree1 - структура tree_list | ||
*tl_node_move_down | *'''tl_node_move_down''' | ||
Перемещает вниз узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции: | Перемещает вниз узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции: | ||
<asm> push dword tree1 | <asm> push dword tree1 | ||
call dword[tl_node_move_down] ;переместить узел</asm> | call dword[tl_node_move_down] ;переместить узел</asm> | ||
где: tree1 - структура tree_list | где: tree1 - структура tree_list | ||
*tl_node_poi_get_info | *'''tl_node_poi_get_info''' - берет внутренний указатель на структуру описывающую узел. | ||
*'''tl_node_poi_get_next_info''' - берет указатель на следующий элемент в цепи, без учета открытия/закрытия дочерних узлов. | |||
*tl_node_poi_get_next_info | *'''tl_node_poi_get_data''' - берет указатель на данные (пользовательские и подпись) из узла указанного в указателе. | ||
*tl_node_poi_get_data | |||
Функциями tl_node_poi_get_info, tl_node_poi_get_next_info и tl_node_poi_get_data можно считывать информацию о узлах элемента, при этом не меняя текущего положения курсора. Т. е. можно организовать доступ к даным элемента в "фоновом режиме". | Функциями tl_node_poi_get_info, tl_node_poi_get_next_info и tl_node_poi_get_data можно считывать информацию о узлах элемента, при этом не меняя текущего положения курсора. Т. е. можно организовать доступ к даным элемента в "фоновом режиме". | ||
*tl_save_mem | *'''tl_save_mem''' - Сохраняет информацию об узлах элемента в память. Пример использования функции: | ||
Сохраняет информацию об узлах элемента в память. Пример использования функции: | |||
<asm> MEM_SIZE equ 5000 | <asm> MEM_SIZE equ 5000 | ||
node_data rb MEM_SIZE | node_data rb MEM_SIZE | ||
Line 71: | Line 48: | ||
pop eax</asm> | pop eax</asm> | ||
где: tree1 - структура tree_list; 0 - опция сохранения в начало блока памяти (если = 1, то добавляет элемент после других сохраненных ранее); node_data - указатель на блок памяти; MEM_SIZE - размер блока памяти для сохранения. В регистр eax пишется значение 0 или записываются коды ошибок сохранения. | где: tree1 - структура tree_list; 0 - опция сохранения в начало блока памяти (если = 1, то добавляет элемент после других сохраненных ранее); node_data - указатель на блок памяти; MEM_SIZE - размер блока памяти для сохранения. В регистр eax пишется значение 0 или записываются коды ошибок сохранения. | ||
*tl_load_mem | *'''tl_load_mem''' - Загружает информацию об узлах элемента из памяти. Пример использования функции: | ||
Загружает информацию об узлах элемента из памяти. Пример использования функции: | |||
<asm> MEM_SIZE equ 5000 | <asm> MEM_SIZE equ 5000 | ||
node_data rb MEM_SIZE | node_data rb MEM_SIZE | ||
Line 83: | Line 59: | ||
pop eax</asm> | pop eax</asm> | ||
где: tree1 - структура tree_list; 0 - индекс считываемого элемента; node_data - указатель на блок памяти; MEM_SIZE - размер блока памяти для сохранения. В регистр eax пишется значение 0 или записываются коды ошибок считывания. | где: tree1 - структура tree_list; 0 - индекс считываемого элемента; node_data - указатель на блок памяти; MEM_SIZE - размер блока памяти для сохранения. В регистр eax пишется значение 0 или записываются коды ошибок считывания. | ||
*tl_get_mem_size | *'''tl_get_mem_size''' - Вычисляет размер блока памяти (в который были раньше сохранены элементы). Эту функцию можно использовать перед сохранением на диск, для получения точного размера сохраняемых данных. | ||
Вычисляет размер блока памяти (в который были раньше сохранены элементы). Эту функцию можно использовать перед сохранением на диск, для получения точного размера сохраняемых данных. | *'''version_tree_list''' - версия элемента | ||
*version_tree_list | |||
==Структура tree_list== | ==Структура tree_list== | ||
<asm>struc tree_list info_size,info_max_count,style, img_cx,img_cy,\ | <asm>struc tree_list info_size,info_max_count,style, img_cx,img_cy,\ | ||
Line 120: | Line 94: | ||
.on_press dd on_press | .on_press dd on_press | ||
}</asm> | }</asm> | ||
*info_size - количество байт, которое будет выделено для каждого узла. Часть этой памяти пользователь может использовать для своих целей (регулируется через info_capt_offs и info_capt_len) а остальная часть будет использована как подпись узла. | *''info_size'' - количество байт, которое будет выделено для каждого узла. Часть этой памяти пользователь может использовать для своих целей (регулируется через info_capt_offs и info_capt_len) а остальная часть будет использована как подпись узла. | ||
*info_max_count - максимальное количество узлов, которые можно добавить в элемент. | *''info_max_count'' - максимальное количество узлов, которые можно добавить в элемент. | ||
*style - стили элемента. | *''style'' - стили элемента. | ||
*data_nodes - указатель на внутренние структуры узлов (TreeList). | *''data_nodes'' - указатель на внутренние структуры узлов (TreeList). | ||
*data_img - указатель на изображения с иконками узлов. | *''data_img'' - указатель на изображения с иконками узлов. | ||
*data_img_sys - указатель на системные изображения (курсор, плюсики, линии, ... все кроме иконок узлов). | *''data_img_sys'' - указатель на системные изображения (курсор, плюсики, линии, ... все кроме иконок узлов). | ||
*capt_cy - высота строки для подписи вверху элемента, если меньше 9 подпись не выводится. | *''capt_cy'' - высота строки для подписи вверху элемента, если меньше 9 подпись не выводится. | ||
*info_capt_len - длинна текста для подписи. Если равно 0, то длинна считается так: info_size - info_capt_offs. | *''info_capt_len'' - длинна текста для подписи. Если равно 0, то длинна считается так: info_size - info_capt_offs. | ||
*p_scrol - указатель на структуру скроллинга, связанного с данным элементом. | *''p_scrol'' - указатель на структуру скроллинга, связанного с данным элементом. | ||
*on_press - указатель на функцию, которая будет вызвана при нажитии [Enter]. Если указатель равен 0 то ничего не будет вызыватся. | *''on_press'' - указатель на функцию, которая будет вызвана при нажитии [Enter]. Если указатель равен 0 то ничего не будет вызыватся. | ||
Пример создания структуры: | Пример создания структуры: | ||
Line 143: | Line 117: | ||
*tl_list_box_mode | *tl_list_box_mode | ||
Стиль не отображает уровни (как в ListBox все узлы одного уровня). | Стиль не отображает уровни (как в ListBox все узлы одного уровня). | ||
==Пример== | |||
Пример использования элемента ''tree_list''. Для компиляции в ''include'' нужно указать полный путь к папке ''svn''. Программа использует 2 файла с иконками ''tl_sys_16.bmp'' и ''tl_nod_16.bmp'' из папки ''svn\programs\develop\libraries\box_lib\trunk''. | |||
<asm>use32 | |||
org 0x0 | |||
db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт | |||
dd 0x1 | |||
dd start | |||
dd i_end ; размер приложения | |||
dd mem | |||
dd stacktop | |||
dd file_name | |||
dd cur_dir_path | |||
include 'svn/programs/macros.inc' | |||
include 'svn/programs/proc32.inc' | |||
include 'svn/programs/develop/libraries/box_lib/trunk/box_lib.mac' | |||
include 'svn/programs/develop/libraries/box_lib/load_lib.mac' | |||
include 'mem.inc' ;функции mem.Alloc,mem.Free,mem.ReAlloc | |||
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,0 | |||
struct FileInfoBlock | |||
Function dd ? | |||
Position dd ? | |||
Flags dd ? | |||
Count dd ? | |||
Buffer dd ? | |||
db ? | |||
FileName dd ? | |||
ends | |||
fn_icon1 db 'tl_sys_16.bmp',0 | |||
fn_icon2 db 'tl_nod_16.bmp',0 | |||
bmp_icon dd 0 | |||
run_file_70 FileInfoBlock | |||
align 4 | |||
start: | |||
sys_load_library library_name, cur_dir_path, library_path, system_path, \ | |||
err_message_found_lib, head_f_l, boxlib_import, err_message_import, head_f_i | |||
; cmp eax,-1 | |||
; jz button.exit | |||
mcall 48,3,sc,sizeof.system_colors | |||
mcall 40,0x27 ;маска ожидаемых событий | |||
mcall 68,11 | |||
stdcall dword[tl_data_init], dword tree1 | |||
; читаем *.bmp файл с системными иконками | |||
copy_path fn_icon1,cur_dir_path,file_name,0 | |||
mov ecx,3*256*13 | |||
stdcall mem.Alloc,ecx | |||
mov [bmp_icon],eax | |||
mov [run_file_70.Buffer], eax | |||
mov eax,70 ;load icon file | |||
mov [run_file_70.Function], 0 | |||
mov [run_file_70.Position], 54 | |||
mov [run_file_70.Flags], 0 | |||
mov [run_file_70.Count], ecx | |||
mov byte[run_file_70+20], 0 | |||
mov [run_file_70.FileName], file_name | |||
mov ebx,run_file_70 | |||
int 0x40 | |||
cmp ebx,0 | |||
jl @f | |||
m2m dword[tree1.data_img_sys],dword[bmp_icon] | |||
@@: | |||
; читаем *.bmp файл с иконками узлов | |||
copy_path fn_icon2,cur_dir_path,file_name,0 | |||
mov ecx,3*256*13 | |||
stdcall mem.Alloc,ecx | |||
mov [bmp_icon],eax | |||
mov [run_file_70.Buffer], eax | |||
mov eax,70 ;load icon file | |||
;mov [run_file_70.Function], 0 | |||
;mov [run_file_70.Position], 54 | |||
;mov [run_file_70.Flags], 0 | |||
mov [run_file_70.Count], ecx | |||
mov byte[run_file_70+20], 0 | |||
mov [run_file_70.FileName], file_name | |||
mov ebx,run_file_70 | |||
int 0x40 | |||
cmp ebx,0 | |||
jl @f | |||
m2m dword[tree1.data_img],dword[bmp_icon] | |||
@@: | |||
;перерисовка окна | |||
align 4 | |||
red_win: | |||
mcall 12,1 | |||
xor eax,eax | |||
mov ebx,30*65536+320 | |||
mov ecx,25*65536+255 | |||
mov edx,[sc.work] | |||
or edx,0x33000000 | |||
mov edi,hed | |||
mcall | |||
mov eax,8 ;кнопка | |||
mov ebx,215*65536+85 | |||
mov ecx,5*65536+15 | |||
mov edx,2 | |||
mov esi,[sc.work_button] | |||
int 0x40 | |||
mov ebx,215*65536+60 | |||
mov ecx,25*65536+15 | |||
mov edx,3 | |||
; mov esi,0xffd000 | |||
int 0x40 | |||
mov ebx,215*65536+85 | |||
mov ecx,45*65536+15 | |||
mov edx,4 | |||
int 0x40 | |||
mov ecx,65*65536+15 | |||
mov edx,5 | |||
int 0x40 | |||
mov ecx,85*65536+15 | |||
mov edx,6 | |||
int 0x40 | |||
mov ecx,105*65536+15 | |||
mov edx,7 | |||
int 0x40 | |||
mov ecx,125*65536+15 | |||
mov edx,8 | |||
int 0x40 | |||
mov ecx,145*65536+15 | |||
mov edx,9 | |||
int 0x40 | |||
mov ecx,165*65536+15 | |||
mov edx,10 | |||
int 0x40 | |||
mov ecx,185*65536+15 | |||
mov edx,11 | |||
int 0x40 | |||
mov ecx,205*65536+15 | |||
mov edx,12 | |||
int 0x40 | |||
mov ebx,280*65536+20 | |||
mov ecx,25*65536+15 | |||
mov edx,100 | |||
mov esi,0xd0d0 | |||
int 0x40 | |||
mov eax,4 ;рисование текста | |||
mov ebx,10*65536+25 | |||
mov ecx,[sc.work_button_text] | |||
or ecx,0x80000000 | |||
mov edx,dword[node_data] | |||
int 0x40 | |||
mov eax,4 ;рисование текста | |||
mov ebx,220*65536+10 | |||
mov edx,txt10 | |||
int 0x40 | |||
mov ebx,220*65536+30 | |||
mov edx,txt11 | |||
int 0x40 | |||
mov ebx,220*65536+50 | |||
mov edx,txt12 | |||
int 0x40 | |||
mov ebx,220*65536+70 | |||
mov edx,txt13 | |||
int 0x40 | |||
mov ebx,220*65536+90 | |||
mov edx,txt14 | |||
int 0x40 | |||
mov ebx,220*65536+110 | |||
mov edx,txt15 | |||
int 0x40 | |||
mov ebx,220*65536+130 | |||
mov edx,txt16 | |||
int 0x40 | |||
mov ebx,220*65536+150 | |||
mov edx,txt17 | |||
int 0x40 | |||
mov ebx,220*65536+170 | |||
mov edx,txt18 | |||
int 0x40 | |||
mov ebx,220*65536+190 | |||
mov edx,txt19 | |||
int 0x40 | |||
mov ebx,220*65536+210 | |||
mov edx,txt20 | |||
int 0x40 | |||
stdcall dword[tl_draw], dword tree1 | |||
stdcall [edit_box_draw], dword edit1 | |||
mov dword[wScr.all_redraw],1 | |||
stdcall [scrollbar_ver_draw], dword wScr | |||
mcall 12,2 | |||
align 4 | |||
still: | |||
mcall 10 | |||
cmp al,0x1 ;изм. положение окна | |||
jz red_win | |||
cmp al,0x2 | |||
jz key | |||
cmp al,0x3 | |||
jz button | |||
cmp al,0x6 | |||
jz mouse | |||
jmp still | |||
align 4 | |||
key: | |||
mcall 2 | |||
stdcall [tl_key], dword tree1 | |||
stdcall [edit_box_key], dword edit1 | |||
jmp still | |||
align 4 | |||
button: | |||
mcall 17 ;получить код нажатой кнопки | |||
cmp ah,2 | |||
jz but_clear | |||
cmp ah,3 | |||
jz but_add_node | |||
cmp ah,4 | |||
jz but_undo | |||
cmp ah,5 | |||
jz but_redo | |||
cmp ah,6 | |||
jz but_lev_add | |||
cmp ah,7 | |||
jz but_lev_dec | |||
cmp ah,8 | |||
jz but_node_set_data | |||
cmp ah,9 | |||
jz but_node_get_data | |||
cmp ah,10 | |||
jz but_node_delete | |||
cmp ah,11 | |||
jz but_node_move_up | |||
cmp ah,12 | |||
jz but_node_move_down | |||
cmp ah,100 | |||
jz but_add_node_2 | |||
cmp ah,1 | |||
jne still | |||
.exit: | |||
; stdcall mem.Free,[bmp_icon] | |||
stdcall dword[tl_data_clear], dword tree1 | |||
mcall -1 ;выход из программы | |||
align 4 | |||
mouse: | |||
stdcall [tl_mouse], dword tree1 | |||
stdcall [edit_box_mouse], dword edit1 | |||
jmp still | |||
but_clear: | |||
stdcall dword[tl_info_clear], dword tree1 | |||
stdcall dword[tl_draw], dword tree1 | |||
jmp still | |||
;добавляем узел (иконка которого будет с индексом 0) | |||
but_add_node: | |||
stdcall dword[tl_node_add], dword ed_buffer, dword 0, dword tree1 | |||
stdcall dword[tl_draw], dword tree1 | |||
jmp still | |||
;добавляем узел (иконка которого будет с индексом 1) | |||
but_add_node_2: | |||
stdcall dword[tl_node_add], dword ed_buffer, dword 0x10000, dword tree1 | |||
stdcall dword[tl_draw], dword tree1 | |||
jmp still | |||
but_undo: | |||
stdcall dword[tl_info_undo], dword tree1 | |||
stdcall dword[tl_draw], dword tree1 | |||
jmp still | |||
but_redo: | |||
stdcall dword[tl_info_redo], dword tree1 | |||
stdcall dword[tl_draw], dword tree1 | |||
jmp still | |||
but_lev_add: | |||
stdcall dword[tl_node_lev_inc], dword tree1 | |||
stdcall dword[tl_draw], dword tree1 | |||
jmp still | |||
but_lev_dec: | |||
stdcall dword[tl_node_lev_dec], dword tree1 | |||
stdcall dword[tl_draw], dword tree1 | |||
jmp still | |||
;устанавливаем (новые) данные узла | |||
but_node_set_data: | |||
stdcall dword[tl_node_set_data], dword ed_buffer, dword tree1 | |||
stdcall dword[tl_draw], dword tree1 | |||
jmp still | |||
;берем указатель на данные узла | |||
but_node_get_data: | |||
stdcall dword[tl_node_get_data], dword tree1 | |||
pop dword[node_data] | |||
jmp red_win ;still | |||
;удаляем узел | |||
but_node_delete: | |||
stdcall dword[tl_node_delete], dword tree1 | |||
stdcall dword[tl_draw], dword tree1 | |||
jmp still | |||
;функция вызываемая при нажатии [Enter] | |||
align 4 | |||
fun_on_enter: | |||
stdcall dword[tl_node_set_data], dword txt_on_enter, dword tree1 | |||
stdcall dword[tl_draw], dword tree1 | |||
ret | |||
but_node_move_up: | |||
stdcall dword[tl_node_move_up], dword tree1 | |||
jmp still | |||
but_node_move_down: | |||
stdcall dword[tl_node_move_down], dword tree1 | |||
jmp still | |||
;подписи на кнопки | |||
txt10 db 'List Clear',0 | |||
txt11 db 'Node add',0 | |||
txt12 db 'List Undo',0 | |||
txt13 db 'List Redo',0 | |||
txt14 db 'Node lev >>',0 | |||
txt15 db 'Node lev <<',0 | |||
txt16 db 'Node set data',0 | |||
txt17 db 'Node get data',0 | |||
txt18 db 'Node delete',0 | |||
txt19 db 'Node move ',24,0 ;24 up | |||
txt20 db 'Node move ',25,0 ;25 down | |||
;таблица импортируемых функций | |||
align 4 | |||
boxlib_import: | |||
dd sz_lib_init ;функция запускается макросом 1 раз при подключении бибилиотеки, потому в программе метка на нее не нужна | |||
edit_box_draw dd sz_Edit_box_draw | |||
edit_box_key dd sz_Edit_box_key | |||
edit_box_mouse dd sz_Edit_box_mouse | |||
version_ed dd sz_Version_ed | |||
scrollbar_ver_draw dd sz_Scrollbar_ver_draw | |||
scrollbar_ver_mouse dd sz_Scrollbar_ver_mouse | |||
scrollbar_hor_draw dd sz_Scrollbar_hor_draw | |||
scrollbar_hor_mouse dd sz_Scrollbar_hor_mouse | |||
version_scrollbar dd sz_Version_scrollbar | |||
tl_data_init dd sz_tl_data_init | |||
tl_data_clear dd sz_tl_data_clear | |||
tl_info_clear dd sz_tl_info_clear | |||
tl_key dd sz_tl_key | |||
tl_mouse dd sz_tl_mouse | |||
tl_draw dd sz_tl_draw | |||
tl_info_undo dd sz_tl_info_undo | |||
tl_info_redo dd sz_tl_info_redo | |||
tl_node_add dd sz_tl_node_add | |||
tl_node_set_data dd sz_tl_node_set_data | |||
tl_node_get_data dd sz_tl_node_get_data | |||
tl_node_delete dd sz_tl_node_delete | |||
tl_cur_beg dd sz_tl_cur_beg | |||
tl_cur_next dd sz_tl_cur_next | |||
tl_cur_perv dd sz_tl_cur_perv | |||
tl_node_close_open dd sz_tl_node_close_open | |||
tl_node_lev_inc dd sz_tl_node_lev_inc | |||
tl_node_lev_dec dd sz_tl_node_lev_dec | |||
tl_node_move_up dd sz_tl_node_move_up | |||
tl_node_move_down dd sz_tl_node_move_down | |||
dd 0,0 | |||
sz_lib_init db 'lib_init',0 | |||
sz_Edit_box_draw db 'edit_box',0 | |||
sz_Edit_box_key db 'edit_box_key',0 | |||
sz_Edit_box_mouse db 'edit_box_mouse',0 | |||
sz_Version_ed db 'version_ed',0 | |||
sz_Scrollbar_ver_draw db 'scrollbar_v_draw',0 | |||
sz_Scrollbar_ver_mouse db 'scrollbar_v_mouse',0 | |||
sz_Scrollbar_hor_draw db 'scrollbar_h_draw',0 | |||
sz_Scrollbar_hor_mouse db 'scrollbar_h_mouse',0 | |||
sz_Version_scrollbar db 'version_scrollbar',0 | |||
sz_tl_data_init db 'tl_data_init',0 | |||
sz_tl_data_clear db 'tl_data_clear',0 | |||
sz_tl_info_clear db 'tl_info_clear',0 | |||
sz_tl_key db 'tl_key',0 | |||
sz_tl_mouse db 'tl_mouse',0 | |||
sz_tl_draw db 'tl_draw',0 | |||
sz_tl_info_undo db 'tl_info_undo',0 | |||
sz_tl_info_redo db 'tl_info_redo',0 | |||
sz_tl_node_add db 'tl_node_add',0 | |||
sz_tl_node_set_data db 'tl_node_set_data',0 | |||
sz_tl_node_get_data db 'tl_node_get_data',0 | |||
sz_tl_node_delete db 'tl_node_delete',0 | |||
sz_tl_cur_beg db 'tl_cur_beg',0 | |||
sz_tl_cur_next db 'tl_cur_next',0 | |||
sz_tl_cur_perv db 'tl_cur_perv',0 | |||
sz_tl_node_close_open db 'tl_node_close_open',0 | |||
sz_tl_node_lev_inc db 'tl_node_lev_inc',0 | |||
sz_tl_node_lev_dec db 'tl_node_lev_dec',0 | |||
sz_tl_node_move_up db 'tl_node_move_up',0 | |||
sz_tl_node_move_down db 'tl_node_move_down',0 | |||
;структура элемента tree_list | |||
tree1 tree_list 24,500, tl_draw_par_line, 16,16, 0x8080ff,0x0000ff,0xffffff,\ | |||
10,35,200-16,185, 14,4,0, el_focus, wScr,fun_on_enter | |||
;структура для дочернего скроллинга | |||
align 4 | |||
wScr: | |||
.x: | |||
.size_x dw 16 ;+0 | |||
.start_x dw 210-16 ;+2 | |||
.y: | |||
.size_y dw 185 ;+4 | |||
.start_y dw 35 ;+6 | |||
.btn_high dd 15 ;+8 | |||
.type dd 1 ;+12 | |||
.max_area dd 100 ;+16 | |||
.cur_area dd 30 ;+20 | |||
.position dd 0 ;+24 | |||
.bckg_col dd 0xeeeeee ;+28 | |||
.frnt_col dd 0xbbddff ;+32 | |||
.line_col dd 0 ;+36 | |||
.redraw dd 0 ;+40 | |||
.delta dw 0 ;+44 | |||
.delta2 dw 0 ;+46 | |||
.run_x: | |||
.r_size_x dw 0 ;+48 | |||
.r_start_x dw 0 ;+50 | |||
.run_y: | |||
.r_size_y dw 0 ;+52 | |||
.r_start_y dw 0 ;+54 | |||
.m_pos dd 0 ;+56 | |||
.m_pos_2 dd 0 ;+60 | |||
.m_keys dd 0 ;+64 | |||
.run_size dd 0 ;+68 | |||
.position2 dd 0 ;+72 | |||
.work_size dd 0 ;+76 | |||
.all_redraw dd 0 ;+80 | |||
.ar_offset dd 1 ;+84 | |||
;структура элемента editbox | |||
edit1 edit_box 200, 10, 5, 0xffffff, 0x80ff, 0xff0080, 0, 0xff, 80, ed_buffer, mouse_dd, ed_focus, 13, 13 | |||
ed_buffer: db 'dataNode Text',0 | |||
rb 69 | |||
txt_on_enter db '1111Enter',0 | |||
hed db 'Tree (Image) List 13.06.10',0 | |||
sc system_colors | |||
;------------------------------------------------------------------------------- | |||
err_message_import db 'Ошибка при импорте box_lib.obj',0 | |||
err_message_found_lib db 'Ошибка при поиске box_lib.obj',0 ;строка, которая будет в сформированном окне, если библиотека не будет найдена | |||
head_f_i: | |||
head_f_l db 'System error',0 ;заголовок окна, при возникновении ошибки | |||
system_path db '/sys/lib/' | |||
library_name db 'box_lib.obj',0 | |||
node_data dd 0 | |||
el_focus dd tree1 | |||
mouse_dd dd ? | |||
i_end: ;конец кода | |||
rb 1024 | |||
cur_dir_path rb 4096 | |||
library_path rb 4096 | |||
file_name rb 4096 | |||
stacktop: | |||
mem:</asm> |
Revision as of 21:12, 13 June 2010
Функции
- tl_data_init - Конструктор элемента, нужно вызывать перед использованием элемента для выделения памяти и других настроек.
- tl_data_clear - Деструктор элемента, чистит память по указателям: data_info, data_nodes, data_img и data_img_sys. Если в программе используется несколько элементов с одинаковыми иконками, то указатели data_img и data_img_sys нужно приравнять к 0 в других элементах, так что-бы при вызове деструкторов не было повторного удаления одних и тех же иконок.
- tl_info_clear - Очистка списка от всех узлов. Это действие нельзя отменить функцией tl_info_undo.
- tl_key - Функция которую нужно вызывать при нажатии на клавиатуру. Кнопки, которые не доступны если есть стиль tl_key_no_edit: [Enter], [Delete], [←], [→]. Всегда доступны: [↑], [↓], [Page Up], [Page Dn], [Space]. Функция проверяет включен ли режим scan кодов, и в случае необходимости сама преобразует коды.
- tl_mouse - функция для событий от мыши.
- tl_draw - полная перерисовка окна элемента.
- tl_info_undo - Отменяет добавление узлов. Действует только на весь узел целиком, не учитывая изменения внутри узлов. Т. е. нельзя отменить действия выполненные например функциями: tl_node_set_data, tl_node_lev_inc и им подобным.
- tl_info_redo - Повтор отмененных действий. Обратная функция по отношению к tl_info_undo.
- tl_node_add - Добавляет узел, в позицию указанную курсором. Пример добавления узла:
<asm> push dword tree1
push dword 0x10002 push dword data_buffer call dword[tl_node_add]</asm>
где: tree1 - структура tree_list; 0x10002 - параметры узла (старшие байты 0x0001 - индекс иконки, отображаемой возле узла; меньший байт 0x02 - уровень вложености узла); data_buffer - указатель на дынные, добавляемые в узел.
- tl_node_set_data - устанавливает новые данные (пользовательские и подпись) в узел под курсором.
- tl_node_get_data - берет указатель на данные (пользовательские и подпись) из узла под курсором.
- tl_node_delete - удаляет узел, но не окончательно, при необходимости узел можно вернуть функцией tl_info_undo.
- tl_cur_beg - ставит курсор в начало списка, перематывает скроллинг если нужно.
- tl_cur_next - переносит курсор на одну позицию ниже.
- tl_cur_perv - переносит курсор на одну позицию выше.
- tl_node_close_open - Открывает или закрывает родительский узел. Если у узла нет дочерних элементов, то ничего не делает. Автоматически перерисовывает окно если состояние узла изменилось.
- tl_node_lev_inc - Добавить уровень узла под курсором. Делает узел дочерним.
- tl_node_lev_dec - Уменьшает уровень узла под курсором. Делает узел родительским.
- tl_node_move_up - Перемещает вверх узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции:
<asm> push dword tree1
call dword[tl_node_move_up] ;переместить узел</asm>
где: tree1 - структура tree_list
- tl_node_move_down
Перемещает вниз узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции: <asm> push dword tree1
call dword[tl_node_move_down] ;переместить узел</asm>
где: tree1 - структура tree_list
- tl_node_poi_get_info - берет внутренний указатель на структуру описывающую узел.
- tl_node_poi_get_next_info - берет указатель на следующий элемент в цепи, без учета открытия/закрытия дочерних узлов.
- tl_node_poi_get_data - берет указатель на данные (пользовательские и подпись) из узла указанного в указателе.
Функциями tl_node_poi_get_info, tl_node_poi_get_next_info и tl_node_poi_get_data можно считывать информацию о узлах элемента, при этом не меняя текущего положения курсора. Т. е. можно организовать доступ к даным элемента в "фоновом режиме".
- tl_save_mem - Сохраняет информацию об узлах элемента в память. Пример использования функции:
<asm> MEM_SIZE equ 5000
node_data rb MEM_SIZE
.........
push dword tree1 push dword 0 push dword node_data push dword MEM_SIZE call dword[tl_save_mem] pop eax</asm>
где: tree1 - структура tree_list; 0 - опция сохранения в начало блока памяти (если = 1, то добавляет элемент после других сохраненных ранее); node_data - указатель на блок памяти; MEM_SIZE - размер блока памяти для сохранения. В регистр eax пишется значение 0 или записываются коды ошибок сохранения.
- tl_load_mem - Загружает информацию об узлах элемента из памяти. Пример использования функции:
<asm> MEM_SIZE equ 5000
node_data rb MEM_SIZE
.........
push dword tree1 push dword 0 push dword node_data push dword MEM_SIZE call dword[tl_load_mem] pop eax</asm>
где: tree1 - структура tree_list; 0 - индекс считываемого элемента; node_data - указатель на блок памяти; MEM_SIZE - размер блока памяти для сохранения. В регистр eax пишется значение 0 или записываются коды ошибок считывания.
- tl_get_mem_size - Вычисляет размер блока памяти (в который были раньше сохранены элементы). Эту функцию можно использовать перед сохранением на диск, для получения точного размера сохраняемых данных.
- version_tree_list - версия элемента
Структура tree_list
<asm>struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\ info_capt_len,el_focus, p_scrol,on_press { .data_info dd 0 .info_size dw info_size .info_max_count dd info_max_count .style dd style .data_nodes dd 0 .data_img dd 0 .img_cx dw img_cx .img_cy dw img_cy .data_img_sys dd 0 .ch_tim dd 0 .ls_tim dd 0 .tim_undo dd 0 .cur_pos dd 0 .col_bkg dd col_bkg .col_zag dd col_zag .col_txt dd col_txt .box_left dd box_l .box_top dd box_t .box_width dd box_w .box_height dd box_h .capt_cy dw capt_cy .info_capt_offs dw info_capt_offs .info_capt_len dw info_capt_len .el_focus dd el_focus .p_scrol dd p_scrol rb 4 .on_activate dd 0 .on_press dd on_press
}</asm>
- info_size - количество байт, которое будет выделено для каждого узла. Часть этой памяти пользователь может использовать для своих целей (регулируется через info_capt_offs и info_capt_len) а остальная часть будет использована как подпись узла.
- info_max_count - максимальное количество узлов, которые можно добавить в элемент.
- style - стили элемента.
- data_nodes - указатель на внутренние структуры узлов (TreeList).
- data_img - указатель на изображения с иконками узлов.
- data_img_sys - указатель на системные изображения (курсор, плюсики, линии, ... все кроме иконок узлов).
- capt_cy - высота строки для подписи вверху элемента, если меньше 9 подпись не выводится.
- info_capt_len - длинна текста для подписи. Если равно 0, то длинна считается так: info_size - info_capt_offs.
- p_scrol - указатель на структуру скроллинга, связанного с данным элементом.
- on_press - указатель на функцию, которая будет вызвана при нажитии [Enter]. Если указатель равен 0 то ничего не будет вызыватся.
Пример создания структуры: <asm>tree1 tree_list 24,500, tl_draw_par_line+tl_list_box_mode, 16,16,\
0x8080ff,0x0000ff,0xffffff, 10,35,200-16,285, 14,4,0,\ el_focus, wScr,fun_on_enter</asm>
Стили элемента
- tl_key_no_edit
Элемент нельзя редактировать на клавиатуре (изменять уровни, удалять). Ставьте этот стиль если нужно создать элемент только для просмотра данных.
- tl_draw_par_line
Рисовать линии к родительскому узлу.
- tl_list_box_mode
Стиль не отображает уровни (как в ListBox все узлы одного уровня).
Пример
Пример использования элемента tree_list. Для компиляции в include нужно указать полный путь к папке svn. Программа использует 2 файла с иконками tl_sys_16.bmp и tl_nod_16.bmp из папки svn\programs\develop\libraries\box_lib\trunk. <asm>use32 org 0x0 db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт dd 0x1 dd start dd i_end ; размер приложения dd mem dd stacktop dd file_name dd cur_dir_path
include 'svn/programs/macros.inc' include 'svn/programs/proc32.inc' include 'svn/programs/develop/libraries/box_lib/trunk/box_lib.mac' include 'svn/programs/develop/libraries/box_lib/load_lib.mac' include 'mem.inc' ;функции mem.Alloc,mem.Free,mem.ReAlloc
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,0
struct FileInfoBlock Function dd ? Position dd ? Flags dd ? Count dd ? Buffer dd ? db ? FileName dd ? ends
fn_icon1 db 'tl_sys_16.bmp',0 fn_icon2 db 'tl_nod_16.bmp',0 bmp_icon dd 0 run_file_70 FileInfoBlock
align 4 start:
sys_load_library library_name, cur_dir_path, library_path, system_path, \ err_message_found_lib, head_f_l, boxlib_import, err_message_import, head_f_i
- cmp eax,-1
- jz button.exit
mcall 48,3,sc,sizeof.system_colors mcall 40,0x27 ;маска ожидаемых событий mcall 68,11
stdcall dword[tl_data_init], dword tree1
- читаем *.bmp файл с системными иконками
copy_path fn_icon1,cur_dir_path,file_name,0
mov ecx,3*256*13 stdcall mem.Alloc,ecx mov [bmp_icon],eax
mov [run_file_70.Buffer], eax mov eax,70 ;load icon file mov [run_file_70.Function], 0 mov [run_file_70.Position], 54 mov [run_file_70.Flags], 0 mov [run_file_70.Count], ecx mov byte[run_file_70+20], 0 mov [run_file_70.FileName], file_name mov ebx,run_file_70 int 0x40 cmp ebx,0 jl @f m2m dword[tree1.data_img_sys],dword[bmp_icon] @@:
- читаем *.bmp файл с иконками узлов
copy_path fn_icon2,cur_dir_path,file_name,0
mov ecx,3*256*13 stdcall mem.Alloc,ecx mov [bmp_icon],eax
mov [run_file_70.Buffer], eax mov eax,70 ;load icon file ;mov [run_file_70.Function], 0 ;mov [run_file_70.Position], 54 ;mov [run_file_70.Flags], 0 mov [run_file_70.Count], ecx mov byte[run_file_70+20], 0 mov [run_file_70.FileName], file_name mov ebx,run_file_70 int 0x40 cmp ebx,0 jl @f m2m dword[tree1.data_img],dword[bmp_icon] @@:
- перерисовка окна
align 4 red_win:
mcall 12,1
xor eax,eax mov ebx,30*65536+320 mov ecx,25*65536+255 mov edx,[sc.work] or edx,0x33000000 mov edi,hed mcall
mov eax,8 ;кнопка mov ebx,215*65536+85 mov ecx,5*65536+15 mov edx,2 mov esi,[sc.work_button] int 0x40
mov ebx,215*65536+60 mov ecx,25*65536+15 mov edx,3
- mov esi,0xffd000
int 0x40
mov ebx,215*65536+85 mov ecx,45*65536+15 mov edx,4 int 0x40
mov ecx,65*65536+15 mov edx,5 int 0x40
mov ecx,85*65536+15 mov edx,6 int 0x40
mov ecx,105*65536+15 mov edx,7 int 0x40
mov ecx,125*65536+15 mov edx,8 int 0x40
mov ecx,145*65536+15 mov edx,9 int 0x40
mov ecx,165*65536+15 mov edx,10 int 0x40
mov ecx,185*65536+15 mov edx,11 int 0x40
mov ecx,205*65536+15 mov edx,12 int 0x40
mov ebx,280*65536+20 mov ecx,25*65536+15 mov edx,100 mov esi,0xd0d0 int 0x40
mov eax,4 ;рисование текста mov ebx,10*65536+25 mov ecx,[sc.work_button_text] or ecx,0x80000000 mov edx,dword[node_data] int 0x40
mov eax,4 ;рисование текста mov ebx,220*65536+10 mov edx,txt10 int 0x40
mov ebx,220*65536+30 mov edx,txt11 int 0x40
mov ebx,220*65536+50 mov edx,txt12 int 0x40
mov ebx,220*65536+70 mov edx,txt13 int 0x40
mov ebx,220*65536+90 mov edx,txt14 int 0x40
mov ebx,220*65536+110 mov edx,txt15 int 0x40
mov ebx,220*65536+130 mov edx,txt16 int 0x40
mov ebx,220*65536+150 mov edx,txt17 int 0x40
mov ebx,220*65536+170 mov edx,txt18 int 0x40
mov ebx,220*65536+190 mov edx,txt19 int 0x40
mov ebx,220*65536+210 mov edx,txt20 int 0x40
stdcall dword[tl_draw], dword tree1 stdcall [edit_box_draw], dword edit1
mov dword[wScr.all_redraw],1 stdcall [scrollbar_ver_draw], dword wScr
mcall 12,2
align 4 still: mcall 10
cmp al,0x1 ;изм. положение окна jz red_win cmp al,0x2 jz key cmp al,0x3 jz button cmp al,0x6 jz mouse jmp still
align 4 key: mcall 2 stdcall [tl_key], dword tree1 stdcall [edit_box_key], dword edit1 jmp still
align 4 button:
mcall 17 ;получить код нажатой кнопки cmp ah,2 jz but_clear cmp ah,3 jz but_add_node cmp ah,4 jz but_undo cmp ah,5 jz but_redo cmp ah,6 jz but_lev_add cmp ah,7 jz but_lev_dec cmp ah,8 jz but_node_set_data cmp ah,9 jz but_node_get_data cmp ah,10 jz but_node_delete cmp ah,11 jz but_node_move_up cmp ah,12 jz but_node_move_down cmp ah,100 jz but_add_node_2
cmp ah,1 jne still
.exit:
- stdcall mem.Free,[bmp_icon]
stdcall dword[tl_data_clear], dword tree1 mcall -1 ;выход из программы
align 4
mouse:
stdcall [tl_mouse], dword tree1 stdcall [edit_box_mouse], dword edit1 jmp still
but_clear:
stdcall dword[tl_info_clear], dword tree1 stdcall dword[tl_draw], dword tree1 jmp still
- добавляем узел (иконка которого будет с индексом 0)
but_add_node:
stdcall dword[tl_node_add], dword ed_buffer, dword 0, dword tree1 stdcall dword[tl_draw], dword tree1 jmp still
- добавляем узел (иконка которого будет с индексом 1)
but_add_node_2:
stdcall dword[tl_node_add], dword ed_buffer, dword 0x10000, dword tree1 stdcall dword[tl_draw], dword tree1 jmp still
but_undo:
stdcall dword[tl_info_undo], dword tree1 stdcall dword[tl_draw], dword tree1 jmp still
but_redo:
stdcall dword[tl_info_redo], dword tree1 stdcall dword[tl_draw], dword tree1 jmp still
but_lev_add:
stdcall dword[tl_node_lev_inc], dword tree1 stdcall dword[tl_draw], dword tree1 jmp still
but_lev_dec:
stdcall dword[tl_node_lev_dec], dword tree1 stdcall dword[tl_draw], dword tree1 jmp still
- устанавливаем (новые) данные узла
but_node_set_data:
stdcall dword[tl_node_set_data], dword ed_buffer, dword tree1 stdcall dword[tl_draw], dword tree1 jmp still
- берем указатель на данные узла
but_node_get_data:
stdcall dword[tl_node_get_data], dword tree1 pop dword[node_data] jmp red_win ;still
- удаляем узел
but_node_delete:
stdcall dword[tl_node_delete], dword tree1 stdcall dword[tl_draw], dword tree1 jmp still
- функция вызываемая при нажатии [Enter]
align 4 fun_on_enter:
stdcall dword[tl_node_set_data], dword txt_on_enter, dword tree1 stdcall dword[tl_draw], dword tree1 ret
but_node_move_up:
stdcall dword[tl_node_move_up], dword tree1 jmp still
but_node_move_down:
stdcall dword[tl_node_move_down], dword tree1 jmp still
- подписи на кнопки
txt10 db 'List Clear',0 txt11 db 'Node add',0 txt12 db 'List Undo',0 txt13 db 'List Redo',0 txt14 db 'Node lev >>',0 txt15 db 'Node lev <<',0 txt16 db 'Node set data',0 txt17 db 'Node get data',0 txt18 db 'Node delete',0 txt19 db 'Node move ',24,0 ;24 up txt20 db 'Node move ',25,0 ;25 down
- таблица импортируемых функций
align 4 boxlib_import:
dd sz_lib_init ;функция запускается макросом 1 раз при подключении бибилиотеки, потому в программе метка на нее не нужна
edit_box_draw dd sz_Edit_box_draw edit_box_key dd sz_Edit_box_key edit_box_mouse dd sz_Edit_box_mouse version_ed dd sz_Version_ed
scrollbar_ver_draw dd sz_Scrollbar_ver_draw scrollbar_ver_mouse dd sz_Scrollbar_ver_mouse scrollbar_hor_draw dd sz_Scrollbar_hor_draw scrollbar_hor_mouse dd sz_Scrollbar_hor_mouse version_scrollbar dd sz_Version_scrollbar
tl_data_init dd sz_tl_data_init tl_data_clear dd sz_tl_data_clear tl_info_clear dd sz_tl_info_clear tl_key dd sz_tl_key tl_mouse dd sz_tl_mouse tl_draw dd sz_tl_draw tl_info_undo dd sz_tl_info_undo tl_info_redo dd sz_tl_info_redo tl_node_add dd sz_tl_node_add tl_node_set_data dd sz_tl_node_set_data tl_node_get_data dd sz_tl_node_get_data tl_node_delete dd sz_tl_node_delete tl_cur_beg dd sz_tl_cur_beg tl_cur_next dd sz_tl_cur_next tl_cur_perv dd sz_tl_cur_perv tl_node_close_open dd sz_tl_node_close_open tl_node_lev_inc dd sz_tl_node_lev_inc tl_node_lev_dec dd sz_tl_node_lev_dec tl_node_move_up dd sz_tl_node_move_up tl_node_move_down dd sz_tl_node_move_down
dd 0,0
sz_lib_init db 'lib_init',0
sz_Edit_box_draw db 'edit_box',0 sz_Edit_box_key db 'edit_box_key',0 sz_Edit_box_mouse db 'edit_box_mouse',0 sz_Version_ed db 'version_ed',0
sz_Scrollbar_ver_draw db 'scrollbar_v_draw',0 sz_Scrollbar_ver_mouse db 'scrollbar_v_mouse',0 sz_Scrollbar_hor_draw db 'scrollbar_h_draw',0 sz_Scrollbar_hor_mouse db 'scrollbar_h_mouse',0 sz_Version_scrollbar db 'version_scrollbar',0
sz_tl_data_init db 'tl_data_init',0 sz_tl_data_clear db 'tl_data_clear',0 sz_tl_info_clear db 'tl_info_clear',0 sz_tl_key db 'tl_key',0 sz_tl_mouse db 'tl_mouse',0 sz_tl_draw db 'tl_draw',0 sz_tl_info_undo db 'tl_info_undo',0 sz_tl_info_redo db 'tl_info_redo',0 sz_tl_node_add db 'tl_node_add',0 sz_tl_node_set_data db 'tl_node_set_data',0 sz_tl_node_get_data db 'tl_node_get_data',0 sz_tl_node_delete db 'tl_node_delete',0 sz_tl_cur_beg db 'tl_cur_beg',0 sz_tl_cur_next db 'tl_cur_next',0 sz_tl_cur_perv db 'tl_cur_perv',0 sz_tl_node_close_open db 'tl_node_close_open',0 sz_tl_node_lev_inc db 'tl_node_lev_inc',0 sz_tl_node_lev_dec db 'tl_node_lev_dec',0 sz_tl_node_move_up db 'tl_node_move_up',0 sz_tl_node_move_down db 'tl_node_move_down',0
- структура элемента tree_list
tree1 tree_list 24,500, tl_draw_par_line, 16,16, 0x8080ff,0x0000ff,0xffffff,\
10,35,200-16,185, 14,4,0, el_focus, wScr,fun_on_enter
- структура для дочернего скроллинга
align 4 wScr: .x: .size_x dw 16 ;+0 .start_x dw 210-16 ;+2 .y: .size_y dw 185 ;+4 .start_y dw 35 ;+6 .btn_high dd 15 ;+8 .type dd 1 ;+12 .max_area dd 100 ;+16 .cur_area dd 30 ;+20 .position dd 0 ;+24 .bckg_col dd 0xeeeeee ;+28 .frnt_col dd 0xbbddff ;+32 .line_col dd 0 ;+36 .redraw dd 0 ;+40 .delta dw 0 ;+44 .delta2 dw 0 ;+46 .run_x: .r_size_x dw 0 ;+48 .r_start_x dw 0 ;+50 .run_y: .r_size_y dw 0 ;+52 .r_start_y dw 0 ;+54 .m_pos dd 0 ;+56 .m_pos_2 dd 0 ;+60 .m_keys dd 0 ;+64 .run_size dd 0 ;+68 .position2 dd 0 ;+72 .work_size dd 0 ;+76 .all_redraw dd 0 ;+80 .ar_offset dd 1 ;+84
- структура элемента editbox
edit1 edit_box 200, 10, 5, 0xffffff, 0x80ff, 0xff0080, 0, 0xff, 80, ed_buffer, mouse_dd, ed_focus, 13, 13 ed_buffer: db 'dataNode Text',0
rb 69
txt_on_enter db '1111Enter',0 hed db 'Tree (Image) List 13.06.10',0 sc system_colors
- -------------------------------------------------------------------------------
err_message_import db 'Ошибка при импорте box_lib.obj',0
err_message_found_lib db 'Ошибка при поиске box_lib.obj',0 ;строка, которая будет в сформированном окне, если библиотека не будет найдена head_f_i: head_f_l db 'System error',0 ;заголовок окна, при возникновении ошибки system_path db '/sys/lib/' library_name db 'box_lib.obj',0
node_data dd 0 el_focus dd tree1 mouse_dd dd ?
i_end: ;конец кода
rb 1024 cur_dir_path rb 4096 library_path rb 4096 file_name rb 4096
stacktop: mem:</asm>