Difference between revisions of "Box lib tree list/ru"
m (→Функции) |
|||
Line 9: | Line 9: | ||
*'''tl_info_redo''' - Повтор отмененных действий. Обратная функция по отношению к tl_info_undo. | *'''tl_info_redo''' - Повтор отмененных действий. Обратная функция по отношению к tl_info_undo. | ||
*'''tl_node_add''' - Добавляет узел, в позицию указанную курсором. Пример добавления узла: | *'''tl_node_add''' - Добавляет узел, в позицию указанную курсором. Пример добавления узла: | ||
− | <asm> push dword tree1 | + | <syntaxhighlight lang="asm"> push dword tree1 |
push dword 0x10002 | push dword 0x10002 | ||
push dword data_buffer | push dword data_buffer | ||
− | call dword[tl_node_add]</ | + | call dword[tl_node_add]</syntaxhighlight> |
где: ''tree1'' - структура tree_list; ''0x10002'' - параметры узла (старшие байты ''0x0001'' - индекс иконки, отображаемой возле узла; меньший байт ''0x02'' - уровень вложености узла); data_buffer - указатель на дынные, добавляемые в узел. | где: ''tree1'' - структура tree_list; ''0x10002'' - параметры узла (старшие байты ''0x0001'' - индекс иконки, отображаемой возле узла; меньший байт ''0x02'' - уровень вложености узла); data_buffer - указатель на дынные, добавляемые в узел. | ||
*'''tl_node_set_data''' - устанавливает новые данные (пользовательские и подпись) в узел под курсором. | *'''tl_node_set_data''' - устанавливает новые данные (пользовательские и подпись) в узел под курсором. | ||
Line 24: | Line 24: | ||
*'''tl_node_lev_dec''' - Уменьшает уровень узла под курсором. Делает узел родительским. | *'''tl_node_lev_dec''' - Уменьшает уровень узла под курсором. Делает узел родительским. | ||
*'''tl_node_move_up''' - Перемещает вверх узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции: | *'''tl_node_move_up''' - Перемещает вверх узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции: | ||
− | <asm> push dword tree1 | + | <syntaxhighlight lang="asm"> push dword tree1 |
− | call dword[tl_node_move_up] ;переместить узел</ | + | call dword[tl_node_move_up] ;переместить узел</syntaxhighlight> |
где: ''tree1'' - структура tree_list | где: ''tree1'' - структура tree_list | ||
*'''tl_node_move_down''' | *'''tl_node_move_down''' | ||
Перемещает вниз узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции: | Перемещает вниз узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции: | ||
− | <asm> push dword tree1 | + | <syntaxhighlight lang="asm"> push dword tree1 |
− | call dword[tl_node_move_down] ;переместить узел</ | + | call dword[tl_node_move_down] ;переместить узел</syntaxhighlight> |
где: tree1 - структура tree_list | где: tree1 - структура tree_list | ||
*'''tl_node_poi_get_info''' - Берет внутренний указатель на структуру описывающую узел. Пример использования функции: | *'''tl_node_poi_get_info''' - Берет внутренний указатель на структуру описывающую узел. Пример использования функции: | ||
− | <asm>push dword tree1 | + | <syntaxhighlight lang="asm">push dword tree1 |
push dword 0 | push dword 0 | ||
call dword[tl_node_poi_get_info] | call dword[tl_node_poi_get_info] | ||
− | pop dword esi</ | + | pop dword esi</syntaxhighlight> |
где: ''tree1'' - структура tree_list; ''0'' - позиция узла, с которого берется указатель; ''esi'' - указатель на структуру описывающую узел. | где: ''tree1'' - структура tree_list; ''0'' - позиция узла, с которого берется указатель; ''esi'' - указатель на структуру описывающую узел. | ||
*'''tl_node_poi_get_next_info''' - берет указатель на следующий элемент в цепи, без учета открытия/закрытия дочерних узлов. | *'''tl_node_poi_get_next_info''' - берет указатель на следующий элемент в цепи, без учета открытия/закрытия дочерних узлов. | ||
Line 43: | Line 43: | ||
Функциями 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 | + | <syntaxhighlight lang="asm"> MEM_SIZE equ 5000 |
node_data rb MEM_SIZE | node_data rb MEM_SIZE | ||
......... | ......... | ||
Line 51: | Line 51: | ||
push dword MEM_SIZE | push dword MEM_SIZE | ||
call dword[tl_save_mem] | call dword[tl_save_mem] | ||
− | pop eax</ | + | pop eax</syntaxhighlight> |
где: ''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 | + | <syntaxhighlight lang="asm"> MEM_SIZE equ 5000 |
node_data rb MEM_SIZE | node_data rb MEM_SIZE | ||
......... | ......... | ||
Line 62: | Line 62: | ||
push dword MEM_SIZE | push dword MEM_SIZE | ||
call dword[tl_load_mem] | call dword[tl_load_mem] | ||
− | pop eax</ | + | pop eax</syntaxhighlight> |
где: ''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''' - Вычисляет размер блока памяти (в который были раньше сохранены элементы). Эту функцию можно использовать перед сохранением на диск, для получения точного размера сохраняемых данных. | ||
Line 68: | Line 68: | ||
==Структура tree_list== | ==Структура tree_list== | ||
− | <asm>struc tree_list info_size,info_max_count,style, img_cx,img_cy,\ | + | <syntaxhighlight lang="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,\ | 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 { | info_capt_len,el_focus, p_scrol,on_press { | ||
Line 99: | Line 99: | ||
.on_activate dd 0 | .on_activate dd 0 | ||
.on_press dd on_press | .on_press dd on_press | ||
− | }</ | + | }</syntaxhighlight> |
*'''info_size''' - количество байт, которое будет выделено для каждого узла. Часть этой памяти пользователь может использовать для своих целей (регулируется через ''info_capt_offs'' и ''info_capt_len'') а остальная часть будет использована как подпись узла. | *'''info_size''' - количество байт, которое будет выделено для каждого узла. Часть этой памяти пользователь может использовать для своих целей (регулируется через ''info_capt_offs'' и ''info_capt_len'') а остальная часть будет использована как подпись узла. | ||
*'''info_max_count''' - максимальное количество узлов, которые можно добавить в элемент. | *'''info_max_count''' - максимальное количество узлов, которые можно добавить в элемент. | ||
Line 117: | Line 117: | ||
Пример создания структуры: | Пример создания структуры: | ||
− | <asm>tree1 tree_list 24,500, tl_draw_par_line+tl_list_box_mode, 16,16,\ | + | <syntaxhighlight lang="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,\ | 0x8080ff,0x0000ff,0xffffff, 10,35,200-16,285, 14,4,0,\ | ||
− | el_focus, wScr,fun_on_enter</ | + | el_focus, wScr,fun_on_enter</syntaxhighlight> |
==Стили элемента== | ==Стили элемента== | ||
Line 130: | Line 130: | ||
==Пример== | ==Пример== | ||
Пример использования элемента ''tree_list''. Для компиляции в ''include'' нужно указать полный путь к папке ''svn''. Программа использует 2 файла с иконками ''tl_sys_16.bmp'' и ''tl_nod_16.bmp'' из папки ''svn\programs\develop\libraries\box_lib\trunk''. | Пример использования элемента ''tree_list''. Для компиляции в ''include'' нужно указать полный путь к папке ''svn''. Программа использует 2 файла с иконками ''tl_sys_16.bmp'' и ''tl_nod_16.bmp'' из папки ''svn\programs\develop\libraries\box_lib\trunk''. | ||
− | <asm>use32 | + | <syntaxhighlight lang="asm">use32 |
org 0x0 | org 0x0 | ||
db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт | db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт | ||
Line 637: | Line 637: | ||
file_name rb 4096 | file_name rb 4096 | ||
stacktop: | stacktop: | ||
− | mem:</ | + | mem:</syntaxhighlight> |
[[Category: Кодинг]] | [[Category: Кодинг]] | ||
[[Category: Библиотеки]] | [[Category: Библиотеки]] |
Revision as of 19:46, 31 July 2012
Функции
- 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 - Добавляет узел, в позицию указанную курсором. Пример добавления узла:
push dword tree1
push dword 0x10002
push dword data_buffer
call dword[tl_node_add]
где: 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 - Перемещает вверх узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции:
push dword tree1
call dword[tl_node_move_up] ;переместить узел
где: tree1 - структура tree_list
- tl_node_move_down
Перемещает вниз узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции:
push dword tree1
call dword[tl_node_move_down] ;переместить узел
где: tree1 - структура tree_list
- tl_node_poi_get_info - Берет внутренний указатель на структуру описывающую узел. Пример использования функции:
push dword tree1
push dword 0
call dword[tl_node_poi_get_info]
pop dword esi
где: tree1 - структура tree_list; 0 - позиция узла, с которого берется указатель; esi - указатель на структуру описывающую узел.
- 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 - Сохраняет информацию об узлах элемента в память. Пример использования функции:
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
где: tree1 - структура tree_list; 0 - опция сохранения в начало блока памяти (если = 1, то добавляет элемент после других сохраненных ранее); node_data - указатель на блок памяти; MEM_SIZE - размер блока памяти для сохранения. В регистр eax пишется значение 0 или записываются коды ошибок сохранения.
- tl_load_mem - Загружает информацию об узлах элемента из памяти. Пример использования функции:
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
где: tree1 - структура tree_list; 0 - индекс считываемого элемента; node_data - указатель на блок памяти; MEM_SIZE - размер блока памяти для сохранения. В регистр eax пишется значение 0 или записываются коды ошибок считывания.
- tl_get_mem_size - Вычисляет размер блока памяти (в который были раньше сохранены элементы). Эту функцию можно использовать перед сохранением на диск, для получения точного размера сохраняемых данных.
- version_tree_list - версия элемента
Структура tree_list
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
}
- info_size - количество байт, которое будет выделено для каждого узла. Часть этой памяти пользователь может использовать для своих целей (регулируется через info_capt_offs и info_capt_len) а остальная часть будет использована как подпись узла.
- info_max_count - максимальное количество узлов, которые можно добавить в элемент.
- style - стили элемента.
- data_nodes - указатель на внутренние структуры узлов (TreeList).
- data_img - указатель на изображения с иконками узлов. Формат изображения такой же как и в сист. ф. 7: BBGGRRBBGGRR....
- img_cx - ширина одной иконки.
- img_cy - высота одной иконки.
- data_img_sys - указатель на системные изображения (курсор, плюсики, линии, ... все кроме иконок узлов). Формат изображения такой же как и в сист. ф. 7: BBGGRRBBGGRR...
- col_bkg - цвет фона.
- col_zag - цвет строки заголовка (если она задана) и кнопок и ползунка вертикальной полосы прокрутки (если она есть).
- col_txt - цвет текста.
- capt_cy - высота строки для подписи вверху элемента, если меньше 9 подпись не выводится.
- info_capt_len - длинна текста для подписи. Если равно 0, то длинна считается так: info_size - info_capt_offs.
- p_scrol - указатель на структуру скроллинга, связанного с данным элементом.
- on_press - указатель на функцию, которая будет вызвана при нажатии [Enter]. Если указатель равен 0 то ничего не будет вызываться.
Пример создания структуры:
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
Стили элемента
- 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.
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