Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Edit-Eintrag speichern (https://www.delphipraxis.net/60073-edit-eintrag-speichern.html)

icqgoofy 2. Jan 2006 18:08


Edit-Eintrag speichern
 
Ich hab ein kleines Problem!

Wie kann ich bei Delphi den Eintrag eines Edit-FEnster in einer Datei speichern?

Ich habe schon etliches ausprobiert, aber bis jetzt hat noch nichts funktoniert.

Gruß icqgoofy

dahead 2. Jan 2006 18:15

Re: Edit-Eintrag speichern
 
da gibt es viele arten das zu bewerkstelligen.

kuck dich mal hier im forum nach folgenden themen um: INI (TIniFile), Registrierung (TRegistry), XML.

hier ein kurzes Beispiel für INI's (in die uses klausel den wert "Inifiles" hinzufügen):

Speichern
Delphi-Quellcode:
var
  INI: TInifile;
begin
  INI := TInifile.Create('C:\inidatei.ini'); // Dateiname ggf. abändern
  INI.WriteString('Edit-Daten', 'EditAdresse', Edit1.Text); //1. Feld Sektion, 2. Feld Name, 3. Feld Wert
  INI.Free; //und wieder aus dem speicher damit
end;
Laden
Delphi-Quellcode:
var
  INI: TInifile;
begin
  INI := TInifile.Create('C:\inidatei.ini'); // Dateiname ggf. abändern
  Edit1.Text := INI.ReadString('Edit-Daten', 'EditAdresse', Edit1.Text); //1. Feld Sektion, 2. Feld Name, 3. Feld Standard-Wert
  INI.Free; //und wieder aus dem speicher damit
end;
Das ganze kann man noch mit try finally verschönern, doch ich denke das prinzip ist klar.

edit1: rechtschreibfehler
edit2: laden-routine hinzugefügt.

buyden 2. Jan 2006 18:16

Re: Edit-Eintrag speichern
 
Oder ganz simpel so:

Delphi-Quellcode:
procedure Tfrmconfig.btokClick(Sender: TObject);
var Textdatei: textfile;

begin
    assignfile(Textdatei,'datei.ini');
    rewrite(cTextdatei);
    writeln(Textdatei,edit1.text);
    closefile(Textdatei);
end;

icqgoofy 2. Jan 2006 19:32

Re: Edit-Eintrag speichern
 
Vielen Dank!

Es hat geklappt, man kann ja, dne Pfad sogar noch ändern :)

Kann man eigentlich auch vorher noch einen Eintrag in die Textdatei machen,
denn ich habe jtzt 5 vershceidene Edit-Fenster, damit ich auch späteer noch die
gespeicherten Einträge zuordnen kann.

Gruß icqgoofy

3_of_8 2. Jan 2006 19:50

Re: Edit-Eintrag speichern
 
Das kann man prima mit INI-Files machen. Schau dich mal auf http://dsdt.info um.

Für Streber (Verweis auf mich) geht es auch mit XML.

Khabarakh 2. Jan 2006 20:03

Re: Edit-Eintrag speichern
 
Zitat:

Zitat von 3_of_8
Für Streber (Verweis auf mich) geht es auch mit XML.

Du verwechselst da was :stupid: . Streber sind faul. Sie streben nur, weil sie es nicht auf die einfache aber mühsame Art machen wollen. Deshalb lesen sie die Hilfe und verlassen sich auf die Streaming-Fähigkeiten von Delphi :wink: .

3_of_8 2. Jan 2006 20:10

Re: Edit-Eintrag speichern
 
Ich bin ja selber ein Streber. (Verdammt, schon wieder einen Thread OT gemacht)

Khabarakh 2. Jan 2006 20:23

Re: Edit-Eintrag speichern
 
Zitat:

Zitat von 3_of_8
Ich bin ja selber ein Streber. (Verdammt, schon wieder einen Thread OT gemacht)

Warum verwendest du dann die langweilige Methode :wink: ?
Meine persönliche Meinung ist jedenfalls, dass Streaming die einfachere und elegantere Methode ist, weshalb ich für Einstellungen überhaupt keine Inis mehr verwende.
Delphi-Quellcode:
WriteComponentResFile('foo.bar', Edit1);

// ~

try
  Ini := TIniFile.Create('foo.bar');
  Ini.WriteString('Settings', 'Edit1', Edit1.Text);
finally
  Ini.Free;
end;
// Und das nur für die Text-Property

DGL-luke 2. Jan 2006 22:36

Re: Edit-Eintrag speichern
 
mmm... Khabarak... sach ma, frierst du da eine komplette Komponente ein? :shock:

Und wie lädt man die dann wieder?

Khabarakh 2. Jan 2006 22:55

Re: Edit-Eintrag speichern
 
Zitat:

Zitat von DGL-luke
mmm... Khabarak...

Du hast schon wieder das zweite "h" vergessen :zwinker: . Aber ist wirklich nicht der leichteste Name :stupid:
Zitat:

sach ma, frierst du da eine komplette Komponente ein? :shock:
Wenn du mit Frieren Speichern aller published Properties meinst: Jab :) . Auch wenn das nicht direkt mit dem Topic übereinstimmt, ist es bei den anderen Property-Änderungen wahrscheinlich auch erwünscht, dass sie mitgespeichert und nicht resettet werden (Beispiel: User wählt einen Font aus / platziert das Control neu).
Zitat:

Und wie lädt man die dann wieder?
Delphi-Referenz durchsuchenReadComponentRes :wink:
Mehr Möglichkeiten erhält man, wenn man [oh]TStream.Read/WriteComponent[/oh] direkt aufruft (beispielsweise mehrere Komponenten in einem Stream)

DGL-luke 2. Jan 2006 22:59

Re: Edit-Eintrag speichern
 
Interessant, Khabarakh, interessant.
Das is ja mal was ganz neues :thumb:

3_of_8 2. Jan 2006 23:08

Re: Edit-Eintrag speichern
 
Ich habe deshalb eine INI vorgeschlagen, weil es für sowas deutlich leichter zu machen ist.

Khabarakh 2. Jan 2006 23:22

Re: Edit-Eintrag speichern
 
Zitat:

Zitat von DGL-luke
Interessant, Khabarakh, interessant.
Das is ja mal was ganz neues :thumb:

Und Nützliches :) . Für mich selbst ist das Thema auch eher neu. Erst als ich mich etwas mit der RTTI auseinandergesetzt und die geniale Serialization von .NET erlebt habe, ist mir aufgefallen, dass auch unter Delphi.Win32 gute OOP Ini-Dateien eigentlich obsolet macht.

PS: Jetzt musst du nur noch deine Sig korrigieren :wink: .


Zitat:

Zitat von 3_of_8
Ich habe deshalb eine INI vorgeschlagen, weil es für sowas deutlich leichter zu machen ist.

Was genau meinst du mit "leichter"?
Dass eine simple Funktion alle Eigenschaften eines Objektes speichert, finde ich nicht wirklich schwer zu verstehen. Von der Sicht eines erfahrerenen (was für ein Wort :mrgreen:) Programmierers finde ich meine obigen Code eher leichter, man kann nicht einmal einen try-finally-Block vergessen.
Wenn es allerdings um allgemeine Einstellungen geht, ist eine Ini-Datei sicher gut, solange man sich nicht eingehend mit OOP beschäftigt hat.

3_of_8 2. Jan 2006 23:38

Re: Edit-Eintrag speichern
 
Also ich denke, wenn man den Text von 5 Editfeldern speichern will muss man nicht gleich Objektpersistenzframeworks auffahren. Eine simple INI oder eine Textdatei mit assignfile oder TFilestream oder von mir aus auch TStringList reicht vollkommen aus.


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