Autor Beitrag
boebel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16


Delphi 7, Microsoft Visual C# 2010
BeitragVerfasst: Fr 17.12.04 23:19 
Hallo!

Ich habe ein Problem. Die Suche nach einer Lösung hier im Forum war bis jetzt erfolglos. Ich habe nichts konkretes gefunden das mir weiterhelfen konnte.

Folgendes:

Ich hab ein Programm das einige Daten in eine ini-Datei speichert und wenn notwendig wieder ausliest.

Das habe ich zum Test mal so gelöst:

ausblenden 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
  Form1: TForm1;

const IniFileName = 'C:\data.ini';


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
inid: TIniFile;
begin
inid:= TIniFile.Create(IniFileName);
inid.WriteString('Section','Eintrag1', Edit1.Text); //speichere Edit1.Text in ini
inid.WriteString('Section','Eintrag2', Edit2.Text);  //speichere Edit2.Text in ini
inid.Free;
end;

end.


soweit kein Problem. Das funktioniert :D
Jetzt sollte es aber für jeden User eine eigene ini Datei abspeichern und wieder laden können. Ich hab mich ein wenig schlau gemacht und bin auf CSIDL
msdn.microsoft.com/l...ence/enums/csidl.asp gekommen.
Somit wird die ini-Datei z.B. in den Anwendungsdaten-Ordner des jeweiligen User gespeichert (zumindest ab Windows2000 :!: ).

Das speichern und laden der ini wollte ich folgendermassen lösen:

zuerst finde ich den Pfad für den Ordner Anwendungsdaten heraus

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
  pIdL: PItemIDList;
  Path: Array [0..Max_Path] Of Char;
Begin
  
  SHGetSpecialFolderLocation (0, CSIDL_APPDATA, pIdL); // ItemIdList Anwendungsdaten
  SHGetPathFromIDList (pIDL, Path); // ItemIdList in String umwandeln

  Label1.Caption := (Path);   // String in Label schreiben


hat auch funktioniert.


Aber wie weiter? Ich habe folgendes probiert:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
const IniFileName = Label1.Caption;

//anstelle von

const IniFileName = 'C:\data.ini';



Kann ich das überhaupt so machen oder benötige ich hier einen anderen Lösungsweg?

Danke für euer Hilfe!


mfg bobel

Moderiert von user profile iconMotzi: Code- durch Delphi-Tags ersetzt.
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Fr 17.12.04 23:22 
Du benötigst einen anderen Lösungsweg; Konstanten heißen nicht umsonst Konstanten: sie müssen bereits zur Kompilierzeit feststehen.

AXMD
boebel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16


Delphi 7, Microsoft Visual C# 2010
BeitragVerfasst: So 19.12.04 16:37 
Kann mir jemand eine Lösung vorschlagen :?:
Basti
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 345

Windows Vista
D2005 Pers, D7 Pers
BeitragVerfasst: So 19.12.04 17:40 
Wie wär's wenn du keine Konstante, sondern eine Variable nimmst?

_________________
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.
boebel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16


Delphi 7, Microsoft Visual C# 2010
BeitragVerfasst: So 19.12.04 22:35 
ok, das hab ich jetzt so gemacht:

ausblenden Quelltext
1:
2:
3:
var
  Form1: TForm1;
  IniFileName: String;


um während der Laufzeit auf das Verzeichnis zuzugreifen zu können, hab ich das in Formcreate eingetragen und es speichert den Pfad in ein verstecktes Label.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
pIdL: PItemIDList;
Path: Array [0..Max_Path] Of Char;

begin
  SHGetSpecialFolderLocation (0, CSIDL_APPDATA, pIdL);
  SHGetPathFromIDList (pIDL, Path);
  Label5.Caption := Path;
end;



Vielleicht nicht die beste Lösung, aber es funktioniert! :-)


Danke für die Hilfe!

mfg
boebel