Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Пребор всех компонент рекурсивно


Автор: fess 27.2.2006, 15:45
Как перебрать все компоненты на панели? Причём на самих этих компонентах могу ещё находиться компоненты!
При использовании ComponentCount - говориться, что нет ни одного компонента на панели ( ComponentCount = 0).
При использовании ControlCount - невозможно передать в рекурсивную процедуру процедуру, так как У TControl нету свойства ControlCount ((
Это нужно для процедуры сохранения компонента в поток:

Код

    procedure AddToStream(   SomeComponent:TComponent;ToStream:TMemoryStream);

      Procedure RecurceWrite(SomeComponent:TComponent; ToStream:TMemoryStream);
        var i: integer;
      begin
        for i := 0 to SomeComponent.ComponentCount - 1
        do begin
          ToStream.WriteComponent(SomeComponent.TComponents[i]);
          if SomeComponent.Components[i].ComponentCount>0
            then  RecurceWrite(SomeComponent.Components[i],ToStream);
        end;
      end;

    begin
      ToStream:=TMemoryStream.Create;
      RecurceWrite(SomeComponent,ToStream);
    end;


Но это не работает ((
Так как ComponentCount=0 (((

Автор: Rennigth 27.2.2006, 16:00
к примеру:
Код

procedure RecursiveDisable(AParent: TWincontrol);
var
  i: Integer;
begin
  if Assigned(AParent) and (AParent is TWincontrol) then
    for i := AParent.ControlCount - 1 downto 0 do
    begin
      AParent.Controls[i].Enabled := False;
      if AParent.Controls[i] is TWincontrol then
        RecursiveDisable(TWincontrol(AParent.Controls[i]));
    end;
end;


Автор: Romikgy 27.2.2006, 16:01
GetWindow c GW_CHILD не поможет?

Автор: fess 28.2.2006, 11:24
Rennigth
Спасибо за помощь! Сработало!

Romikgy
Я не понял, но это уже и не важно )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)