Изучение графических возможностей Visual Prolog 5,2, страница 2

2. Вывод информации о текущем узле. Вывод осуществляется с помощью стандартного предиката tree_GetSelectedNode/1, аргументом которого является хендел окна отображения дерева. Предикат возвращает значение выделенного узла.

%*************Вывод информации о текущем узле*************

win_tree_eh(_Win,e_Menu(idt_tree_curNode,_ShiftCtlAlt),0):-!,

Str=tree_GetSelectedNode(_Win), %стандартныйпредикат

dlg_note("Выбранный узел",Str),

!.

%END tree, idt_tree_curNode

3. Вывод информации о родительском узле. Выдается сообщение со значением родительского узла и выделяет его. Используются:

а) стандартный предикат tree_GetParentNode/1 в качестве аргумента передается хендел окна дерева. Предикат возвращает значение родительского узла.

б)стандартный предикат tree_MoveToParentNode/1, в качестве аргумента передается хендел окна дерева. Выделяет родительский узел для выбранного в данный момент узла.

%********Вывод информации родительском узле и его выделение************

win_tree_eh(_Win,e_Menu(idt_tree_parent,_ShiftCtlAlt),0):-!,

Str=tree_GetParentNode(_Win),

dlg_note("Родительский узел",Str),

tree_MoveToParentNode(_Win),

!.

4.Вывод значений всех узлов. Выводит значения всех узлов в ListBox. Используется стандартный предикат tree_GetAllNodes(_Win), в качестве аргумента передается хендел окна дерева. Возвращает список значений узлов дерева.

%*********Вывод всех узлов дерева (в ListBox)*********

win_tree_eh(_Win,e_Menu(idt_tree_allnodes,_ShiftCtlAlt),0):-!,

ListALL=tree_GetAllNodes(_Win),

HDC=Win_GetCtlHandle(_Win,idtc_lbox),

lbox_Clear(HDC),

lbox_Add(HDC,ListALL),

!.

5. Поиск узла по заданному значению. Поиск осуществляется с помощью стандартного предиката tree_SearchFirstNode(_Win,Node),в качестве аргумента передается хендел окна дерева и значение. Предикат находит первый из встречающихся в дереве узел и выделяет его. Для поиска других узлов с таким же значением используется стандартный предикат tree_SearchNodeAgain(_Win), которому передается только хендел окна дерева. Предикат находит следующий после уже найденного узла с заданным значением и выделяет его. 

%*****Выделение выбранного узла (предикат находит первый от корня узел*** 

win_tree_eh(_Win,e_Control(idc_wtree_find,_CtrlType,_CtrlWin,_CtlInfo),0):HC=Win_GetCtlHandle(_Win,idc_wtree_edit2),

Node=Win_GetText(HC),

tree_SearchFirstNode(_Win,Node),

!.

%*****Нахдит (выделяет) следующий узел с искомым значением**********

win_tree_eh(_Win,e_Control(idc_wtree_next,_CtrlType,_CtrlWin,_CtlInfo),0):tree_SearchNodeAgain(_Win),

!.

6. Перемещение выделения на узел с заданным значением осуществляется с помощью стандартного предиката  tree_SetSelectedNode(_Win,Node), в качестве аргументов передается хендел окна дерева и значение узла, предикат выделяет указанный узел.

7. Вывод значения узла, заданного для поиска осуществляется с помощью стандартного предиката tree_GetCurrentSearch(_Win), которому в качестве аргумента передается хендел окна дерева. Предикат возвращает значение узла.

8. Скрытие/Отображение части дерева осуществляется с помощью стандартного предиката tree_OpenCloseNode(_Win), которому в качестве аргумента передается хендел окна дерева.

%************Скрыть/Показать дерево****************************

win_tree_eh(_Win,e_MouseDbl(_PNT,_ShiftCtlAlt,_Button),0):-!,

tree_OpenCloseNode(_Win),

!.

В качестве примера реализации некоторых из представленных предикатов приведена следующая программа.

Текст программы.

include "tree.inc"

include "tree.con"

include "hlptopic.con"

%BEGIN_WIN Task Window

/*******************************************************************