Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Wie kann ich FindComponent bei Record-Typ anwenden?
Kay E. - Fr 19.11.10 22:34
Titel: Wie kann ich FindComponent bei Record-Typ anwenden?
Hallo!
Am besten zuerst einmal der Code (Ausschnitt):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48:
| type TStatistik= record Feld:TLabel; AnzahlK:Integer; AnzahlT:Integer; end;
TStatistikpanelKlein=class(TPanel) private L00:TStatistik; L01:TStatistik; L02:TStatistik; L10:TStatistik; L11:TStatistik; L12:TStatistik; L20:TStatistik; L21:TStatistik; L22:TStatistik; Erzeugt:boolean; end;
var StatistikpanelKlein:TstatistikpanelKlein;
procedure StatistikBauen(Owner:TComponent);
implementation
procedure StatistikBauen(Owner:Tcomponent; Wiesetyp:TWiesetyp); var i,j:integer; begin StatistikPanelKlein:=TStatistikpanelKlein.Create(Owner); StatistikPanelKlein.Parent:=Form1; StatistikpanelKlein.Left:=25; StatistikpanelKlein.Top:=25;
StatistikpanelKlein.L00.Feld:=TLabel.Create(StatistikpanelKlein); StatistikpanelKlein.L00.Feld.Parent:=StatistikpanelKlein; StatistikpanelKlein.L00.Feld.Caption:='Testerle';
i:=0; j:=0; with StatistikpanelKlein do begin TStatistik(FindComponent('l'+inttostr(i)+inttostr(j)).Feld.caption:='Hat funktioniert'; invalidate; end; end; |
Ich baue hier einen Record, in dem ein TLabel ist, welches ich nachher 9 mal (als Raster) in dem Panel als Container unterbringen will. Mit jedem Label sollen noch weitere Informationen gespeichert werden, deswegen das Record.
Damit ich dann nicht alle 9 Labels umständlich manuell ausrichten, benennen, Parent zuweisen, etc muss, würd ich das gern in ne Schleife verpacken und würde dafür die FindComponent-Funktion nutzen.
Bei dem Code oben wird mir allerdings der Fehler ausgegeben "TComponent" does not contain a member named "Feld" und undeclared identifier "caption".
Ich entdecke von der Logik her keinen Fehler in meinem Code, aber vlt. könnt ihr mir ja helfen.
Wie kann ich meine Labelkomponente in den Records elegant ansteuern?
Danke für eure Hilfe!
jaenicke - Fr 19.11.10 23:17
Ich markiere dir mal deine zusammengehörigen Klammern...
Delphi-Quelltext
1:
| TStatistik(FindComponent('l'+inttostr(i)+inttostr(j)).Feld.caption:='Hat funktioniert'; |
Da Delphi die ja auch hervorhebt, die zusammengehören, sieht man das eigentlich ganz gut. :gruebel:
Xion - Fr 19.11.10 23:18
Also direkt auf die Frage hab ich auch keine präzise Antwort (nur Vermutungen).
ABER:
Warum so kompliziert?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| TStatistikpanelKlein=class(TPanel) private L: array [0..2] of array [0..2] of TStatistik; Erzeugt:boolean; end;
var StatistikpanelKlein:TstatistikpanelKlein;
procedure StatistikBauen(Owner:TComponent);
implementation
procedure StatistikBauen(Owner:Tcomponent; Wiesetyp:TWiesetyp); var i,j:integer; begin StatistikPanelKlein:=TStatistikpanelKlein.Create(Owner); StatistikPanelKlein.Parent:=Form1; StatistikpanelKlein.Left:=25; StatistikpanelKlein.Top:=25;
StatistikpanelKlein.L00.Feld:=TLabel.Create(StatistikpanelKlein); StatistikpanelKlein.L00.Feld.Parent:=StatistikpanelKlein; StatistikpanelKlein.L00.Feld.Caption:='Testerle';
i:=0; j:=0; StatistikpanelKlein.L[i,j].Feld.caption:='Hat funktioniert'; end; |
//Edit:
Das ist zudem auch noch deutlich schneller als FindComponent.
Achtung: Nicht vergessen, die Labels zu createn, bevor du was reinschreiben willst
Kay E. - So 21.11.10 14:08
Oh mann, wie kann man nur so auf dem Schlauch stehen? *g*
Die Lösung mit den Arrays ist natürlich naheliegend - Danke!
der organist - So 21.11.10 15:25
Xion hat folgendes geschrieben : |
[...]
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| [...]
procedure StatistikBauen(Owner:Tcomponent; Wiesetyp:TWiesetyp); var i,j:integer; begin [...] i:=0; j:=0; StatistikpanelKlein.L[i,j].Feld.caption:='Hat funktioniert'; end; [...] |
|
Reicht euch das hier nicht aus? xD
Delphi-Quelltext
1:
| StatistikpanelKlein.L[0,0].Feld.caption:='Hat funktioniert'; |
Kay E. - So 21.11.10 15:59
In diesem speziellen Fall schon, aber wenn du meinen Text unter dem Code gelesen hättest:
| Zitat: |
| Damit ich dann nicht alle 9 Labels umständlich manuell ausrichten, benennen, Parent zuweisen, etc muss, würd ich das gern in ne Schleife verpacken |
und genau dafür sind die Laufvariablen gedacht. Sozusagen als Dummys in einer Trockenübung eingesetzt.
der organist - So 21.11.10 22:53
Da war aber keine Schleife mehr...... ich würd mal sagen, dass jemand anders deinen Text nich gelesen hat...
Xion - Mo 22.11.10 08:43
Ähm...auch im Originalcode war es keine Schleife ;)
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!