Autor Beitrag
Mitmischer 1703
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Do 09.07.09 10:29 
Hi DF!

Folgendes hab ich in meiner Unit stehen:

ausblenden 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,

ausblenden 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!!

_________________
Die Lösung ist nicht siebzehn.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
Labels : array[0..7of 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.
ausblenden Delphi-Quelltext
1:
2:
SetLength(Labels, 8);
// ...

_________________
We are, we were and will not be.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Mitmischer 1703 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: 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!

_________________
Die Lösung ist nicht siebzehn.