Forum: PC-Programmierung Delphi - globaler Variable globale Variable zuweisen


von Errormeldung (Gast)


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.

von amateur (Gast)


Lesenswert?

Ich wüsste nicht wie, aber man kann den Abschnitt "Initialization" 
hierfür benutzen.

von Sina A. (sinapse)


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;

von amateur (Gast)


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.

von Errormeldung (Gast)


Lesenswert?

Ich glaube die Initialization Methode wäre die bessere Wahl. Habs nun 
doch so gemacht.

von amateur (Gast)


Lesenswert?

Na bitte!

Allerdings wären meine beiden Vorschläge auch eine Lösung gewesen.
Die zweite sogar "echt" Konstant.

von compy (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.