![]() |
Alle Controls mit FOR-IN durchlaufen?
Hai,
ist es möglich diesen Code:
Delphi-Quellcode:
mit dieser "FOR-IN" Konstruktion zu ersetzen?
var
ndx : Integer; begin for ndx := 0 to Panel1.ControlCount -1 do begin if (Panel1.Controls[ndx] is TSpeedButton) then begin (Panel1.Controls[ndx] as TSpeedButton).Glyph := nil; end; end; end; Irgendwie blicke ich bei der noch nicht so richtig durch. :gruebel: |
Re: Alle Controls mit FOR-IN durchlaufen?
Hi,
bei der Controls Eigenschaft von TForm gibt es keine Möglichkeit diese mit einer for..in Schleife zu durchlaufen, da es sich um eine Array-Property handelt. (Controls.pas, Z. 1462). Aber, vielleicht geht es ja so:
Delphi-Quellcode:
mfG
var
Control: TComponent; begin for Control in Self do if Control is TSpeedButton then TSpeedButton(Control).Glyph := nil; mirage228 |
Re: Alle Controls mit FOR-IN durchlaufen?
Hai mirage228,
Danke für deine Antwort. Leider werden in diesem Fall alle Componenten von Form1 durchlaufen. Mir ging es aber in diesem Fall nur um die TSpeedButton die auf Panel1 liegen. Jetzt kann ich das natürlich mit einer weiteren IF-Abfrage prüfen. Nur ist dann der "Vorteil" des FOR-IN wieder dahin. |
Re: Alle Controls mit FOR-IN durchlaufen?
Hi,
oh, da hatte ich mich wohl verlesen. Was mit TForm geht, sollte natürlich auch mit TPanel klappen:
Delphi-Quellcode:
mfG
var
Control: TComponent; begin for Control in Panel1 do if Control is TSpeedButton then TSpeedButton(Control).Glyph := nil; end; mirage228 |
Re: Alle Controls mit FOR-IN durchlaufen?
Zitat:
Ich fürchte es liegt daran das der Owner der Buttons die Form und nicht das Panel ist. |
Re: Alle Controls mit FOR-IN durchlaufen?
Hi,
habs mal getestet: Der Owner der Speedbuttons ist tatsächlich das Form, und nicht das Panel. :? Da fällt mir nur dieser Code zu ein:
Delphi-Quellcode:
mfG
var
Control: TComponent; begin for Control in Self do if (Control is TSpeedButton) and (TSpeedButton(Control).Parent = Panel1) then TSpeedButton(Control).Glyph := nil; mirage228 |
Re: Alle Controls mit FOR-IN durchlaufen?
Hallo Sharky,
Zitat:
Code:
Grüße vom marabu
var
Control: TComponent; begin for Control in Panel1 do // muss heißen: Panel1.Controls if Control is TSpeedButton then TSpeedButton(Control).Glyph := nil; end; |
Re: Alle Controls mit FOR-IN durchlaufen?
Hi marabu,
genau .Controls geht ja nicht. Den Grund habe ich schon in meinem ersten Posting geschrieben... Der Enumerator von TComponent bezieht sich nur auf das Components und nicht auf das Controls Array. mfG mirage228 |
Re: Alle Controls mit FOR-IN durchlaufen?
Dann bleibe ich in diesem Fall bei meinem ersten Code. Da dieser nur die Controls auf dem Panel durchläuft ist er effektiver als die FOR-IN Variante.
|
Re: Alle Controls mit FOR-IN durchlaufen?
Lasst mich nicht dumm sterben. Ich arbeite noch mit D7. Warum kann das FOR-IN-Konstrukt für Components verwendet werden, aber nicht für Controls? Warum nicht für Arrays? Waldteufel hat mir eben in der Online-Hilfe von D2005 gezeigt, dass FOR-IN mit ArrayExpr, StringExpr, SetExpr und CollectionExpr funktionieren soll. Warum also nicht mit einem Controls-Array? Ist da ein Fehler in der Dokumentation?
marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:45 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