![]() |
ComponentCount
Hallo,
ich habe gerade ein ganz winziges Problem. So eine Frage habe ich schonmal gestellt und dann hat auch alles funktioniert, aber hier weiß ich einfach nicht weiter. Ich habe zwei Panels in einer Scrollbox. Wenn ich jetzt
Delphi-Quellcode:
ausführe bekomme ich 0 zurück.
Scrollbox1.ComponentCount
Eigentlich müsste dort ja 2 stehen. Meine Struktur sieht so aus:
Code:
Woran könnte das liegen?
+Form2
|-Panel2 |-PageControl1 |-TabSheet1 |-Scrollbox1 |
Re: ComponentCount
Ist die ScrollBox auch der Owner oder nur der Parent?
|
Re: ComponentCount
Zur Designzeit wird scheinbar nur der Parent gesetzt, der Owner der Panels ist nicht die Scrollbox. Dies kannst du nur hinbekommen, wenn du die Elemente in der Scrollbox zur Laufzeit erstellst und richtig zuweist.
|
Re: ComponentCount
Owner ist bei Erzeugung durch den Formulardesigner immer das Formular
|
Re: ComponentCount
Oder du sammelst dir die Elemente selber zusammen...
Delphi-Quellcode:
type
TResult = array of TObject; : : function TForm1.GetScrollboxElemente(Scrollbox: TScrollbox): TResult; var i:integer; Component:TComponent; begin setlength(Result, 0); for i:=1 to Self.ComponentCount do begin Component:=Self.Components[i-1]; if Component is TWinControl then if (Component as TWinControl).Parent = Scrollbox then begin setlength(Result, length(Result)+1); Result[high(Result)]:=Component; end; end; end; |
Re: ComponentCount
Ahh ich hab jetzt hier was rausgefunden:
![]() Ich muss nicht ComponentCount sondern ControlCount nehmen. Mich würde jetzt noch interessieren, warum das jetzt nicht mehr mit Componentcount funktioniert? Ich bin mir zu 100% sicher, dass das mal funktioniert hat. Und zwar so:
Delphi-Quellcode:
procedure TForm1.GetObjectByName(Sender: TObject);
var i: Integer; begin for i := ScrollBox1.ComponentCount - 1 downto 0 do begin if Scrollbox1.Components[i] is TPanel then if TPanel(Scrollbox1.Components[i]).Name = (Sender as TPanel).Parent.Name then begin if TPanel(Scrollbox1.Components[i]).AutoSize = false then begin TPanel(Scrollbox1.Components[i]).AutoSize:=true; end else begin TPanel(Scrollbox1.Components[i]).AutoSize:=false; TPanel(Scrollbox1.Components[i]).Height:=17; end; end; end; end; |
Re: ComponentCount
Bei WinControls gibt es nur den Owner
|
Re: ComponentCount
Es gibt Components[] und Controls[] und jeweils dazugehörend ComponentCount und ControlCount.
Beide Arrays bilden einen Baum ab bei dem das Formular an der Spitze (oder an der Wurzel, je nach Sichtweise) steht. Das Components[]-Array spiegelt die Besitzverhältnisse wieder. Fast alle Komponenten gehören dem Formular. Bei einer TTable oder TQuery gehören die TField-Objekte zum Beispiel dem TTable oder TField-Objekt. Dagegen spiegelt das Controls[]-Array die visuellen Verhältnisse. Es wird genau der Baum abgebildet, den du in deinem 1. Beitrag gezeigt hast. Jeder Versuch, diesem Baum irgendwie auf Components[] zurückzuführen ist sinnlos. Richtig ist, Controls[] und ControlCount zu verwenden. |
Re: ComponentCount
Ok, dann weiß ich jetzt wieder mehr :-D
Dann bedanke ich mich vielmals. Aber trotzdem komisch, dass das mit ComponentCount vor einiger Zeit mal bei mir funktioniert hat. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz