Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi SaveDialog/OpenDialog - abspeichern und laden von Variablen (https://www.delphipraxis.net/122935-savedialog-opendialog-abspeichern-und-laden-von-variablen.html)

fui-tak 24. Okt 2008 13:25


SaveDialog/OpenDialog - abspeichern und laden von Variablen
 
Hallo,
Nachdem ich nach einigem googlen nichts gefunden habe, hab ich mich mal hier angemeldet und stelle meine Frage hier.
Ich bin noch Delphi-Anfänger und bastel gerade an einem Spiel herum. Ich benutze Delphi 4 Professional

Nun möchte ich eine Speicherfunktion einbauen, heißt also ich muss eine Reihe an Variablen abspeichern und diese wieder laden können.

Wie mache ich das am besten? Oder gibt es sogar eine Möglichkeit einfach den aktuellen Programmstatus zu speichern?
Ich bedanke mich schonmal im vorraus

ATSV 24. Okt 2008 13:28

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
hi
wenn du nur Variablen speichern möchtest dann sollte das mit einer ganz normalen Ini- oder Textdatei wunderbar funktionieren

fui-tak 24. Okt 2008 13:56

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Das hab ich mir auch schon vorgestellt, nur hab ich keine Ahnung wie das mit dem speichern generell geht.

b00gie 24. Okt 2008 14:06

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Delphi-Quellcode:
procedure Speichern();
var
  save:TStringList;
begin
  save:=TStringList.Create;
  with save do
  begin
    Add('String1');
    Add('Strgin2');
    ....
  end;
  save.SaveToFile('C:\test.txt');
  save.Free;
end;

Das ganze würde auch besser gehen, ich weiss ja nicht wie du speichern möchtest, aber wenn deine Textdatei ungefähr so aussehen soll:

******
STRING1=jaja
STRING2=nönö
STRING3=blabla
....
*******

dann würde ich das so speichern

Delphi-Quellcode:
var
  save:TStringList
begin
  save:=TStringList.Create;
  save.Values['STRING1']:='jaja';
  save.Values['STRING2']:='nönö';
  ...
  save.SaveToFile(..);
  save.Free;
end;
Bei save.Values['STRING1']:='jaja'; würde dann in der Datei STRING1=jaja rauskommen^^

ATSV 24. Okt 2008 14:08

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
für ne ini datei
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Ini: TIniFile;
begin
  Ini := TIniFile.Create('DeineDatei.ini');
  try
    Ini.WriteInteger('Section1', 'Variable1', v1);
  finally
    Ini.Free;
  end;
end;
dazu muss man dann noch die Unit "IniFiles" einbinden.

edit:
@b00gie: dann nehm doch direkt ne ini :wink:

b00gie 24. Okt 2008 14:09

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
so und um nun das ganze zu laden

Delphi-Quellcode:
var
  load:TStringList;
begin
  load:=TStringList.Create;
  load.LoadFormFile(...);
  VARIABLE1:=load.Values['STRING1'];
  VARIABLE2:=load.Values['STRING2'];
  ....
  load.Free;
end;

Fussball-Robby 24. Okt 2008 14:10

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Zum Thema Inis gibts einige Tutorials, zum Beispiel hier oder hier.

Edit:
Zitat:

Zitat von ATSV
@b00gie: dann nehm doch direkt ne ini :wink:

Genau, warum das Rad neu erfinden? :thumb:

DeddyH 24. Okt 2008 14:13

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Kleine Anmerkung noch:
Zitat:

Delphi-Quellcode:
Ini := TIniFile.Create('DeineDatei.ini'); //das ist ein relativer Pfad

Auf jeden Fall absolute Pfade verwenden, sonst findet man die Ini u.U. nicht wieder.

ATSV 24. Okt 2008 14:18

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Zitat:

Zitat von DeddyH
Kleine Anmerkung noch:
Zitat:

Delphi-Quellcode:
Ini := TIniFile.Create('DeineDatei.ini'); //das ist ein relativer Pfad

Auf jeden Fall absolute Pfade verwenden, sonst findet man die Ini u.U. nicht wieder.

Das ist mehr oder weniger Geschmackssache natürlich sind absolute Pfade "sicherer" aber ich z.B. vergess immer wo die Datei liegt und bin zu faul um in den Sourcen zu gucken :P Deshalb nehm ich eigentlich immer relative Pfade.

DeddyH 24. Okt 2008 14:20

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Damit setzt Du Dich aber in die Nesseln. Bei relativen Pfaden wird im aktuellen Verzeichnis gespeichert, und das muss nicht unbedingt das Programmverzeichnis sein.

ATSV 24. Okt 2008 14:22

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
dann hab ich bisher wohl immer Glück gehabt...

Frankfurtoder 24. Okt 2008 14:23

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Zitat:

Zitat von ATSV
Das ist mehr oder weniger Geschmackssache natürlich sind absolute Pfade "sicherer" aber ich z.B. vergess immer wo die Datei liegt und bin zu faul um in den Sourcen zu gucken :P Deshalb nehm ich eigentlich immer relative Pfade.

Dafür schreibe ich mir extra eine Readme.txt die Pfade u.ä. beinhaltet. In letzter Zeit vergess ich das nur sehr gern mal :gruebel:

DeddyH 24. Okt 2008 14:28

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Ich würde die Ini einfach dort speichern, wo so etwas auch vorgesehen ist, nämlich unter APPDATA.

fui-tak 24. Okt 2008 15:00

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Danke schön alle zusammen! Das geht ja echt schnell hier im Forum

Ich habe jetzt die Lösung von b00gie genommen und es funktioniert alles wunderbar!

Cyf 24. Okt 2008 15:09

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Zitat:

Zitat von ATSV
dann hab ich bisher wohl immer Glück gehabt...

Ja, der User braucht nur z.B. in einem Dialog den Pfad zu wechseln, danach speicherst du in den aktiven Pfad und schon ist deine Datei im Nirvana.
Wenn du in den Anwendungspfad speichern willst (was für Einstellungen auch schon unsauber ist, außer höchsten zu eigenen Testzwecken), solltest du zumindest immer
Delphi-Quellcode:
ExtractFilePath(ParamStr(0))
nutzen.

taaktaak 24. Okt 2008 15:15

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Zitat:

auch schon unsauber ist
Sorry, sehe ich (als Unbelehrbarer) nicht so. Meine INI möchte ich immer "bei" der EXE placieren! Wenn es aufgrund von Zugrifssbeschränkungen nicht anders möglich ist, dann unter APPDATA - logisch!

fui-tak 25. Okt 2008 12:39

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Noch eine Frage:

Nun möchte ich überprüfen, ob die Datei "MeineDatei.txt" im Ordner "C:\abc" liegt.
Das ganze soll in eine Verzweigung rein. Im Pseudocode also folgendermaßen:

if MeineDatei.txt ist im Ordner C:\abc then
...

Das ganze soll dazu dienen, dass die Fehlermeldung "Datei MeineDatei.txt kann nicht geöffnet werden" nicht mehr auftritt, sondern der darauffolgende Code ignoriert wird. (Ein Wert soll aus MeineDatei.txt automatisch geladen werden, aber nur wenn sie da ist, sonst soll einfach nichts passieren)

Wie realisiere ich das?

DeddyH 25. Okt 2008 12:46

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Schau mal in die Hilfe unter FileExists().

fui-tak 25. Okt 2008 12:57

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Dankeschön!

Cyf 25. Okt 2008 13:19

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Zitat:

Zitat von taaktaak
Zitat:

auch schon unsauber ist
Sorry, sehe ich (als Unbelehrbarer) nicht so. Meine INI möchte ich immer "bei" der EXE placieren! Wenn es aufgrund von Zugrifssbeschränkungen nicht anders möglich ist, dann unter APPDATA - logisch!

Es kommt dabei zugegeben natürlich auch immer auf die Anwendung an, bei Prorammen die z.B. von einem USB-Stick starten sollen, ist das der einzige Weg. Der ofizielle ist halt APPDATA, ich finde dabei nur auch kritisch, dass der standartmäßig eher schwer zu finden ist. Ich ja zu den Leuten die einfach gerne ein Windows hätten, dass bei der Benutzeranlage fragt, wo eigene Dateien angelegt werden soll und darin einfach einen Ordner Einstellungen, ohne dass man jeden Unterordner (Dokumene, Musik, usw.) einzeln umständlich ändern muss und dann trotzdem noch der eigentliche Dateipfad verschleiert wird und man sich eine eigene Verknüpfung drauf für eine richtige Anzeige bauen muss, aber dass geht grad am Thema vorbei :wink:

DeddyH 25. Okt 2008 13:32

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Ich persönlich hätte ja auch nichts dagegen, Dateien im Programmverzeichnis abzulegen. Spätestens seit Vista zieht Microsaft (:mrgreen:) aber die Daumenschrauben an, so dass man auf Dauer damit nicht glücklich wird. Und zu dem Problem mit dem Finden: das schreibt man sich einmal und legt die Routine dann in einer Unit ab, ist doch auch kein Beinbruch.

Luckie 25. Okt 2008 14:51

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Zitat:

Zitat von taaktaak
Zitat:

auch schon unsauber ist
Sorry, sehe ich (als Unbelehrbarer) nicht so. Meine INI möchte ich immer "bei" der EXE placieren! Wenn es aufgrund von Zugrifssbeschränkungen nicht anders möglich ist, dann unter APPDATA - logisch!

Damit die verschiedenen Benutzer sich gegenseitig ihr Einstellungen überschreiben? Mal ganz abgesehen von den Zugriffsrechten.

taaktaak 25. Okt 2008 15:06

Re: SaveDialog/OpenDialog - abspeichern und laden von Variab
 
Hallo Luckie :hi:

Du hast natürlich Recht!

Meine "Unbelehrbarkeit" bezieht sich auf meine persönlichen Anwendungen, die nur von mir benutzt werden. Allerdings, da ich regelmäßig mit verschiedenen Computern arbeite, lege ich bei Bedarf auch maschinenspezifische INI's an. Theoretisch sind als weitere Varianten benutzerspezifische oder sogar maschinen- und nutzerspezifische INI's in meiner dafür verwendeten Unit vorgesehen. Das habe ich aber noch nicht gebraucht.

Ich gebe zu, da ist es dann einfacher, gleich den vom BS vorgesehenen Weg zu gehen. Keine Frage! Ich sehe meine Starrköpfigkeit mehr als persönliche Marotte, mit der ich keinem Schade, da ich nicht gewerbsmäßig programmiere.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz