Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Konfiguration abspeichern (https://www.delphipraxis.net/98916-konfiguration-abspeichern.html)

N30N 4. Sep 2007 08:21


Konfiguration abspeichern
 
Also meine Situation ist Folgende:

Ich habe 5 Variablen, alle vom Typ "string". In denen ist jeweils ein Dateipfad abgespeichert, also nix Großes.


Jetzt fehlt mir nur noch ein Weg, um die Werte dieser Variablen ausserhalb vom Programm zu sichern und beim Start automatisch zu laden.

Wie stell ich das an?

Ich habe bereits mit nem Memofeld und "memo1.lines.savetofile('Videos.cfg');" rumexperimentiert, allerdings habe ich da noch Probleme.

Ich kann zum Beispiel keine einzelnen Zeilen wieder in die Variable abspeichern.


Wie bekomm ich es hin?

turboPASCAL 4. Sep 2007 08:25

Re: Konfiguration abspeichern
 
Such mal nach INI-Dateien ( siehe Delphi-Referenz durchsuchenTIniFile )

SirThornberry 4. Sep 2007 08:27

Re: Konfiguration abspeichern
 
also bei so einfachen dingen würde ich ein IniFile nehmen oder eben eine Stringliste (Memo.Lines ist bereits vom Typ TStrings und äquivalent)
Delphi-Quellcode:
Memo1.Lines.Clear();
Memo1.Lines.Add(Variable1);
Memo1.Lines.Add(Variable2);
Memo1.Lines.Add(Variable3);
Memo1.Lines.Add(Variable4);
Memo1.Lines.Add(Variable5);
Memo1.Lines.SaveToFile(FileName);
Delphi-Quellcode:
Memo1.Lines.LoadFromFile(FileName);
Variable1 := Memo1.Lines.Strings[0];
Variable2 := Memo1.Lines.Strings[1];
Variable3 := Memo1.Lines.Strings[2];
Variable4 := Memo1.Lines.Strings[3];
Variable5 := Memo1.Lines.Strings[4];

Cream 4. Sep 2007 08:56

Re: Konfiguration abspeichern
 
Ini hat aber den Vorteil, dass man Standardwerte setzt. Fehlt in der Ini also ein Eintrag oder sogar die ganze Datei, so kannst du immer noch auf diese Werte zugreifen.

N30N 4. Sep 2007 09:42

Re: Konfiguration abspeichern
 
Delphi-Quellcode:
  Memo1.Lines.LoadFromFile('Videos.cfg'); -> Fehler: Konstantenausdruck erwartet
  Video1 := Memo1.Lines.Strings[0];
  Video2 := Memo1.Lines.Strings[1];
  Video3 := Memo1.Lines.Strings[2];
  Video4 := Memo1.Lines.Strings[3];
  Video5 := Memo1.Lines.Strings[4];

Wenn ich es ohne die ' ' bei Videos.cfg versuche, kommt ebenfalls eine Fehlermeldung: Undefinierter Bezeichner: 'Videos'


Mir gefällt diese Methode am besten, jetzt müsst ich nur noch wissen wie ich das richtig mache :)

DeddyH 4. Sep 2007 10:10

Re: Konfiguration abspeichern
 
Syntaktisch ist der Code in Ordnung. Heißt Dein Memo auch Memo1?

N30N 4. Sep 2007 10:20

Re: Konfiguration abspeichern
 
Zitat:

Heißt Dein Memo auch Memo1?
Jepp.

Aber irgendein Syntax Fehler muss ja drinn sein, sonst gäb es ja solche Fehler nicht.


//Edit: Hatte den Befehl in der Formcreate stehen. Wenn ich es in nem Button verpacke geht es einwandfrei. Wie kann ich es trotzdem gleich beim Start laden lassen?

DeddyH 4. Sep 2007 10:21

Re: Konfiguration abspeichern
 
Hmm, zeig doch mal die komplette Methode, der Fehler muss woanders liegen.

Cream 4. Sep 2007 10:52

Re: Konfiguration abspeichern
 
zudem solltest das ganze ins try...except setzen oder vorher ein fileexist durchführen

DeddyH 4. Sep 2007 10:54

Re: Konfiguration abspeichern
 
Zitat:

Zitat von Cream
zudem solltest das ganze ins try...except setzen oder vorher ein fileexist durchführen

Und eine Abfrage auf Memo1.Lines.Count wäre auch nicht verkehrt.

N30N 4. Sep 2007 11:05

Re: Konfiguration abspeichern
 
Delphi-Quellcode:
Memo1.Lines.Add(Video1);
Memo1.Lines.Add(Video2);
Memo1.Lines.Add(Video3);
Memo1.Lines.Add(Video4);
Memo1.Lines.Add(Video5);
Memo1.Lines.SaveToFile('Videos.cfg');
Ich versteh die Welt nicht mehr...Warum zur Hölle wird die Datei einfach nicht erstellt?

In der Memo1 Feld gibt es definitiv Zeilen. Wenn ich oben zitierten Code ausführen will, wird einfach nichts abgespeichert. Die Datei wird nicht mal erstellt. Woran liegt das?

DeddyH 4. Sep 2007 11:12

Re: Konfiguration abspeichern
 
Bist Du sicher, dass die Datei nicht existiert? Gib doch mal einen kompletten Pfad an.

Cream 4. Sep 2007 11:16

Re: Konfiguration abspeichern
 
deddyh: wenn sie existieren würde, würde er ohne nachfrage überschreiben. der tipp mit dem kompletten pfad müsste helfen

N30N 4. Sep 2007 11:36

Re: Konfiguration abspeichern
 
Zitat:

deddyh: wenn sie existieren würde, würde er ohne nachfrage überschreiben. der tipp mit dem kompletten pfad müsste helfen
Ich hab den Pfad mal auf c:\Videos.cfg geändert. Trotzdem passiert nichts -.-

DeddyH 4. Sep 2007 12:03

Re: Konfiguration abspeichern
 
Unter Vista?

angos 4. Sep 2007 12:10

Re: Konfiguration abspeichern
 
Zitat:

Zitat von N30N
Delphi-Quellcode:
  Memo1.Lines.LoadFromFile('Videos.cfg'); -> Fehler: Konstantenausdruck erwartet
  Video1 := Memo1.Lines.Strings[0];
  Video2 := Memo1.Lines.Strings[1];
  Video3 := Memo1.Lines.Strings[2];
  Video4 := Memo1.Lines.Strings[3];
  Video5 := Memo1.Lines.Strings[4];
Wenn ich es ohne die ' ' bei Videos.cfg versuche, kommt ebenfalls eine Fehlermeldung: Undefinierter Bezeichner: 'Videos'[...]


Genau da ist der Denkfehler ;) Das "FileName" aus dem Beitrag über deinem ist eine Variable vom Typ String. Du musst also den Pfad in '' setzen. Versuch doch mal folgendes:

Delphi-Quellcode:
 Memo1.Lines.LoadFromFile(ExtractFilePath(paramstr(0)) + 'Videos.cfg'); // gibt die datei videos.cfg an, welche im PROGRAMM-PFAD liegt
Optional:

Delphi-Quellcode:
 
var
  FileName: String;
begin
  FileName := ExtractFilePath(paramstr(0)) + 'Videos.cfg';
  Memo1.Lines.LoadFromFile(FileName);
end;

Gruß

DeddyH 4. Sep 2007 12:12

Re: Konfiguration abspeichern
 
Ich habe nicht umsonst nach Vista gefragt ;) Schau mal hier

angos 4. Sep 2007 12:16

Re: Konfiguration abspeichern
 
Ja, wenn es sich um vista handelt hat er ein erweitertes Problem, das ist mir schon bewusst. aber er hat hier etwas Grundsätzliches ebenfalls nicht verstanden (das arbeiten mit Strings), was ich ihm zeigen wollte. ;)

N30N 4. Sep 2007 12:48

Re: Konfiguration abspeichern
 
Windows XP, aber ich denke das sollte egal sein.

DeddyH 4. Sep 2007 12:55

Re: Konfiguration abspeichern
 
OK, versuchen wir es nochmal:
Delphi-Quellcode:
procedure Speichern;
begin
  Memo1.Lines.SaveToFile(ExtractFilePath(ParamStr(0)) + 'Videos.cfg');
end;

procedure Laden;
begin
  if FileExists(ExtractFilePath(ParamStr(0)) + 'Videos.cfg') then
    begin
      Memo1.Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Videos.cfg');
      if Memo1.Lines.Count > 4 then
        try
          Video1 := Memo1.Lines.Strings[0];
          Video2 := Memo1.Lines.Strings[1];
          Video3 := Memo1.Lines.Strings[2];
          Video4 := Memo1.Lines.Strings[3];
          Video5 := Memo1.Lines.Strings[4];
        except
          MessageBox(0,'Fehler beim Laden der Liste','Fehler',MB_OK or MB_ICONERROR);
        end;
    end;
end;

N30N 4. Sep 2007 13:01

Re: Konfiguration abspeichern
 
Zitat:

Zitat von angos
Zitat:

Zitat von N30N
Delphi-Quellcode:
  Memo1.Lines.LoadFromFile('Videos.cfg'); -> Fehler: Konstantenausdruck erwartet
  Video1 := Memo1.Lines.Strings[0];
  Video2 := Memo1.Lines.Strings[1];
  Video3 := Memo1.Lines.Strings[2];
  Video4 := Memo1.Lines.Strings[3];
  Video5 := Memo1.Lines.Strings[4];
Wenn ich es ohne die ' ' bei Videos.cfg versuche, kommt ebenfalls eine Fehlermeldung: Undefinierter Bezeichner: 'Videos'[...]


Genau da ist der Denkfehler ;) Das "FileName" aus dem Beitrag über deinem ist eine Variable vom Typ String. Du musst also den Pfad in '' setzen. Versuch doch mal folgendes:

Delphi-Quellcode:
 Memo1.Lines.LoadFromFile(ExtractFilePath(paramstr(0)) + 'Videos.cfg'); // gibt die datei videos.cfg an, welche im PROGRAMM-PFAD liegt
Optional:

Delphi-Quellcode:
 
var
  FileName: String;
begin
  FileName := ExtractFilePath(paramstr(0)) + 'Videos.cfg';
  Memo1.Lines.LoadFromFile(FileName);
end;

Gruß


Hm, das ist noch nicht das was ich wollte. Ich will, das die Datei überhaupt erstmal geschrieben wird. Ums lesen kann man sich ja danach kümmern. Was mich wundert: In einem Programm hab ich exakt dieselbe Syntax benutzt und dort funktioniert es einwandfrei. Echt komisch...



//edit:
Okay, mit dem letzten Post von DeddyH hats dann doch geklappt! Ich bedanke mich erstmal und poste dann wenns noch Probleme gibt :)

N30N 4. Sep 2007 14:12

Re: Konfiguration abspeichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also, ich habe jetzt folgenden Code drinne:


Zitat:

procedure Speichern;
begin
Memo1.Lines.SaveToFile(ExtractFilePath(ParamStr(0) ) + 'Videos.cfg');
end;

procedure Laden;
begin
if FileExists(ExtractFilePath(ParamStr(0)) + 'Videos.cfg') then
begin
Memo1.Lines.LoadFromFile(ExtractFilePath(ParamStr( 0)) + 'Videos.cfg');
if Memo1.Lines.Count > 4 then
try
Video1 := Memo1.Lines.Strings[0];
Video2 := Memo1.Lines.Strings[1];
Video3 := Memo1.Lines.Strings[2];
Video4 := Memo1.Lines.Strings[3];
Video5 := Memo1.Lines.Strings[4];
except
MessageBox(0,'Fehler beim Laden der Liste','Fehler',MB_OK or MB_ICONERROR);
end;
end;
end;

In der Datei stehen die richtigen Dateipfade drinne. Das ist ja schonmal okay.

Doch nur der Hammer: Ich starte das Programm, klicke auf "Laden" (procedure Laden), Versuche Video 1 zu starten und bekomme vom Mediaplayer eine Fehlermeldung zurück: http://slave1.imagebeaver.com/files/...7wmpfehler.jpg


Ich weiss echt net mehr weiter...wo liegt denn jetzt der Fehler?

DeddyH 4. Sep 2007 14:25

Re: Konfiguration abspeichern
 
Wie sieht denn der Aufruf zum Starten aus und was steht im Memo?

Cream 4. Sep 2007 14:27

Re: Konfiguration abspeichern
 
sieht aus als würd da die Dateierweiterung fehlen

edit: sry DeddyH^^

DeddyH 4. Sep 2007 14:28

Re: Konfiguration abspeichern
 
Deshalb frag ich ja :mrgreen:

N30N 5. Sep 2007 07:46

Re: Konfiguration abspeichern
 
Zitat:

Wie sieht denn der Aufruf zum Starten aus und was steht im Memo?


Delphi-Quellcode:
procedure TForm1.LadenClick(Sender: TObject);
begin
if FileExists(ExtractFilePath(ParamStr(0)) + 'Videos.cfg') then
    begin
      Memo1.Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Videos.cfg');
      if Memo1.Lines.Count > 4 then
        try
          Video1 := Memo1.Lines.Strings[0];
          Video2 := Memo1.Lines.Strings[1];
          Video3 := Memo1.Lines.Strings[2];
          Video4 := Memo1.Lines.Strings[3];
          Video5 := Memo1.Lines.Strings[4];
        except
          MessageBox(0,'Fehler beim Laden der Liste','Fehler',MB_OK or MB_ICONERROR);
        end;
    end;
end;

Ausgabe in Memo1:

Zitat:

\\Server\technik\Holger\Mercedes.mpg
\\Server\technik\Holger\Mercedes.mpg
\\Server\technik\Holger\Mercedes.mpg
\\Server\technik\Holger\Mercedes.mpg
\\Server\technik\Holger\Mercedes.mpg

DeddyH 5. Sep 2007 07:53

Re: Konfiguration abspeichern
 
Und der Start-Aufruf (ShellExecute??)

Cream 5. Sep 2007 08:23

Re: Konfiguration abspeichern
 
also wenn dann soltlest du schon das loadfromfile ins try except schreiben :wink:

setz mal bei den videodateien ein anderes programm als standard

N30N 5. Sep 2007 09:41

Re: Konfiguration abspeichern
 
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var i, Data1, Data2: longint;
begin
  timer1.enabled:=false;
  ReadAllAnalog(Data1,Data2);
  i:=ReadAllDigital;
  CheckBox1.checked:=(i and 1)>0;
  if Checkbox1.checked = true then shellexecute(handle,'open',pchar('wmplayer.exe'),pchar(video1),nil,sw_show);
  CheckBox2.checked:=(i and 2)>0;
  if Checkbox2.checked = true then shellexecute(handle,'open',pchar('wmplayer.exe'),pchar(video2),nil,sw_show);
  CheckBox3.checked:=(i and 4)>0;
  if Checkbox3.checked = true then shellexecute(handle,'open',pchar('wmplayer.exe'),pchar(video3),nil,sw_show);
  CheckBox4.checked:=(i and 8)>0;
  if Checkbox4.checked = true then shellexecute(handle,'open',pchar('wmplayer.exe'),pchar(video4),nil,sw_show);
  CheckBox5.checked:=(i and 16)>0;
  if Checkbox5.checked = true then shellexecute(handle,'open',pchar('wmplayer.exe'),pchar(video5),nil,sw_show);
  timer1.enabled:=true;
end;

Das wäre der Startaufruf. Aber solange ich die Videos manuell festlege und nicht aus der cfg Datei lade funktioniert alles einwandfrei.

Progman 5. Sep 2007 10:30

Re: Konfiguration abspeichern
 
Hi, also ich würde das mit ner INI-Datei machen, die im User-Anwendungsverzeichnis abgelegt wird. Das hat bei mir bisher immer gefunzt.
Die kann man sogar bereits in der dpr-Datei einlesen, noch bevor das Programm initialisiert ist, wenn man alle relvanten Variablen in einer extra Unit hat. Ich mache mir in meinen Projecten grundsätzlich zwei Units für Vars und Procs, wo ich sowas alles drin habe (proceduren wie ReadIni, WritIni, SetPaths etc.)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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