Entwickler-Ecke

Sonstiges (Delphi) - Globale Variablen einen nicht Konstantenausdruck zuweisen


whitef - Sa 24.10.15 12:57
Titel: Globale Variablen einen nicht Konstantenausdruck zuweisen
hi,
irgendwie stehe ich gerade auf dem Schlauch...

ich möchte gerne eine Globale Variable erstellen; diese soll nur den Pfad zu einer Datei beinhalten:

(Dies habe ich Head-Bereich unter var eingefügt:)

Delphi-Quelltext
1:
2:
3:
4:
...
var
  Filepath : String = ExtractFilePath(ParamStr(0)) + 'blabla.xml';
...



Muss ich wirlich den Form-OnCreate Bereich für sowas mißbrauchen?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
...
var
  Filepath : String;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  Filepath := ExtractFilePath(ParamStr(0)) + 'blabla.xml';
end;
...


VG


Stundenplan - Sa 24.10.15 13:12

Der Initialisierungswert einer globalen Variablen muss zur Kompilierzeit bekannt bzw. konstant sein. Das Anwendungsverzeichnis kann sich aber auch nach dem Kompilieren ändern, z.B. wenn du die EXE verschiebst. Deshalb müssen solche Werte beim Start des Programms (z.B. OnCreate des MainForms) initialisiert werden.


Gerd Kayser - Sa 24.10.15 14:04

user profile iconwhitef hat folgendes geschrieben Zum zitierten Posting springen:
Muss ich wirlich den Form-OnCreate Bereich für sowas mißbrauchen?

Eine Unit hat auch einen initialization-Abschnitt.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
...
var
  Filepath : String;
...
initialization
  Filepath := ExtractFilePath(ParamStr(0)) + 'blabla.xml';
  ...
end.


whitef - Sa 24.10.15 14:54

stimmt... ok danke!
habe diese abschnitte noch nie wirklich benutzt gehabt.

Lösung:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
...

var
  Filepath : String;

...

implementation

...
procedure TForm1.FormCreate(Sender: TObject);
begin
  showmessage(Filepath);
end;

...

end.

initialization
  Filepath := ExtractFilePath(ParamStr(0)) + 'blabla.xml';
finalization


haentschman - So 25.10.15 09:07

Moin... :P

Globale Variablen sind in er heutigen Zeit nicht mehr up to date... um es mal vorsichtig auszudrücken. Mache dir doch ein Datenobjekt mit den gesamten Einstellungen des Programmes. Das Objekt selbst regelt das Laden und speichern. Damit hast du einen zentralen Punkt... es gibt mit Sicherheit mehr als eine Einstellung. :tongue: