Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Label-Array füllen
Mitmischer 1703 - Do 09.07.09 10:29
Titel: Label-Array füllen
Hi DF!
Folgendes hab ich in meiner Unit stehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var MainForm: TMainForm;
const Lbl_name : String = 'Lbl'; ready : String = 'Fertig stellen'; Labels : array of TLabel = [MainForm.Welcome, MainForm.Sys_Check, MainForm.Setuptype, MainForm.Path, MainForm.Components, MainForm.Summary, MainForm.Install, MainForm.Lbl_ready]; |
Doch Delphi sagt mir:
[DCC Fehler] Unit2.pas(53): E2001 Ordinaltyp erforderlich
[DCC Fehler] Unit2.pas(53): E2010 Inkompatible Typen: 'Integer' und 'TLabel'
[DCC Fehler] Unit2.pas(54): E2010 Inkompatible Typen: 'Integer' und 'TLabel'
[DCC Fehler] Unit2.pas(54): E2010 Inkompatible Typen: 'Integer' und 'TLabel'
[DCC Fehler] Unit2.pas(54): E2010 Inkompatible Typen: 'Integer' und 'TLabel'
[DCC Fehler] Unit2.pas(55): E2010 Inkompatible Typen: 'Integer' und 'TLabel'
[DCC Fehler] Unit2.pas(55): E2010 Inkompatible Typen: 'Integer' und 'TLabel'
[DCC Fehler] Unit2.pas(55): E2010 Inkompatible Typen: 'Integer' und 'TLabel'
Wieso brauch ich da einen Integer? Es ist doch ein Label-Array! Und wenn ich versuche es im FormCreate zu erzeugen,
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Labels[0] := Welcome; Labels[1] := Sys_Check; Labels[2] := Setuptype; Labels[3] := Path; Labels[4] := Components; Labels[5] := Summary; Labels[6] := Install; Labels[7] := Lbl_ready; |
krieg ich eine Zugriffsverletzung. Allerdings greife ich im FormCreate auch auf eine Komponente zu - was reibungslos funktioniert!
Help!!
Gausi - Do 09.07.09 10:39
Hallo,
Erstens sollten bei der Konstanten-Deklaration runde Klammern, nicht eckige. Zweitens bin ich mir grade nicht sicher, ob man da dynamische Arrays so deklarieren darf. :gruebel:
So sollte es klappen:
Delphi-Quelltext
1: 2: 3:
| Labels : array[0..7] of TLabel = (MainForm.Welcome, MainForm.Sys_Check, MainForm.Setuptype, MainForm.Path, MainForm.Components, MainForm.Summary, MainForm.Install, MainForm.Lbl_ready]); |
Bei der zweiten Variante hast du wohl vergessen, die Länge des dynamischen Arrays vorher zu setzen. Dann sollte
Labels aber afaik auch eine Variable sein, keine Konstante.
Delphi-Quelltext
1: 2:
| SetLength(Labels, 8); |
BenBE - Do 09.07.09 11:10
Man darf Konstanten zwar so deklarieren (allerdings nur für statische Größenangaben), muss dann aber auch konstante Ausdrücke als Werte angeben. Dies ist bei Membern des Forms nicht der Fall. Nimm lieber die zweite Variante der Initialisierung und setz mit SetLength die Größe richtig ...
Mitmischer 1703 - Do 09.07.09 11:14
Die Idee war, dass man jederzeit mit einer kurzen Änderung (Label dazu / weg) was ändern kann, ohne die Länge setzen zu müssen
Hmm... Bei der ersten Variante kommt dann
[DCC Fehler] Unit2.pas(55): E2026 Konstantenausdruck erwartet
[DCC Fehler] Unit2.pas(55): E2026 Konstantenausdruck erwartet
...
Bei der zweiten Variante klappts!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!