Einzelnen Beitrag anzeigen

Andreas L.
(Gast)

n/a Beiträge
 
#8

Re: Herausfinden wie viele Panels auf einen Panel liegen

  Alt 30. Mär 2006, 20:16
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;
  Mit Zitat antworten Zitat