Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Daten speichern (https://www.delphipraxis.net/64519-daten-speichern.html)

pacman1986 5. Mär 2006 21:15

Re: Daten speichern
 
Delphi-Quellcode:
procedure TForm1.ToolButton1Click(Sender: TObject);
var i:integer;
begin
   Ini := TIniFile.Create('data.ini');
    for i := 1 to 19 do begin
     Ini.WriteString('Daten', 'Edit1'+inttostr(i)+'-Feld', TEdit(FindComponent('Edit'+inttostr(i))).text);
    end;
   Ini.Free;
end;
Wäre deutsöich kürzer für den ersten teil

und

Delphi-Quellcode:
procedure TForm1.ToolButton2Click(Sender: TObject);
var i:integer;
begin
   Ini := TIniFile.Create('data.ini');
    for i := 1 to 19 do begin
     TEdit(FindComponent('Edit'+inttostr(i))).text=Ini.ReadString('Daten', 'Edit1'+inttostr(i)+'-Feld', 'Default-Wert');
    end;
   Ini.Free;
end;
für den 2 ten Teil

PS: Code net überprüft müsste aber funzen

LukeGee 6. Mär 2006 12:22

Re: Daten speichern
 
Zitat:

Zitat von ichbins
mal ne Auflistung der Fehler / Verbesserungswürdigen Stellen in deinem Code:

1. Einrückung

du solltest deinen Quelltext immer einrücken (mit jedem begin etc. eine stufe weiter einrücken)

wenn du mal 10000-Zeilen Codes mit 8facher Verschachtelung schreibst ist das nahezu überlebensnotwendig.
Delphi-Quellcode:
procedure xyz;
var
  a,b,i:integer;
  s:string;
beign
  try begin
    for i:=0 to 10 do begin
      showmessage('i='+inttostr(i));
    end;
  end excpet
    showmessage('fehler');
  end;
end;

2. Schreiben der INI-Dateien

Delphi-Quellcode:
Ini := TIniFile.Create('data.ini');
Ini.WriteString('Daten', 'Edit1-Feld', Edit1.Text);
Ini.Free;

Ini := TIniFile.Create('data.ini');
Ini.WriteString('Daten', 'Edit2-Feld', Edit2.Text);
Ini.Free;
du öffnest die Datei, schreibst, schliesst die Datei, öffnest sie wieder, schreibst,...

fährst du deinen Comuter hoch damit du ein Programm ausführen kannst, fährst ihn wieder herunter, fährst ihn aber gleich wieder hoch, und führst das nächste Programm aus?

besser:
Delphi-Quellcode:
ini:=tinifile.create('data.ini');
Ini.WriteString('Daten', 'Edit1-Feld', Edit1.Text);
Ini.WriteString('Daten', 'Edit2-Feld', Edit2.Text);
Ini.Free;
3. Lesen der INI-Dateien

du öffnest die Datei, liest einen Wert, vergisst aber, die Datei wieder zu schliessen, öffnest sie dann aber - obwohl sie schon geöffnet ist - gleich wieder...

am schluss schliesst du die Datei überhaupt nicht mehr - wieder eine Fehlerquelle.

Delphi-Quellcode:
Ini := TIniFile.Create('data.ini');
Edit1.Text := Ini.ReadString('Daten', 'Edit1-Feld', 'Default-Angabe');

Ini := TIniFile.Create('data.ini');
Edit2.Text := Ini.ReadString('Daten', 'Edit2-Feld', 'Default-Angabe');

//...
besser am Anfang einmal öffnen, alles lesen, und dann wieder schliessen:

Delphi-Quellcode:
Ini := TIniFile.Create('data.ini');
Edit1.Text := Ini.ReadString('Daten', 'Edit1-Feld', 'Default-Angabe');
Edit2.Text := Ini.ReadString('Daten', 'Edit2-Feld', 'Default-Angabe');
//...
ini.free;
außerdem ist es ungeschickt, 'Default-Angabe' als Edittext zu setzen, falls der echte Wert nicht gelesen werden kann, wie z.B. beim ersten Programmstart. Verwende den Text, der dem User in diesem Fall angezeigt werden soll, anstatt 'Default-Angabe', wie z.B. einen leeren String: ''

4. Zuweisung der Boolean (Ja-Nein-Werte)

du machst gerade folgendes:

Falls der wert der Checkbox.checked wahr ist, dann setze den Wert des Edit.Enabled auf wahr.
Falls der wert der Checkbox.checked falsch ist, dann setze den Wert des Edit.Enabled auf falsch.

klingt das nicht etwas umständlich?

Delphi-Quellcode:
if (CheckBox1.Checked=true) then Edit1.Enabled:=true;
if (CheckBox1.Checked=false) then Edit1.Enabled:=false;
einfacher wäre doch das:

Falls der wert der Checkbox.checked wahr ist, dann setze den Wert des Edit.Enabled auf wahr,
ansonsten setze den Wert des Edit.enabled auf falsch.

Delphi-Quellcode:
if CheckBox1.Checked=true then
  Edit1.Enabled:=true
else
  Edit1.Enabled:=false;
In einer If-Abfrage ist es allerdings absolut unnötig, ein =true abzufragen, denn das macht die If-Abfrage selbst. Sie überprüft, ob der Wert der gegebenen Variable true ist, also z.B. der Wert der Operation 'a'='a' ist true, während 'a'='b' false ist.

Delphi-Quellcode:
if CheckBox1.Checked then
  Edit1.Enabled:=true
else
  Edit1.Enabled:=false;
Aber wieso machst dus überhaupt so umständlich und sagst nicht gleich: "Gib dem edit.enabled denselben wert wie dem checkbox.checked"?

Delphi-Quellcode:
edit1.enabled:=checkbox1.checked;

Vielen Dank für die Korrektur. Geht ja wirklich viel einfacher :)

inherited 6. Mär 2006 16:00

Re: Daten speichern
 
Bei der gelegenheit könnte man für sowas eigentlich ne eigene unit schreiben

Marduk 11. Jan 2007 13:07

Re: Daten speichern
 
Zitat:

Zitat von Dj_Base
Um dir diesen Umstand zu nutze machen zu können, muss du die Unit IniFiles einbinden.
Und dann musst folgendes für das Speichern der Daten tun:
Delphi-Quellcode:
var Ini: TIniFile //Variable vom Typ TIniFile.
begin
Ini := TIniFile.Create('data.ini'); //Ini-Datei öffnen bzw. erstellen
//Speichert Edit1.Text in der Kategorie Daten als wert von Edit-Feld
Ini.WriteString('Daten', 'Edit-Feld', Edit1.Text);
Ini.Free; //Und wieder freigeben
end;
Die Ini-datei sieht nun so aus:
Delphi-Quellcode:
[Daten]
Edit-Feld=Hier der Inhalt deines Edit-Feldes ...

hab ich mir mal so geklaut und sieht demantsprechend so aus:

Delphi-Quellcode:
procedure TForm1.bt1onclick(Sender: TObject);
var
ini:TIniFile;
begin
    ini:= TIniFile.Create('data.ini');
    ini.writestring('Daten','Zeit',edit1.text);
    ini.free;
end;
das Prog lässt sich auch ohne Probleme ausführen, erzeugt aber keine Datei im Ordner mit der Projekt.exe. Erstelle ich manuell eine data.ini im Ordner mit der exe, so verändert sich selbige nicht.

inherited 11. Jan 2007 13:17

Re: Daten speichern
 
Probiere mal folgende änderung aus:
Delphi-Quellcode:
    ini:= TIniFile.Create(ExtractFilePath(ParamStr(0))+'data.ini');

Marduk 11. Jan 2007 15:27

Re: Daten speichern
 
Danke, das war's! :-D

raiguen 11. Jan 2007 16:58

Re: Daten speichern
 
Moin :)
Nochmal ne kurze Erklärung zu Ini-Dateien:
Wenn das hier
Delphi-Quellcode:
ini:= TIniFile.Create('data.ini');
gemacht wird, dann wird die IniDatei im Windows-Ordner abgelegt bzw erstellt :wink:
wobei es völlig egal ist, ob du sie nun data.ini oder data.txt oder data.bla nennst...
Bemüh mal die Suchfunktion deines Rechners und schau dir mal an, wo deine 'vermisste' data.ini gelandet ist...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 Uhr.
Seite 4 von 4   « Erste     234   

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