Delphi - globaler Variable globale Variable zuweisen

Gast #3088263
Lesenswert?

Hallo,

ich habe folgendes Codestückchen:
1
var
2
  numRows: Integer = 2;
3
  numColumns: Integer = 20;
4
  CharWidth: Integer = 5 * PixelWidth + 4 * PixelVSpacing;
5
  CharHeight: Integer = 8 * PixelHeight + 7 * PixelHSpacing;
6
  ScreenWidth: Integer = numColumns * CharWidth + (numColumns - 1) * CharVSpacing;

PixelWidth, PixelHeight, PixelVSpacing und PixelHSpacing sind 
Konstanten.

Nun bekomme ich bei Screenwidth einen eine Erormeldung 
"Konstantenausdruck erwartet". Soweit ich das verstehe kommt Delphi 
nicht mit den Variablen in der Zeile klar, obwohl ich diese darüber 
deklariert und zugewiesen habe.

Weiß jmd. vielleicht eine Lösung, wie ich Delphi zu dieser Rechnung 
zwingen kann? Ohne FormCreate oder so, sondern in der globalen 
Variablenzuweisung?

Wäre nett, wenn mir jemand helfen könnte.
#3088281
Lesenswert?

warum willst du das denn nicht im konstruktor machen??

du muesstest einfach die berechnungen in konstanten ablegen also

const var //keine ahnung wie man das macht in delphi
  cnumRows: Integer = 2;
  cnumColumns: Integer = 20;
  cCharWidth: Integer = 5 * PixelWidth + 4 * PixelVSpacing;
  cCharHeight: Integer = 8 * PixelHeight + 7 * PixelHSpacing;
  cScreenWidth: Integer = numColumns * CharWidth + (numColumns - 1) * 
CharVSpacing;

und dann erst zuweisen

var

  numRows: Integer = cnumRows;
  numColumns: Integer = cnumColumns;
  CharWidth: Integer = cCharWidth;
  CharHeight: Integer = cCharHeight;
  ScreenWidth: Integer = cScreenWidth;
Gast #3088295
Lesenswert?

Du legst ja deine Variablen "außen" an. Eine Initialisierung ist an 
dieser Stelle kein Problem, Du willst aber außerhalb des Programms 
"rechnen", während diese Variablen immer noch nicht ready-to-use sind. 
Dies wäre erst in der Hauptfunktion, oder in den von Dir angeführten 
Create usw. möglich.

Übrigens was spräche gegen:
ScreenWidth: Integer = numColumns *
                      (5 * PixelWidth + 4 * PixelVSpacing) +
                      (numColumns - 1) * CharVSpacing;

Habe allerdings keinen Compiler zur Verfügung.
Gast #3089777
Lesenswert?

Errormeldung schrieb:
> Nun bekomme ich bei Screenwidth einen eine Erormeldung
> "Konstantenausdruck erwartet". Soweit ich das verstehe kommt Delphi
> nicht mit den Variablen in der Zeile klar, obwohl ich diese darüber
> deklariert und zugewiesen habe.

Hier liegt ein fettes Verständnisproblem vor. Völlig egal ob Delphi oder 
anderer Compiler:
Deine Deklaration ist keine Konstante, sondern eine initalisierte 
Variable. Eine Variable kannst Du erst zur Laufzeit auswerten und mit 
dem Wert rechnen, nicht während der Übersetzung. Konstanten werden mit 
const eingeleitet. Du kannst Konstanten auch typisieren.

Wie bereist richtig angemerkt, gibt es für Initialisierung extra einen 
Anweisungsblock. Und den nutzt man dann.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren