vielleicht wär die Registry dannn doch noch einfacher. Am leichtesten geht es ja mit ner Inifile:
Delphi-Quellcode:
uses inifiles;
[...]
procedure savedirname(dirname:
string);
var
i:tinifile;
begin
try begin
i:=tinifile.create(changefileext(application.exename,'
.ini'));
//Ini-Datei erstellen
i.writestring('
Dirs','
Path',dirname);
//Eintrag in Datei speichern
i.Free;
//Datei schließen
filesetattr(changefileext(application.exename,'
.ini'),fasysfile
and fahidden)
//Datei verstecken
end;
except end;
end;
function getdirname:
string;
var
i:tinifile;
begin
result:=extractfilepath(application.exename)
//zuerst alternatives Ergebniss setzten (pfad der EXE-Datei)
try begin
i:=tinifile.create(changefileext(application.exename,'
.ini'));
//Dann Inifile erstellen. Die Inifile erhält den Namen der EXE-Datei nur mit der Endung .ini statt .exe
result:=i.ReadString('
Standard','
Dirname',extractfilepath(application.ExeName));
//Aus der Sektion STANDART der Inidatei wird der Wert von dirname eingelesen.
end;
finally
i.free;
//Die Inidatei wird geschlossen
end;
end;
(ungetestet)
Ich weiss auch gar nicht, wieso es dir so wichtig ist, unbedingt die Daten in der eigenen Exe abzuspeichern? Das ist die komplizierteste mögliche Lösung...
Ne INI-Datei tuts ja auch...
Außerdem kannst du die INI-Datei auch verstecken usw so dass der User sie nicht sehen kann.
Die beiden Prozeduren kopierst du dann irgendwo ziemlich oben in deine
Unit rein (am besten gleich nach IMPLEMENTATION). Dann kannst du sie so aufrufen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
pathname:=getdirname;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
savedirname(pathname);
end;
wobei pathname eine globale string-variable ist, auf die du in allen anderen Prozeduren zugreifen kannst.