Box lib tree list/ru
Функции
- 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 все узлы одного уровня).