| Autor |
Beitrag |
FF
Hält's aus hier
Beiträge: 13
Win XP
Delphi 7
|
Verfasst: 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
|
Verfasst: So 24.09.06 20:28
Das einfachste wäre wohl eine Ini-Datei.
|
|
FF 
Hält's aus hier
Beiträge: 13
Win XP
Delphi 7
|
Verfasst: 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
|
Verfasst: 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:
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); test1 := Ini.ReadString('Leute', 'Name', ''); finally Ini.Free; end; | Alles weitere seht in der Delphi-Hilfe. 
|
|
FF 
Hält's aus hier
Beiträge: 13
Win XP
Delphi 7
|
Verfasst: So 24.09.06 20:40
ok, ich probiers mal, muss jetzt aber offline;
danke für die hilfe 
|
|
FF 
Hält's aus hier
Beiträge: 13
Win XP
Delphi 7
|
Verfasst: 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
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 
Hält's aus hier
Beiträge: 13
Win XP
Delphi 7
|
Verfasst: Mo 25.09.06 20:03
Hallo, also im grunde ist mein problem nur
dass ich net weiss was in dieser zeile
Delphi-Quelltext 1:
| test1 := Ini.ReadString('Leute', 'Name', ''); |
in ('Leute', 'Name', 'DIESE LÜCKE') kommt.... ich denke mal dann sollte das laden
auch klappen
Danke im Voraus
FF 
|
|
Marco D.
      
Beiträge: 2750
Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
|
Verfasst: 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 
Hält's aus hier
Beiträge: 13
Win XP
Delphi 7
|
Verfasst: Mo 25.09.06 20:14
heisst in dem fall
Delphi-Quelltext 1:
| test1:=ini.readstring('Leute', 'Name', 'test1'); |
?????
das klappt bei mir nicht... oder hab ich wieder was falsch verstanden...
|
|
Marco D.
      
Beiträge: 2750
Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
|
Verfasst: Mo 25.09.06 20:17
_________________ 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
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: 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:
Delphi-Quelltext 1:
| Ini := TIniFile.Create('C:\inifile.ini'); |
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Mo 25.09.06 20:28
Nochmal zusammenfassend:
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 := TIniFile.Create('C:\Dokumente und Einstellungen\User\Desktop\TEST\ini.ini'); Name1 := Ini.ReadString('Leute', 'Name1', ''); Name2 := Ini.ReadString('Leute', 'Name2', ''); Ini.WriteString('Leute', 'Name3', 'Gustav'); Ini.Free; end; |
|
|
FF 
Hält's aus hier
Beiträge: 13
Win XP
Delphi 7
|
Verfasst: 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:
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 public 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);
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 
Hält's aus hier
Beiträge: 13
Win XP
Delphi 7
|
Verfasst: 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
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: 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:
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); end; |
|
|
FF 
Hält's aus hier
Beiträge: 13
Win XP
Delphi 7
|
Verfasst: Mo 25.09.06 21:01
FUNKTIONIERT!!!!!
DANKE!!!!!!!^^
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Mo 25.09.06 21:01
Das a1 kannst du dir übrigens sparen. Gib einfach gleich Edit1.Text an:
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); end; |
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: 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.
      
Beiträge: 2750
Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
|
Verfasst: Mo 25.09.06 21:18
Chryzler 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? 
_________________ 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
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: 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. FF 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?
|
|