На главную   На главную   Форумы Новости Документация Скачать Купить  
Регистрация  
Система Allegro
Oб Allegro Характеристики Пример конфигурации Документация База ошибок Развитие
Версия для печати К списку книг Вернуться к оглавлению Предыдущий параграф Последний! Параграф
Поиск по книге

Глава 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;
 
 




              


Система Allegro. Руководство разработчика Наверх