Einzelnen Beitrag anzeigen

danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#19
  Alt 23. Apr 2003, 19:37
Hallo erstmal,

habe eben mal kurz in der Unit Classes nachgeschaut und folgendes rausgefunden.

Componentcount, Components etc. umfaßt alle Komponenten, welche der Komponente gehören (AOwner). In deinem Fall währe das also das Form.
Hast du jedoch eigene Komponenten geschrieben, welche ein Editfeld als Unterkomponente besitzen, so wird dieses Editfeld nicht bei einem Durchlauf von ComponentCunt des Form mit aufgefaßt da im Constructor der eigenen Komponente etwa soetwas drinsteht.

Delphi-Quellcode:
class TMeineKompo = Class(TPanel)
private
  Edi : TEdit;

...

implementation

constructor TMeineKompo.Create(AOwner : TComponent);
begin
  inherited;
  Edi := TEdit.Create(self); // <--- AOwner ist also TMeineKompo
  Edi.Parent:=self // <--- gibt nur an, daß es auf TMeineKompo angezeigt werden soll

  ...
  
end;
Aber du kannst sicher sein, alle Komponenten, die du per Drag and Drop oben aus der Leiste auf das Form gezogen hast (auch wenn sie auf einem Panel oder Tabsheet liegen) werden gefunden, da AOwner immer das Form sein wird und nur der Parent auf das Panel bzw. Tabsheet etc. zeigt.

Noch ein Hinweis:

FComponent (private in TComponent) ist ein TListobjekt in dem alle Komponenten eingetragen werden, die diese Komponente besitzt.
Auf FComponent greifen ComponentCount, Components etc zu.
Du solltest dir auch mal den Quelltext von FindComponent anschauen. Es ist auch nur ein Schleife, die alle Namen mit dem String vergleicht. Wenn du also bei allen Felder eines Typs dieselbe Eigenschaft ändern willst, so ist es meines erachtens
nicht besonders Sinnvoll FindComponent zu verwenden.

Gruß danielA
  Mit Zitat antworten Zitat