[listowanie komponentów]

0

Jak pobrać listę wszystkich komponentów na formularzu. :-|

Robię tak: :-)

for i:=0 to ComponentCount-1 do
ComboBox1.Items.AddObject(Components[i].Name + ': ' + Components[i].ClassName, Components[i]);

lub tak: :-[

procedure AddComponent(Root: TComponent);
begin
InspektorObiektow.ComboBox1.Items.AddObject(Root.Name + ': ' + Root.ClassName, Root);
THComponent(Root).GetChildren(AddComponent{$IFNDEF VER90}, Self{$ENDIF});
end;

;-( I żadna z tych procedur nie pobiera komponentów które leżą na innych komponentach.

Z góry dziękuję za odpowiedź. [browar] ;-(

0

for i := 0 to Form.ComponentCount - 1 do

0

Na to samo wychodzi.

Chcę pobrać wszystkie komponenty wraz z tymi które są położone na inne.

0

To byś musiał, gdy natrafisz na komponent, na którym można coś kłaść (np. panel), wylistować jego komponenty. Zapewne zasada jest ta sama, co dla formy i trzeba będzie użyć algorytmu rekurencyjnego.

0

Może ktoś zrobił już coś takiego.
Może jakiś bezpłatny komponent.

Pilnie proszę o pomoc.

0
procedure listujkom(Win:TWinControl);
var i:integer;
begin
 for i:=0 to win.ComponentsCount - 1 do
  begin
   // Tutaj dodaj do listy, lub zrób z tym co chcesz
   if win.Components[I] is TWinControl then listujkom(win.Components[I]);
  end;
end;
0

à propos niedziała to na komponenty ,które są położone na inne komponenty które są położone jeszcze na inne komponenty.

A można prociś całą procedurę pobierającą te wszystkie komponenty?

0
procedure Listuj(Komponent: TComponent);
var
  kom: tcomponent;
  i: integer;
begin 
  for i := 0 to komponent.ComponentCount - 1 do
  begin
    kom := komponent.Components[i];
    {tu dodaj do listboxa, czy czgos innego :) }
    if (Kom is TPanel) or (Kom is innykomponentzdziecmi) then
      Listuj(kom);  
  end;

0

Pomogło.
Bardzo dziękuję za odpowiedź. [browar]

1 użytkowników online, w tym zalogowanych: 0, gości: 1