![]() |
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? |
Re: Konfiguration abspeichern
Such mal nach INI-Dateien ( siehe
![]() |
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]; |
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.
|
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 :) |
Re: Konfiguration abspeichern
Syntaktisch ist der Code in Ordnung. Heißt Dein Memo auch Memo1?
|
Re: Konfiguration abspeichern
Zitat:
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? |
Re: Konfiguration abspeichern
Hmm, zeig doch mal die komplette Methode, der Fehler muss woanders liegen.
|
Re: Konfiguration abspeichern
zudem solltest das ganze ins try...except setzen oder vorher ein fileexist durchführen
|
Re: Konfiguration abspeichern
Zitat:
|
Re: Konfiguration abspeichern
Delphi-Quellcode:
Ich versteh die Welt nicht mehr...Warum zur Hölle wird die Datei einfach nicht erstellt?
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'); 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? |
Re: Konfiguration abspeichern
Bist Du sicher, dass die Datei nicht existiert? Gib doch mal einen kompletten Pfad an.
|
Re: Konfiguration abspeichern
deddyh: wenn sie existieren würde, würde er ohne nachfrage überschreiben. der tipp mit dem kompletten pfad müsste helfen
|
Re: Konfiguration abspeichern
Zitat:
|
Re: Konfiguration abspeichern
Unter Vista?
|
Re: Konfiguration abspeichern
Zitat:
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:
Optional:
Memo1.Lines.LoadFromFile(ExtractFilePath(paramstr(0)) + 'Videos.cfg'); // gibt die datei videos.cfg an, welche im PROGRAMM-PFAD liegt
Delphi-Quellcode:
var FileName: String; begin FileName := ExtractFilePath(paramstr(0)) + 'Videos.cfg'; Memo1.Lines.LoadFromFile(FileName); end; Gruß |
Re: Konfiguration abspeichern
Ich habe nicht umsonst nach Vista gefragt ;) Schau mal
![]() |
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. ;)
|
Re: Konfiguration abspeichern
Windows XP, aber ich denke das sollte egal sein.
|
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; |
Re: Konfiguration abspeichern
Zitat:
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 :) |
Re: Konfiguration abspeichern
Liste der Anhänge anzeigen (Anzahl: 1)
Also, ich habe jetzt folgenden Code drinne:
Zitat:
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: ![]() ![]() Ich weiss echt net mehr weiter...wo liegt denn jetzt der Fehler? |
Re: Konfiguration abspeichern
Wie sieht denn der Aufruf zum Starten aus und was steht im Memo?
|
Re: Konfiguration abspeichern
sieht aus als würd da die Dateierweiterung fehlen
edit: sry DeddyH^^ |
Re: Konfiguration abspeichern
Deshalb frag ich ja :mrgreen:
|
Re: Konfiguration abspeichern
Zitat:
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:
|
Re: Konfiguration abspeichern
Und der Start-Aufruf (ShellExecute??)
|
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 |
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. |
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