Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Para quem não entendeu o titulo, é como se fosse uma arvore genealógica.
Você está livre para utilizar este código e/ou alterar.
1º - Crie um arquivo com o nome "unProjFile.pas" (este nome pode ser mudado, mas será este para facilitar o tutorial)
2º - Abra o arquivo, e cole o seguinte código:
CODE
unit unProjFile;
interface
uses
SysUtils, Classes, dialogs;
type
TArq = class;
TArqs = class;
TArq = class(TCollectionItem)
public
Owner: Pointer;
arqs: TArqs;
Text: string;
end;
TArqs = class(TCollection)
private
function GetItem(Index: Integer): TArq;
public
arqs: TArq;
function Add(pArq: TArq): TArq;
property Item[Index: Integer]: TArq read GetItem;
procedure Remove(ed: TArq);
end;
procedure montaAlgoeMostra();
implementation
var
pMain: TArqs;
procedure montaAlgoeMostra();
function getFilhos(pArq: Tarqs; str: string): string;
var
i: Integer;
s: string;
begin
s := '';
for i := 0 to pArq.Count - 1 do
begin
s := s + str + pArq.Item[i].Text + #10#13;
if pArq.Item[i].arqs.Count > 0 then
s := s + str + getFilhos(pArq.Item[i].arqs, '_')+ #10#13;
end;
Result := Trim(s);
end; item, tmp: TArq;
s: string; pMain := TArqs.Create(TArq);
item := pMain.Add(nil);
item.Text := 'Primeiro filho do nil';
item := pMain.Add(item);
item.Text := 'Neto do nil';
item := pMain.Add(item);
item.Text := 'Primeiro Neto';
item := pMain.Add(nil);
item.Text := 'Segundo filho do nil';
tmp := pMain.Add(item);
tmp.Text := 'Primeiro filho do segundo nil';
item := pMain.Add(item);
item.Text := 'Segundo filho do segundo nil';
item := pMain.Add(tmp);
item.Text := 'O filho do tmp pode ser colocado mesmo depois...';
s := getFilhos(pMain, '');
ShowMessage(s);
end;
//------------------------------------------------------------------------------
function TArqs.Add(pArq: TArq): TArq;
begin
if pArq = nil then
begin
Result := inherited Add as TArq;
Result.arqs := TArqs.Create(TArq);
Result.Owner := TArq(pArq);
end
else
begin
Result := pArq.arqs.Add(nil);
Result.arqs := TArqs.Create(TArq);
Result.Owner := TArq(pArq);
end;
end;
procedure TArqs.Remove(ed: TArq);
var I: Integer; Delete(I);
Break;
end;
end;
function TArqs.GetItem(Index: Integer): TArq; Result := inherited Items[Index] as TArq;
end;
end.
3º - Inclua a uses unProjFile em alguma outra unit.
4º - Em algum evento, chame a função montaAlgoeMostra
Explicando:
Isso funciona como uma sacola, você pode colocar coisas na sacolas, até mesmo sacolas. Foi com este pensamento que conclui o código.
Este é um código muito útil se for fazer sistemas de FTP ou gerenciador de arquivos(meu caso, em ambas partes)
Espero comentários.
obs: coloquei um code dentro do codebox para funcionar o
[i]
Carregando comentários...