Classe TMi_rtl_treenode
Unit
Declaração
type TMi_rtl_treenode = class(TObject)
Descrição
A class TMi_rtl_treenode
foi criada para criar menu html ou arvores de strings usando sintaxe simples de adição de nós e folhas.
NOTAS
Esta classe representa um nó em uma árvore hierárquica.
Ela possui propriedades e métodos para gerenciar filhos, dados associados ao nó e navegação na árvore.
Este código fornece uma estrutura básica para trabalhar com árvores hierárquicas no FreePascal. Você pode estender a classe TTreeNode para adicionar funcionalidades específicas à sua aplicação.
EXEMPLOS
Gera menu em HTML e um índice em arquivo .txt
class procedure TTreeNode.Test(okListHTML:boolean); var Root: TTreeNode; List : TStringList; S : string; begin writeLn('TTreeNode.Test'); writeLn('Inicio: ==============='); Root := TTreeNode.Create(TPath.create('root',false)); with Root do begin List := TStringList.Create; // Adicione os caminhos de diretórios e folhas da árvore manualmente // ... // Adicione o arquivo '/home/documentos/test1.pas' com pastas no nome AddChildFileName(Root,'/home/documentos/test1.pas'); AddChildFileName(Root,'/home/documentos/test2.pas'); AddChildFileName(Root,'/home/documentos/mamae/test3.pas'); AddChildFileName(Root,'/home/documentos/mamae/celia/test4.pas'); // s := (root..Owner.Owner as TTreeNode).fFilePath; AddChildFileName(Root,'test5.pas'); AddChildFileName(Root,'/home/test6.pas'); // Exiba a árvore de diretórios WriteLn('Árvore de diretórios:'); if okListHTML then Root.TreeToStringListHtml(Root,List) else Root.TreeToStringList(Root,List); for s in List do writeLn(s); List.Free; end; Root.Free; writeLn('Fim: ==============='); end;
Gera uma formulário dinamicamente com menu de opções baseado no componente treenode:
procedure PopulateMenuFromTreeNode(Node: TTreeNode; ParentMenuItem: TMenuItem); var Child: TTreeNode; NewMenuItem: TMenuItem; PathAction: TPathAction; begin if Node <> nil then begin PathAction := TPathAction(Node.Data); // Obtém o objeto TPath associado ao nó NewMenuItem := TMenuItem.Create(ParentMenuItem); NewMenuItem.Caption := PathAction.Data; NewMenuItem.Action := PathAction.Action; ParentMenuItem.Add(NewMenuItem); // Se o nó atual não for uma folha, adiciona seus filhos ao menu if not PathAction.IsSheet then begin Child := Node.GetFirstChild; while Child <> nil do begin PopulateMenuFromTreeNode(Child, NewMenuItem); Child := Child.GetNextSibling; end; end; end; end; type //TForm TForm = class(Forms.TForm) private procedure ShowMessageAction(Sender: TObject); public constructor Create(AOwner: TComponent); override; function CreateAction(const ACaption: string): TAction; end; constructor TForm.Create(AOwner: TComponent); begin //inherited Create(AOwner); inherited CreateNew(AOwner, 1); // O segundo parâmetro é uma janela vazia Self.Caption := 'My Form'; Self.SetBounds(100, 100, 400, 300); // Define o tamanho e a posição do formulário // Aqui você pode criar e adicionar componentes manualmente end; procedure TForm.ShowMessageAction(Sender: TObject); begin ShowMessage('Alô mundo'); end; function TForm.CreateAction(const ACaption: string): TAction; begin Result := TAction.Create(Self); Result.Caption := ACaption; Result.OnExecute := @ShowMessageAction; // Associa o método ao evento OnExecute end; procedure TTreeNode_Test_AddChildAction(); var Root: TTreeNode; MainMenu: TMainMenu; Form: TForm; action : TAction; begin // Criação e configuração do formulário e do menu Form := TForm.Create(nil); // Criação do nó raiz e inicialização da árvore Root := TTreeNode.Create(TPathAction.Create('root', False)); With Root,Form do try // Adiciona os caminhos de diretórios e folhas da árvore AddChildAction('/home/documentos/ShowMessageAction',CreateAction('ShowMessageAction')); AddChildAction('/home/documentos/test2.pas',nil); AddChildAction('/home/documentos/mamae/test3.pas',nil); AddChildAction('/home/documentos/test1.pas',nil); AddChildAction('/home/documentos/test2.pas',nil); AddChildAction('/home/documentos/mamae/test3.pas',nil); AddChildAction('/home/documentos/mamae/celia/test4.pas',nil); AddChildAction('test5.pas',nil); AddChildAction('/home/test6.pas',nil); AddChildAction('test5.pas',nil); AddChildAction('/home/test6.pas',nil); try MainMenu := TMainMenu.Create(Form); Form.Menu := MainMenu; // Popula o menu a partir da árvore PopulateMenuFromTreeNode(Root, MainMenu.Items); Form.ShowModal; finally Form.Free; end; finally Root.Free; end; end;
Outros pontos importantes do código incluem:
A estrutura de TTreeNode permite criar e manipular árvores hierárquicas, com a capacidade de associar dados específicos a cada nó.
A classe TPath foi projetada para representar o caminho dos nós, distinguindo entre arquivos e diretórios.
A classe TPathAction estende TPath para incluir uma ação associada, permitindo criar árvores interativas com funcionalidade adicional.
Hierarquia
- TObject
- TMi_rtl_treenode
Visão Geral
Campos
![]() |
Sorted: Boolean; |
Métodos
![]() |
constructor Create(AData: TObject); |
![]() |
destructor Destroy; override; |
![]() |
function AddChild(AChildData: TObject): TMi_rtl_treenode; |
![]() |
function CompareNodes(const Node1, Node2: TObject): integer; |
![]() |
function AddChildOrdered(AChildData: TObject;CompareFunction: TCompareNodes): TMi_rtl_treenode; |
![]() |
procedure RemoveChild(AChild: TMi_rtl_treenode); |
![]() |
procedure ClearChildren; |
![]() |
function GetFirstChild: TMi_rtl_treenode; |
![]() |
function Create_Object(aFileName, aPart: string): TObject; virtual; overload; |
![]() |
function AddChildFileName(Root: TMi_rtl_treenode; FileName: string):TMi_rtl_treenode; overload; |
![]() |
function AddChildFileName(FileName: string):TMi_rtl_treenode; overload; |
![]() |
function Create_Object(aFileName, aPart: string; aAction: TAction): TObject; virtual; overload; |
![]() |
function AddChildAction(Root: TMi_rtl_treenode;const TreeNodeNames: string; Action: TAction): TMi_rtl_treenode; overload; |
![]() |
function AddChildAction(const FileName: string; Action: TAction): TMi_rtl_treenode; overload; |
![]() |
function GetNodeLevel(): integer; |
![]() |
function conststr(i: longint; str: string): string; |
![]() |
function FindChild(const AName: string): TMi_rtl_treenode; |
![]() |
function GetNextSibling: TMi_rtl_treenode; |
![]() |
procedure TreeToStringList(Mi_rtl_treenode: TMi_rtl_treenode; var S: TStringList); virtual; |
![]() |
procedure TreeToStringListHtml(Mi_rtl_treenode: TMi_rtl_treenode; var S: TStringList); virtual; |
![]() |
class procedure Test_AddChildFileName(okListHTML: boolean); |
Propriedades
![]() |
property Data: TObject read fData write fData; |
![]() |
property Children: TObjectList read FChildren; |
![]() |
property Parent: TMi_rtl_treenode read FParent write FParent; |
Descrição
Campos
![]() |
Sorted: Boolean; |
O atributo |
Métodos
![]() |
constructor Create(AData: TObject); |
O constructor |
![]() |
destructor Destroy; override; |
O destructor |
![]() |
function AddChild(AChildData: TObject): TMi_rtl_treenode; |
O método
|
![]() |
function CompareNodes(const Node1, Node2: TObject): integer; |
O método name é usado para comparar os nós com base no campo 'Data' do objeto 'TPath' e insere ordenado ou não, depende do atributo Sorted. |
![]() |
function AddChildOrdered(AChildData: TObject;CompareFunction: TCompareNodes): TMi_rtl_treenode; |
O método name é usado para comparar os nós com base no campo 'Data' do objeto 'TPath' e insere na ordem crescente. |
![]() |
procedure RemoveChild(AChild: TMi_rtl_treenode); |
O método |
![]() |
procedure ClearChildren; |
O método |
![]() |
function GetFirstChild: TMi_rtl_treenode; |
O método |
![]() |
function Create_Object(aFileName, aPart: string): TObject; virtual; overload; |
O método
|
![]() |
function AddChildFileName(Root: TMi_rtl_treenode; FileName: string):TMi_rtl_treenode; overload; |
O método
|
![]() |
function AddChildFileName(FileName: string):TMi_rtl_treenode; overload; |
O método |
![]() |
function Create_Object(aFileName, aPart: string; aAction: TAction): TObject; virtual; overload; |
O método
|
![]() |
function AddChildAction(Root: TMi_rtl_treenode;const TreeNodeNames: string; Action: TAction): TMi_rtl_treenode; overload; |
O método -
|
![]() |
function AddChildAction(const FileName: string; Action: TAction): TMi_rtl_treenode; overload; |
O método |
![]() |
function GetNodeLevel(): integer; |
o método
|
![]() |
function FindChild(const AName: string): TMi_rtl_treenode; |
O método
|
![]() |
function GetNextSibling: TMi_rtl_treenode; |
![]() |
procedure TreeToStringList(Mi_rtl_treenode: TMi_rtl_treenode; var S: TStringList); virtual; |
O método
|
![]() |
procedure TreeToStringListHtml(Mi_rtl_treenode: TMi_rtl_treenode; var S: TStringList); virtual; |
O método
|
![]() |
class procedure Test_AddChildFileName(okListHTML: boolean); |
A método de classe |
Propriedades
![]() |
property Children: TObjectList read FChildren; |
A prpriedade |
![]() |
property Parent: TMi_rtl_treenode read FParent write FParent; |
A propriedade |
Gerado por PasDoc 0.16.0.