Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - komponenten abfragen?
inselberg - Fr 16.07.04 22:59
Titel: komponenten abfragen?
hi,
ist es möglich alle in einem programm befindlichen "komponenten" - die eine caption property haben - (per schleife) abzufragen...
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| TForm1 = class(TForm) panel1: TPanel; StatusBar1: TStatusBar; IdHTTP1: TIdHTTP; Image1: TImage; Label1: TLabel; |
würde mir dann panel1 und label1 liefern
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.Moderiert von
Tino: Topic aus Sonstiges verschoben am Mo 19.07.2004 um 13:34
tommie-lie - So 18.07.04 16:30
TForm stellt das Propterty Components zur Verfügung, das ist syntaktisch ein Array da sind alle Komponenten auf der Form drin.
Rauszufinden, ob die Komponente ein Caption-Property hat, ist da schon schwieriger. Wenn es dir nur um ganz bestimmte Komponenten geht, kannst du mit "is" prüfen, ob die Klasse stimmt. Ansonsten gibt es meines Wissens keien zuverlässige Methode, rauszufinden ob die Komponente eine Caption hat, denn die wird zwar in TControl eingeführt, aber nicht alle Nachkommen dieser Klasse müssen dieses Property ja auch veröffentlichen (z.B. TEdit).
raziel - So 18.07.04 16:53
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| uses , TypInfo;
if GetPropInfo(Edit1, 'Caption') = nil then ShowMessage('edit1.caption gibs net'); if GetPropInfo(Label1, 'Caption') = nil then ShowMessage('label1.caption gibs net'); |
raziel
Matthias-K - So 18.07.04 17:14
hab grad mal bissle probiert, aber man bekommt nicht wirklich raus, ob die komponente eine caption eigenschaft hat.
hab es mal so probiert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure tform1.button1click(sender : tobject); var a : integer; f : tcomponent; t : string; begin for a := 0 to components.componentscount do begin t := form1.Components[a].Name; f := components[a].FindComponent(t); end; end; |
nur, da man nicht an den typ der compo rankommt, hat man keine chance, per findcomponent auf die caption eigenschaft zuzugreifen.
müsste ich mal kucken, ob ich was genaues dazu finde!
mfg matthias
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
raziel - So 18.07.04 17:37
*seufz* Es gibt doch sooo ein schönes und nützliches Delphi-Tag... naja. Zum Beispiel so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button1Click(Sender: TObject); var i: Integer; p: PTypeInfo; begin for i := 0 to ComponentCount-1 do begin p := Components[i].ClassInfo; if (GetPropInfo(p, 'Caption') <> nil) then SetPropValue(Label1, 'Caption', 'Hello, World!'); end; end; |
TypInfo einbinden nicht vergessen!
raziel
//edit: überflüssiges entfernt... ;-)
BenBE - So 18.07.04 19:35
| raziel hat folgendes geschrieben: |
| //edit: überflüssiges entfernt... ;-) |
Un dabei einen Fehlr in Zeile 10 übersehen: Muss heißen
Delphi-Quelltext
1:
| SetPropValue(Components[i], 'Caption', 'Hello, World!'); |
Sonst wird immer wieder das Label1 editiert ;-)
Ansonsten ist der Source genial!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!