Eigenschaften von Objekten setzen
Hallo Crew,
Gibt es hier noch Pascaler?
Ich arbeite mit:
Laz 1.2.4
fpc 2.6.4
unter Win 7 32 bit / 64 bit
Ich möchte Eigenschaften von TStaticText-Elementen (109 Stück in einem TForm) verändern - TStaticText.Color.
Das Ganze in einer Schleife, welche die einzelnen Elemente via Schleifenvariable ansprechen soll.
Das Erzeugen der Elemente während der Laufzeit bringt es nicht, da eine Reihe von Attributen gesetzt werden müssen (Left, Top, Height, Width, Caption; und latürnich alle unterverschiedlich!).
Die Frage: Wie kann ich die .Color-Eigenschaft per Schleife setzen, wenn ich nur den Index des Elements angeben will?
So ist es als Pseudocode gemeint (geht natürlich nicht):
Aber in dieser Manier ist es gewünscht.
Hat jemand ne Idee? Ich finde es einfach nicht per Google oder Lazarus-Forum.
Gruß
ANKH
Gibt es hier noch Pascaler?
Ich arbeite mit:
Laz 1.2.4
fpc 2.6.4
unter Win 7 32 bit / 64 bit
Ich möchte Eigenschaften von TStaticText-Elementen (109 Stück in einem TForm) verändern - TStaticText.Color.
Das Ganze in einer Schleife, welche die einzelnen Elemente via Schleifenvariable ansprechen soll.
Das Erzeugen der Elemente während der Laufzeit bringt es nicht, da eine Reihe von Attributen gesetzt werden müssen (Left, Top, Height, Width, Caption; und latürnich alle unterverschiedlich!).
Die Frage: Wie kann ich die .Color-Eigenschaft per Schleife setzen, wenn ich nur den Index des Elements angeben will?
So ist es als Pseudocode gemeint (geht natürlich nicht):
FOR i:=1 TO 109 DO
StaticText+IntToStr(i).Color:=clYellow
Hat jemand ne Idee? Ich finde es einfach nicht per Google oder Lazarus-Forum.
Gruß
ANKH
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 246303
Url: https://administrator.de/contentid/246303
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo Ankh,
zwar etwas spät, aber besser als nie.
Ich bin zwar Delphi-Entwickler, aber die LCL ist der VCL ja sehr ähnlich, Du könntest daher mal folgendes testen:
Jede fensterorientierte Komponente ist in Delphi von
Wenn Deine
Alternativ könntest Du Dir im
Übrigens: Die Konstruktion
wird nicht funktionieren. In diesem Ausdruck kann man den Namen eines Objekts nicht zur Laufzeit dynamisch erzeugen.
Was funktionieren würde:
Das ist aber nicht sehr performant.
Gruß
Friemler
zwar etwas spät, aber besser als nie.
Ich bin zwar Delphi-Entwickler, aber die LCL ist der VCL ja sehr ähnlich, Du könntest daher mal folgendes testen:
Jede fensterorientierte Komponente ist in Delphi von
TWinControl
abgeleitet. Ein TWinControl
-Objekt oWC
hat die Array-Properties Controls
und Components
. Controls
liefert alle Controls, deren Parent oWC
ist (der Index der Property läuft von 0 bis Pred(ControlCount)
), Components
liefert alle Controls, deren Owner oWC
ist (der Index der Property läuft von 0 bis Pred(ComponentCount)
). Die Components
-Property liefert also sämtliche Child-Objekte von oWC
oder ihm untergeordneter Controls, während die Controls
-Property nur die unmittelbaren Child-Objekte von oWC
liefert. Hört sich kompliziert an, ist es aber nicht, wenn man es zwei- oder dreimal ließt. Wenn Deine
TStaticText
-Objekte alle direkte Child-Objekte des Formulars sind, könntest Du folgende Schleife verwenden:procedure SetTextColor(AParent: TWinControl; AColor: TColor);
var
Cnt: integer;
begin
for Cnt := 0 to Pred(AParent.ControlCount) do
if AParent.Controls[Cnt] is TStaticText then
AParent.Controls[Cnt].Color := AColor;
end;
Alternativ könntest Du Dir im
FormCreate
-Handler des Formulars mit Hilfe der obigen Schleife ein Array erstellen, das garantiert nur die TStaticText
-Objekte enthält und im späteren Programmlauf über dieses Array iterieren.Übrigens: Die Konstruktion
StaticText+IntToStr(i).Color:=clYellow
Was funktionieren würde:
var
AText: TStaticText;
begin
for i := 1 to 109 do
begin
AText := TStaticText(Form1.FindChildControl('StaticText' + IntToStr(i)));
if Assigned(AText) then AText.Color := clYellow;
end;
end;
Gruß
Friemler