Zitat von
marabu:
@Dennis: alles richtig, aber du sollst die Rekursion gar nicht auf eine Ebene begrenzen:
Zitat von
onlinehome:
... ich habe ein Panel auf welchen mehrere Panels liegen. ... Auf diesen Panels liegen weitere Panels ...
@Andreas: wie testet du denn?
Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
s: TStringList;
begin
s := TStringList.Create;
GetControls(Panel1, s);
ShowMessage(s.Text);
s.Free;
end;
marabu
jetzt gehts. Leider wird mir das 1te Panel angezeigt, dann das ExPanel und noch dazu das Panel welches auf dem ExPanel liegt. Ich möchte jedoch das mir nur die ExPanels angezeigt werden.
ich habe mich mal selber versucht eine Routine zu schreiben. Da mein Kopf heute schon in der Berufschule geraucht hat denke ich mal das dies hier von der Logik nicht wirklich der Renner ist. Kompiliert wird es sogar bis zu den 2 Zeilen wo ich versuche auf den SpeedButton zu zugreifen:
Delphi-Quellcode:
function ArrangeExPanel(Sender : TObject):Boolean;
var
i: Integer;
useEdit: TObject;
useDelete: TObject;
sl: TStringlist;
begin
if Sender.ClassType=TPanel then
begin
sl:=TStringList.Create;
repeat
sl.add((Sender as TPanel).FindComponent('ExPanel').name);
until (Sender as TPanel).FindComponent('ExPanel').name='';
begin
for i:=0 to sl.count-1 do
begin
useEdit:=(Sender as TPanel).FindComponent('Edit_'+sl.strings[i]);
useDelete:=(Sender as TPanel).FindComponent('Delete_'+sl.strings[i]);
useDelete:=(useDelete as TSpeedButton);
useEdit:=(useEdit as TSpeedButton);
useEdit.Left:=(Sender as TPanel).Width-3;
useDelete.Left:=(Sender as TPanel).Width-87;
end;
end;
sl.free;
Result:=true;
end
else
begin
Result:=false;
end;
end;