Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mehrere Steuerelemente gleichzeitig ansprechen ... (https://www.delphipraxis.net/124671-mehrere-steuerelemente-gleichzeitig-ansprechen.html)

psd-sign 22. Nov 2008 20:09


Mehrere Steuerelemente gleichzeitig ansprechen ...
 
Ich habe in einem Formular 8 Steuerlemente gleichen Typs ... (z.B. TShape)

wie bekomme ich es hin, dass ich einmal alle Steuerlemente in eine "Menge" packe, sodass ich die Menge dieser Steuerelemente ansprechen kann? Ganz praktisch:
1 Click & Alle Steuerelemente bekommen die Farbe clRed ...

Muss ich mit Array arbeiten? Oder bin ich auf dem Holzweg?

DeddyH 22. Nov 2008 21:02

Re: Mehrere Steuerelemente gleichzeitig ansprechen ...
 
Array, TObjectList, mit FindComponent() durchgehen... wobei ich die beiden erstgenannten Möglichkeiten besser finde.

psd-sign 22. Nov 2008 21:04

Re: Mehrere Steuerelemente gleichzeitig ansprechen ...
 
Zitat:

Zitat von DeddyH
Array, TObjectList, mit FindComponent() durchgehen... wobei ich die beiden erstgenannten Möglichkeiten besser finde.

DANKEEEEE!!!!

Hier der Code:
Delphi-Quellcode:
procedure TForm1.TBinChange(Sender: TObject);
var
//Datentyp aus der 'Contnrs' ... erstellt eine Menge
//aus Steuerelementen (Ein Array mit Index 0,1,...,x)
Dioden: TObjectList;
i: Integer;

begin
//Eine Objektliste aus den Shapes S1,..,S8 erstellen,
//damit alle gleichzeitig angesprochen werden können.
Dioden:=TObjectList.Create;
Dioden.Add(S1);
Dioden.Add(S2);
Dioden.Add(S3);
Dioden.Add(S4);
Dioden.Add(S5);
Dioden.Add(S6);
Dioden.Add(S7);
Dioden.Add(S8);
If length(TBin.Text)>8 then
begin
  for i:=0 to 7 do
  begin
    (Dioden.Items[i] as TShape).enabled:=false;
    (Dioden.Items[i] as TShape).Brush.Color:=clblack;
  end;
end
else
begin
  for i:=0 to 7 do
  begin
    (Dioden.Items[i] as TShape).enabled:=true;
    //Zuweisung der Farben
  end;
end;
end;

toms 22. Nov 2008 21:11

Re: Mehrere Steuerelemente gleichzeitig ansprechen ...
 
...und wo gibst du die TObjectList wieder frei :gruebel:

psd-sign 22. Nov 2008 21:52

Re: Mehrere Steuerelemente gleichzeitig ansprechen ...
 
Zitat:

Zitat von toms
...und wo gibst du die TObjectList wieder frei :gruebel:

freigeben? Wozu?

DeddyH 23. Nov 2008 10:22

Re: Mehrere Steuerelemente gleichzeitig ansprechen ...
 
Damit keine Speicherlecks entstehen.

DeddyH 23. Nov 2008 10:29

Re: Mehrere Steuerelemente gleichzeitig ansprechen ...
 
Es ging uns auch nicht um die Objekte, sondern die Liste an sich.

[edit] Na toll, löscht der während meines Postings einfach seinen Beitrag, nachher heißt es, ich würde pushen :tongue: [/edit]

SirThornberry 23. Nov 2008 10:41

Re: Mehrere Steuerelemente gleichzeitig ansprechen ...
 
Sorry, da hab ich nach dem Absenden mitbekommen das ich müll geschrieben habe und es gar nicht um die Objekte sondern die Objektliste ging. In meiner Hoffnung das es noch niemand gesehen hat, hab ich es dann schnell gelöscht *Schande über mich* :duck:

Achja, Pushen ist erst nach 24 Stunden erwünscht :!: :wink:

SirTwist 23. Nov 2008 11:07

Re: Mehrere Steuerelemente gleichzeitig ansprechen ...
 
Guten Morgen,
Zitat:

Zitat von toms
...und wo gibst du die TObjectList wieder frei :gruebel:

Wozu eigentlich eine TObjectList und keine simple TList?

Gruß,
SirTwist

DeddyH 23. Nov 2008 11:28

Re: Mehrere Steuerelemente gleichzeitig ansprechen ...
 
Wenn er Objekte ablegen will, wieso soll er keine TObjectList nehmen?

Hawkeye219 23. Nov 2008 12:09

Re: Mehrere Steuerelemente gleichzeitig ansprechen ...
 
Hallo,

Zitat:

Zitat von DeddyH
Wenn er Objekte ablegen will, wieso soll er keine TObjectList nehmen?

...weil die Objektliste bei ihrer Freigabe die Shapes zerstört und sie damit vom Formular entfernt?

Gruß Hawkeye

SirTwist 23. Nov 2008 12:33

Re: Mehrere Steuerelemente gleichzeitig ansprechen ...
 
Zitat:

Zitat von DeddyH
Wenn er Objekte ablegen will, wieso soll er keine TObjectList nehmen?

Meines Wissens(!) nach ist der Unterschied zwischen TList und TObjectList, dass TObjectList der Eigentümer der Objekte sein kann und deshalb bei einem Entfernen aus der Liste (Remove, Delete) oder dem Freigeben der ganzen Liste auch die Objekte freigegeben werden. Dagegen muss man sich bei der TList selber um die Speicherverwaltung der Objekte kümmern.

Da die Objekte hier aber schon zum Formular gehören und von diesem auch speichertechnisch verwaltet werden, ist aus meiner Sicht eine TList ausreichend, oder? Ich lasse mich gerne korrigieren...

Gruß,
SirTwist

Andreas L. 23. Nov 2008 13:45

Re: Mehrere Steuerelemente gleichzeitig ansprechen ...
 
Zitat:

Zitat von SirTwist
Zitat:

Zitat von DeddyH
Wenn er Objekte ablegen will, wieso soll er keine TObjectList nehmen?

Meines Wissens(!) nach ist der Unterschied zwischen TList und TObjectList, dass TObjectList der Eigentümer der Objekte sein kann und deshalb bei einem Entfernen aus der Liste (Remove, Delete) oder dem Freigeben der ganzen Liste auch die Objekte freigegeben werden. Dagegen muss man sich bei der TList selber um die Speicherverwaltung der Objekte kümmern.

Da die Objekte hier aber schon zum Formular gehören und von diesem auch speichertechnisch verwaltet werden, ist aus meiner Sicht eine TList ausreichend, oder? Ich lasse mich gerne korrigieren...

Gruß,
SirTwist

TObjectList.Create kann den Parameter OwnObjects:Boolean haben. Einfach False übergeben und die ObjectList kümmert sich nicht mehr ums freigeben der Objekte.

Hawkeye219 23. Nov 2008 15:04

Re: Mehrere Steuerelemente gleichzeitig ansprechen ...
 
Hallo,
Zitat:

Zitat von Andreas L.
TObjectList.Create kann den Parameter OwnObjects:Boolean haben. Einfach False übergeben und die ObjectList kümmert sich nicht mehr ums freigeben der Objekte.

Und welchen Vorteil bietet die Objektliste dann hier noch? Ich denke, im geschilderten Fall genügt die Verwendung eines statischen Arrays. Dies erspart sogar den ansonsten notwendigen Typecast beim Zugriff auf die Listenelemente.

Gruß Hawkeye

DeddyH 23. Nov 2008 15:06

Re: Mehrere Steuerelemente gleichzeitig ansprechen ...
 
Richtig, es hat ja auch niemand behauptet, dass es dynamisch sein muss.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz