Глава 12. РАЗРАБОТКА ОКОННОГО ИНТЕРФЕЙСА
Дерево рубрик TRubricTreeGrid
Этот компонент рекомендуется использовать в тех случаях, когда необходимо
в процессе работы программы отображать в окне дерево рубрик и
осуществлять навигацию по рубрикам. Кроме навигации компонент позволяет создавать
новые рубрики, удалять рубрики или изменять их свойства.
Компонент является потомком класса деревьев TDCCustomTreeGrid и наследует большинство его
свойств, о которых мы говорить здесь не будем.
Ниже перечислены дополнительные свойства и методы, превращающие это дерево
в дерево рубрик.
Свойства Published |
|
Transaction |
Транзакция. Можно использовать ReadOnly транзакцию |
Свойства Public |
тип |
readonly |
|
Root_Id |
integer |
readonly |
Идентификатор корневой рубрики |
ExpandedRubrics |
string |
|
Строка идентификаторов всех распахнутых рубрик, перечисленных через точку с
запятой. Используется для запоминания степени распахнутости рубрик. |
SelectedRubric_id |
integer |
|
Идентификатор текущей рубрики. Присвоение этому свойству значения раскрывает нужную
ветвь, отображает соответствующую рубрику и делает ее текущей. |
Методы |
|
procedure Open(Root_ID: integer) |
Загружает корневую рубрику. Этот метод всегда следует вызывать при
использовании этого компонента первым.
Если в качестве параметра
передать 0, то будут загружены все корневые рубрики. |
procedure AddRubric |
Вызывает стандартный диалог добавления рубрики |
procedure AddChildRubric |
Вызывает стандартный диалог добавления подрубрики |
procedure AddFilterGroup |
Вызывает стандартный диалог добавления подгруппы фильтров. |
procedure EditRubric |
Вызывает стандартный диалог редактирования свойств рубрики |
procedure DeleteSelectedRubrics |
Вызывает удаление выбранных рубрик |
procedure RefreshNode(Node: TRubricNode) |
Освежает указанный пункт дерева |
function FindInTreeById(Rubric_Id: integer): TRubricNode |
Ищет пункт дерева по идентификатору рубрики |
function FindNodeById(ParentNode: TDCTreeNode; id: integer
): TRubricNode |
Ищет пункт дерева по идентификатору рубрики внутри определенного родителя |
function GetRubric_ID(Node: TDCTreeNode): integer |
возвращает идентификатор рубрики указанного пункта дерева. |
function GetClass_ID(Node: TDCTreeNode): integer |
возвращает идентификатор класса справочника указанного пункта дерева. |
Использовать компонент TRubricTreeGrid несложно. Достаточно в Инспекторе объектов указать
транзакцию. Затем в программе следует вызвать метод Open(),
передав в него ID корневой рубрики. Проще всего это
сделать в событии OnCreate формы:
procedure TForm1.FormCreate(Sender: TObject);
begin
RubricTreeGrid1.Open(0); // 0 - загружаем все дерево рубрикаторов.
end;
Если в дереве выбирается какой-то пункт, узнать
идентификаторы класса и рубрики выбранного пункта можно в событии OnChange
дерева:
procedure TForm1.RubricTreeGrid1Change(Sender: TObject; Node: TDCTreeNode);
begin
Label1.Caption := IntToStr(RubricTreeGrid1.GetRubric_ID(Node)); //отображаем ID рубрики
Label2.Caption := IntToStr(RubricTreeGrid1.GetClass_ID(Node)); //отображаем ID класса
end;
Как работает этот пример, показано на рисунках:
Функция GetFilterExpression позволяет получить условие фильтрации в виде куска SQL
-кода, которое затем используется для управления справочниками в
самой системе Allegro. Так что для эксперимента можно добавить
к форме компонент TRefQuery, установить его свойство Transaction,
добавить на форму TDataSource и TDBGrid, соединить это все
, а в обработчик OnChange компонента дерева вписать такой код
:
procedure TForm1.RubricTreeGrid1Change(Sender: TObject; Node: TDCTreeNode);
var
rubric_class_id: integer;
begin
RefQuery1.Close;
RefQuery1.FilterExpression := GetFilterExpression(RubricTreeGrid1.GetRubric_ID(Node),
MainConnection.MainTransaction, nil, rubric_class_id);
RefQuery1.Class_Id := rubric_class_id;
RefQuery1.Open;
end;
|