Autor Beitrag
FF
Hält's aus hier
Beiträge: 13

Win XP
Delphi 7
BeitragVerfasst: So 24.09.06 20:26 
Hi,
ich habe zu meiner Frage schon viele Antworten
gefunden; das Problem ist nur:
Ich bin ein blutiger Anfänger.
Kann mir irgendjemand mal für ganz dumme erklären mit welchem
Befehl ich den Wert einer Stringvariable auf der Festplatte speichere,
und nachdem das Programm geschlossen und wieder geöffnet wurde,
wieder abrufe?

Danke schonmal im Voraus!
FF
Amalia
Hält's aus hier
Beiträge: 11

WinXP, Win2000, Ubuntu 6.06
TurboDelphi Win32
BeitragVerfasst: So 24.09.06 20:28 
Das einfachste wäre wohl eine Ini-Datei.
FF Threadstarter
Hält's aus hier
Beiträge: 13

Win XP
Delphi 7
BeitragVerfasst: So 24.09.06 20:30 
und wie funktioniert das ganze dann??
Amalia
Hält's aus hier
Beiträge: 11

WinXP, Win2000, Ubuntu 6.06
TurboDelphi Win32
BeitragVerfasst: So 24.09.06 20:36 
Du bindest die Unit "IniFiles" in die uses-Liste ein.
Dann erstellst du die Datei, speicherst und kannst laden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
ini : TIniFile;
test, test1 : String;

try
ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+ 'Informationen.ini');
Ini.WriteString('Leute', 'Name', test); //Speichern
test1 := Ini.ReadString('Leute', 'Name', ''); //Laden
finally
Ini.Free;
end;
Alles weitere seht in der Delphi-Hilfe. ;)
FF Threadstarter
Hält's aus hier
Beiträge: 13

Win XP
Delphi 7
BeitragVerfasst: So 24.09.06 20:40 
ok, ich probiers mal, muss jetzt aber offline;
danke für die hilfe :wink:
FF Threadstarter
Hält's aus hier
Beiträge: 13

Win XP
Delphi 7
BeitragVerfasst: Mo 25.09.06 19:05 
Hmm... das speichern hab ich wohl verstanden aber
das laden klappt nicht ganz.
wenn ich jetzt die datei 'ini.ini' aus dem Verzeichnis 'C:\Dokumente und Einstellungen\User\Desktop\TEST' laden will wie stelle ich das an?
habe es schon mit
ausblenden Delphi-Quelltext
1:
var1:=Ini.readstring('Leute', 'Name', 'C:\Dokumente und Einstellungen\User\Desktop\TEST\ini.ini');					

versucht, aber das will nicht klappen, weiss jmd was ich falsch gemacht habe???
FF Threadstarter
Hält's aus hier
Beiträge: 13

Win XP
Delphi 7
BeitragVerfasst: Mo 25.09.06 20:03 
Hallo, also im grunde ist mein problem nur
dass ich net weiss was in dieser zeile
ausblenden Delphi-Quelltext
1:
test1 := Ini.ReadString('Leute', 'Name', ''); //Laden					


in ('Leute', 'Name', 'DIESE LÜCKE') kommt.... ich denke mal dann sollte das laden
auch klappen

Danke im Voraus

FF :wink:
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Mo 25.09.06 20:08 
Schreibe einfach den Namen der Variable, wo der String dann rein soll, als dritten Parameter. Wundere mich zwar auch darüber, warum das so muss, aber bei mir klappt's. ;)

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
FF Threadstarter
Hält's aus hier
Beiträge: 13

Win XP
Delphi 7
BeitragVerfasst: Mo 25.09.06 20:14 
heisst in dem fall
ausblenden Delphi-Quelltext
1:
test1:=ini.readstring('Leute', 'Name', 'test1');					

?????
das klappt bei mir nicht... oder hab ich wieder was falsch verstanden...
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Mo 25.09.06 20:17 
user profile iconFF hat folgendes geschrieben:
heisst in dem fall
ausblenden Delphi-Quelltext
1:
test1:=ini.readstring('Leute', 'Name', 'test1');					

?????
das klappt bei mir nicht... oder hab ich wieder was falsch verstanden...

Letzeres. ;)
ausblenden Delphi-Quelltext
1:
test1:=ini.readstring('Leute', 'Name', test1);					

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Mo 25.09.06 20:22 
Der dritte Parameter sollte immer ein leerer String sein. Er wird zurückgegeben, wenn das Lesen fehlgeschlagen ist. Den Wert, den du auslesen willst, ist der zweite Parameter. Der erste Parameter ist für dich uninteressant, er ist die "Rubrik", unter der der Wert abgespeichert/gelesen werden soll. Gib ihm einfach irgendeinen Namen (z.B: 'Settings').
Vor dem ersten Lesen musst du natürlich den Konstruktor aufrufen:
ausblenden Delphi-Quelltext
1:
  Ini := TIniFile.Create('C:\inifile.ini');					
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Mo 25.09.06 20:28 
Nochmal zusammenfassend:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
  Ini: TIniFile;
  Name1, Name2: String;
begin
  //Ini initialisieren
  Ini := TIniFile.Create('C:\Dokumente und Einstellungen\User\Desktop\TEST\ini.ini');
  //Wert 1 auslesen
  Name1 := Ini.ReadString('Leute', 'Name1', '');
  //Wert 2 auslesen
  Name2 := Ini.ReadString('Leute', 'Name2', '');
  //Wert 3 schreiben
  Ini.WriteString('Leute', 'Name3', 'Gustav');
  //Speicher freigeben
  Ini.Free;
end;
FF Threadstarter
Hält's aus hier
Beiträge: 13

Win XP
Delphi 7
BeitragVerfasst: Mo 25.09.06 20:29 
lol,
das funzt auch net
jez kanns wohl nur an mir liegen^^
also ich hab mir das so vorgestellt (in diesem Testprogramm):
wenn man auf button1 klickt, wird der inhalt von edit1 in der variable a1 gespeichert.
dann wird der inhalt der variable a1 in der ini gespeichert.
wenn man auf button2 klickt, wird der inhalt von der ini datei in die variable a1 geladen,
und a1 wird dann der caption von label1 zugeordnet.
ich hoffe das kann verstanden werden und
ich gebe jetzt mal den kompletten quelltext zur fehlersuche frei:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  IniFiles, Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
var
ini: TIniFile;
a1 :string;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
a1:=edit1.Text;
ini:=TIniFile.Create('C:\Dokumente und Einstellungen\User\Desktop\TEST\ini.ini');
ini.writestring('Benutzer', 'Name', a1); //Speichern


end;

procedure TForm1.Button2Click(Sender: TObject);
begin
a1 :=Ini.readstring('Benutzer', 'Name', a1);
label1.caption:=a1;
end;

end.


---------------
edit:
ohh, jez hatte ich die andern beiträge noch gar net gesehn, ich versuchs mal, danke
FF Threadstarter
Hält's aus hier
Beiträge: 13

Win XP
Delphi 7
BeitragVerfasst: Mo 25.09.06 20:48 
Vielen Dank für eure Bemühungen,
aber leider versteht der Anfänger in mir nur Bahnhof,
vielleicht fällt es mir ja einfacher das ganze zu verstehen,
wenn ich es in meinem (wahrscheinlich über und über mit Fehlern vollem)
Quelltext sehe^^
ich denke wenn ihr wisst was ich damit vorhab
könnt ihr den Quelltext ja vielleicht von meinen Fehlern befreien,

vielen Dank

FF
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Mo 25.09.06 20:57 
Der Konstruktor muss immer aufgerufen werden. Setzt ihn also am besten in OnCreate, und lass den aufruf dann beim speichern weg:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.OnCreate(Sender: TObject);  
begin  
  ini := TIniFile.Create('C:\Dokumente und Einstellungen\User\Desktop\TEST\ini.ini');
end; 

...

procedure TForm1.Button1Click(Sender: TObject);  
begin  
a1:=edit1.Text;   
ini.writestring('Benutzer', 'Name', a1); //Speichern  
end;
FF Threadstarter
Hält's aus hier
Beiträge: 13

Win XP
Delphi 7
BeitragVerfasst: Mo 25.09.06 21:01 
FUNKTIONIERT!!!!!
DANKE!!!!!!!^^
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Mo 25.09.06 21:01 
Das a1 kannst du dir übrigens sparen. Gib einfach gleich Edit1.Text an:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button1Click(Sender: TObject);  
begin    
  ini := TIniFile.Create('C:\Dokumente und Einstellungen\User\Desktop\TEST\ini.ini');  
  ini.WriteString('Benutzer', 'Name', Edit1.Text); //Speichern  
end;
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Mo 25.09.06 21:06 
Schau mal nach Paramstring, denn mit deinen kompletten Pfadangaben wirst Du nicht weit kommen !

_________________
Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Mo 25.09.06 21:18 
user profile iconChryzler hat folgendes geschrieben:
Der Konstruktor muss immer aufgerufen werden.

Mal so eine Frage außer der Reihe: Warum bei TIniFile immer den Konstruktor aufrufen? Ich habe die Erfahrung gemacht, dass dieser in jeder Routine neu aufgerufen werden muss. Das ist bei anderen Objekten nicht so. Warum/Weshalb? :nixweiss:

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Di 26.09.06 13:21 
Ist von mir eigentlich dumm ausgedrückt. Der Konstruktor muss immer einmal aufgerufen werden, d.h. wie jeder andere Konstruktor auch. Am Besten im OnCreate-Ereignis. user profile iconFF hat ihn nur vor dem Schreiben aufgerufen, er muß aber natürlich auch beim Lesen aufgerufen werden. Deswegen hat er ihn gleich im OnCreate-Ereignis aufgerufen, und den Aufruf beim Schreiben wieder entfernt. OK?