Difference between revisions of "Box lib tree list/ru"

From KolibriOS wiki
Jump to navigation Jump to search
m (fix file include in example code)
 
(4 intermediate revisions by one other user not shown)
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"stdcall dword[tl_node_add], tree1, 0x10002, data_buffer</syntaxhighlight>
  push dword 0x10002
 
  push dword data_buffer
 
  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''' - устанавливает новые данные (пользовательские и подпись) в узел под курсором.
Line 24: Line 21:
 
*'''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] ;переместить узел</asm>
+
   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] ;переместить узел</asm>
+
   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">stdcall dword[tl_node_poi_get_info], tree1, 0</syntaxhighlight>
push dword 0
+
где: ''tree1'' - структура tree_list; ''0'' - позиция узла, с которого берется указатель; ''eax'' - указатель на структуру описывающую узел.
call dword[tl_node_poi_get_info]
 
pop dword esi</asm>
 
где: ''tree1'' - структура tree_list; ''0'' - позиция узла, с которого берется указатель; ''esi'' - указатель на структуру описывающую узел.
 
 
*'''tl_node_poi_get_next_info''' - берет указатель на следующий элемент в цепи, без учета открытия/закрытия дочерних узлов.
 
*'''tl_node_poi_get_next_info''' - берет указатель на следующий элемент в цепи, без учета открытия/закрытия дочерних узлов.
 
*'''tl_node_poi_get_data''' - берет указатель на данные (пользовательские и подпись) из узла указанного в указателе.
 
*'''tl_node_poi_get_data''' - берет указатель на данные (пользовательские и подпись) из узла указанного в указателе.
Line 43: Line 37:
 
Функциями 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
 
.........
 
.........
   push dword tree1
+
   stdcall dword[tl_save_mem], tree1, 0, node_data, MEM_SIZE</syntaxhighlight>
  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 или записываются коды ошибок сохранения.
 
где: ''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
 
.........
 
.........
   push dword tree1
+
   stdcall dword[tl_load_mem], tree1, 0, node_data, MEM_SIZE</syntaxhighlight>
  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 или записываются коды ошибок считывания.
 
где: ''tree1'' - структура tree_list; 0 - индекс считываемого элемента; ''node_data'' - указатель на блок памяти; ''MEM_SIZE'' - размер блока памяти для сохранения. В регистр eax пишется значение 0 или записываются коды ошибок считывания.
 
*'''tl_get_mem_size''' - Вычисляет размер блока памяти (в который были раньше сохранены элементы). Эту функцию можно использовать перед сохранением на диск, для получения точного размера сохраняемых данных.
 
*'''tl_get_mem_size''' - Вычисляет размер блока памяти (в который были раньше сохранены элементы). Эту функцию можно использовать перед сохранением на диск, для получения точного размера сохраняемых данных.
Line 68: Line 52:
  
 
==Структура 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 {
 +
  .box_left  dd box_l
 +
  .box_top    dd box_t
 +
  .box_width  dd box_w
 +
  .box_height dd box_h
 
   .data_info  dd 0
 
   .data_info  dd 0
 
   .info_size  dw info_size
 
   .info_size  dw info_size
Line 81: Line 69:
 
   .data_img_sys dd 0
 
   .data_img_sys dd 0
 
   .ch_tim    dd 0
 
   .ch_tim    dd 0
  .ls_tim    dd 0
 
 
   .tim_undo  dd 0
 
   .tim_undo  dd 0
 
   .cur_pos    dd 0
 
   .cur_pos    dd 0
Line 87: Line 74:
 
   .col_zag    dd col_zag
 
   .col_zag    dd col_zag
 
   .col_txt    dd col_txt
 
   .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
 
   .capt_cy    dw capt_cy
 
   .info_capt_offs dw info_capt_offs
 
   .info_capt_offs dw info_capt_offs
Line 96: Line 79:
 
   .el_focus    dd el_focus
 
   .el_focus    dd el_focus
 
   .p_scrol    dd p_scrol
 
   .p_scrol    dd p_scrol
  rb 4
 
  .on_activate dd 0
 
 
   .on_press    dd on_press
 
   .on_press    dd on_press
}</asm>
+
}</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 98:
  
 
Пример создания структуры:
 
Пример создания структуры:
<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</asm>
+
     el_focus, wScr,fun_on_enter</syntaxhighlight>
  
 
==Стили элемента==
 
==Стили элемента==
Line 130: Line 111:
 
==Пример==
 
==Пример==
 
Пример использования элемента ''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 145: Line 126:
 
include 'svn/programs/develop/libraries/box_lib/trunk/box_lib.mac'
 
include 'svn/programs/develop/libraries/box_lib/trunk/box_lib.mac'
 
include 'svn/programs/develop/libraries/box_lib/load_lib.mac'
 
include 'svn/programs/develop/libraries/box_lib/load_lib.mac'
include 'mem.inc' ;функции mem.Alloc,mem.Free,mem.ReAlloc
+
include 'svn/programs/dll.inc' ;функции mem.Alloc,mem.Free,mem.ReAlloc
  
 
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,0
 
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,0
Line 176: Line 157:
 
mcall 68,11
 
mcall 68,11
  
stdcall dword[tl_data_init], dword tree1
+
stdcall dword[tl_data_init], tree1
  
 
; читаем *.bmp файл с системными иконками
 
; читаем *.bmp файл с системными иконками
Line 186: Line 167:
  
 
mov [run_file_70.Buffer], eax
 
mov [run_file_70.Buffer], eax
mov eax,70 ;load icon file
 
 
mov [run_file_70.Function], 0
 
mov [run_file_70.Function], 0
 
mov [run_file_70.Position], 54
 
mov [run_file_70.Position], 54
Line 193: Line 173:
 
mov byte[run_file_70+20], 0
 
mov byte[run_file_70+20], 0
 
mov [run_file_70.FileName], file_name
 
mov [run_file_70.FileName], file_name
mov ebx,run_file_70
+
mcall 70,run_file_70
int 0x40
 
 
cmp ebx,0
 
cmp ebx,0
 
jl @f
 
jl @f
Line 208: Line 187:
  
 
mov [run_file_70.Buffer], eax
 
mov [run_file_70.Buffer], eax
mov eax,70 ;load icon file
 
 
;mov [run_file_70.Function], 0
 
;mov [run_file_70.Function], 0
 
;mov [run_file_70.Position], 54
 
;mov [run_file_70.Position], 54
Line 215: Line 193:
 
mov byte[run_file_70+20], 0
 
mov byte[run_file_70+20], 0
 
mov [run_file_70.FileName], file_name
 
mov [run_file_70.FileName], file_name
mov ebx,run_file_70
+
mcall 70,run_file_70
int 0x40
 
 
cmp ebx,0
 
cmp ebx,0
 
jl @f
 
jl @f
Line 225: Line 202:
 
align 4
 
align 4
 
red_win:
 
red_win:
  mcall 12,1
+
mcall 12,1
  
  xor eax,eax
+
xor eax,eax
  mov ebx,30*65536+320
+
mov ebx,30*65536+320
  mov ecx,25*65536+255
+
mov ecx,25*65536+255
  mov edx,[sc.work]
+
mov edx,[sc.work]
  or  edx,0x33000000
+
or  edx,0x33000000
  mov edi,hed
+
mov edi,hed
  mcall
+
mcall
  
  mov eax,8 ;кнопка
+
mov eax,8 ;кнопка
  mov ebx,215*65536+85
+
mov ebx,215*65536+85
  mov ecx,5*65536+15
+
mov ecx,5*65536+15
  mov edx,2
+
mov edx,2
  mov esi,[sc.work_button]
+
mov esi,[sc.work_button]
  int 0x40
+
int 0x40
  
  mov ebx,215*65536+60
+
mov ebx,215*65536+60
  mov ecx,25*65536+15
+
mov ecx,25*65536+15
  mov edx,3
+
mov edx,3
 
;  mov esi,0xffd000
 
;  mov esi,0xffd000
  int 0x40
+
int 0x40
  
  mov ebx,215*65536+85
+
mov ebx,215*65536+85
  mov ecx,45*65536+15
+
mov ecx,45*65536+15
  mov edx,4
+
mov edx,4
  int 0x40
+
int 0x40
  
  mov ecx,65*65536+15
+
mov ecx,65*65536+15
  mov edx,5
+
mov edx,5
  int 0x40
+
int 0x40
  
  mov ecx,85*65536+15
+
mov ecx,85*65536+15
  mov edx,6
+
mov edx,6
  int 0x40
+
int 0x40
  
  mov ecx,105*65536+15
+
mov ecx,105*65536+15
  mov edx,7
+
mov edx,7
  int 0x40
+
int 0x40
  
  mov ecx,125*65536+15
+
mov ecx,125*65536+15
  mov edx,8
+
mov edx,8
  int 0x40
+
int 0x40
  
  mov ecx,145*65536+15
+
mov ecx,145*65536+15
  mov edx,9
+
mov edx,9
  int 0x40
+
int 0x40
  
  mov ecx,165*65536+15
+
mov ecx,165*65536+15
  mov edx,10
+
mov edx,10
  int 0x40
+
int 0x40
  
  mov ecx,185*65536+15
+
mov ecx,185*65536+15
  mov edx,11
+
mov edx,11
  int 0x40
+
int 0x40
  
  mov ecx,205*65536+15
+
mov ecx,205*65536+15
  mov edx,12
+
mov edx,12
  int 0x40
+
int 0x40
  
  mov ebx,280*65536+20
+
mov ebx,280*65536+20
  mov ecx,25*65536+15
+
mov ecx,25*65536+15
  mov edx,100
+
mov edx,100
  mov esi,0xd0d0
+
mov esi,0xd0d0
  int 0x40
+
int 0x40
  
  mov eax,4 ;рисование текста
+
mov eax,4 ;рисование текста
  mov ebx,10*65536+25
+
mov ebx,10*65536+25
  mov ecx,[sc.work_button_text]
+
mov ecx,[sc.work_button_text]
  or  ecx,0x80000000
+
or  ecx,0x80000000