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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.