![]() |
INI Dateien auslesen
moinmoin
siehe topic, hab danah auch schon im forum gesucht und alles gelesen kompilieren lässt sich das ganze zwar aber irgendwie funzt der code nicht:
Delphi-Quellcode:
möchte aus der datei was auslesen und es in einer editbox anzeigen lassen
procedure TForm3.FormCreate(Sender: TObject);
var settings: TIniFile; begin settings := TIniFile.Create('settings.ini'); settings.ReadString('Nick', 'nickname', edit1.Text); end; ...btw isses normal das ich bei "uses" das "inifiles" selbst eintragen musste? sonst geht das doch immer von selbst gruss mario |
Moin silent,
Du musst noch die INI freigeben. Das geht mit settings.Free; oder besser: FreeAndNil(settings); Und aussehen sollte es eh ein bisschen anders. //Sicherheitshalber
Delphi-Quellcode:
Grüsse, Daniel :hi:
begin
Ini := TIniFile.Create('Meine.ini'); try Ini.ReadIrgendwas(); finally FreeAndNil(Ini); end; end; |
das try braucht man eigentlich nicht. Falls es misslingt, wird ja ein default genommen...
|
Zitat:
Dennoch sollte man es verwenden. Grüsse, Daniel :hi: |
Zitat:
...:cat:... |
huhu, danke für die antworten, funzt aber immer noch nicht.
hab das jetzt so:
Delphi-Quellcode:
aber das edit feld bleibt beim onactivate und oncreate leer
procedure TForm3.FormCreate(Sender: TObject);
var settings: TIniFile; begin settings := TIniFile.Create('settings.ini'); Try settings.ReadString('Nick', 'nickname', edit1.Text); finally FreeAndNil(settings); end; end; meine ini sieht so aus: [nick] nickname=test passwort=test gruss ^^ |
:mrgreen:
Du hast da was missverstanden. Sollte so aussehen:
Delphi-Quellcode:
Du willst ja das was in der ini ist, dem Edit zuweisen!
Edit1.Text := Settings.ReadString('Nick', 'NickName', '');
Grüsse, Daniel :hi: |
Moin Mario,
was Du auch noch auf jeden Fall bedenken solltest: Wenn Du
Delphi-Quellcode:
benutzt, muss sich die Datei beim Create im Windos Verzeichnis befinden, was aber etwas unpraktisch ist (das irgendein anderes Programm den gleichen Namen für seine INI verwendet ist ja nicht ganz unwahrscheinlich.
TIniFile.Create('Settings.ini');
Besser wäre es immer einen genauen Pfad anzugeben, wo sich die INI befindet z.B.
Delphi-Quellcode:
für das Programmverzeichnis.
TIniFile.Create(ExtractFilePath(paramstr(0))+'settings.ini');
|
Moin Christian, reh :mrgreen:
Zitat:
Man könnte aber auch noch gleich den Dateinamen einfach übernehmen. Die liegt im gleichen Verzeichniss und hat den gleichen Dateinamen.
Delphi-Quellcode:
Grüsse, Daniel :hi:
ini := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
|
hoi,
jo danke nun klappts, aber kann ichs noch so machen das ich das so angeben kann das die ini da ist wo auch die exe ist, statt "C:\Programme\Borland\Delphi6\bla\settings.ini " ?? |
Moin Mario,
schau Dir doch mal
an. ;-) |
Delphi-Quellcode:
dürfte den Ordner mit der Exe drin sein.
ExtractFilePath(Application.ExeName);
|
Moin Nailor,
paramstr(0) gibt das gleiche zurück wie Application.Exename, nur hast Du in Konsolenprogrammen den Vorteil, dass Du nicht die Unit Forms einbinden musst. Ausserdem schreibt es sich kürzer ;-) |
Zitat:
Delphi-Quellcode:
Nur das man so auch gleich den Namen dex exe hat und somit nur noch die Erweiterung .ini angeben muss. Die ini hat dann den Namen der exe.
ini := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
Grüsse, Daniel :hi: |
Moin Daniel,
nur wäre es eventuell praktischer der INI einen aussagekräftigen Namen zu geben. Zum einen ist es dann leichter sie ihrer Funktion zuzuordnen, zum anderen: Was machst Du, wenn Du mehrere Ini's brauchst? |
Moin Christian,
Zitat:
Hast recht, aber bis jetzt bin ich noch mit einer ausgekommen. Es gibt ja auch noch TBigIniFile. Somit kann man da auch noch genug reinpacken. ;) Aber im prinzip hast Du recht. Grüsse, Daniel :hi: |
Moin Daniel,
es geht mir auch nicht um die 64KB Grenze, sondern um die sinnvolle Verteilung der Daten. |
hab das nun folgendermaßen:
Delphi-Quellcode:
funzt aber nicht, Inkompatible Typen TiniFIle und String
procedure TForm3.FormActivate(Sender: TObject);
var settings: TIniFile; begin settings := TIniFile.Create(ExtractFilePath(paramstr(0))+'settings.ini'); Try edit1.Text := settings.ReadString('Nick', 'nickname', ''); finally FreeAndNil(settings); end; end; ist was falsch? (würd mich bei mir nicht wundern :D) grus mario ;) |
Delphi-Quellcode:
Läßt sich ohne Fehler kompilieren. Geh erst mal schlafen.
procedure TForm1.Button1Click(Sender: TObject);
var settings: TIniFile; begin settings := TIniFile.Create(ExtractFilePath(paramstr(0))+'settings.ini'); Try edit1.Text := settings.ReadString('Nick', 'nickname', ''); finally FreeAndNil(settings); end; end; |
ja jetzt bei mir auch hatte 2 zeilen vertauscht, aber das editfeld bleibt leer
btw: hab von 2:30 bis 6 schon geschlafen gruss mario ;) |
hab gerade gemerkt das die ini nicht vorhanden war, muss irgendwie gelöscht worden sein, ka hatte pc heut nacht ohne herunterzufahren ausgemacht...
also vielen danke für die hilfe leute :) gruss mario |
Klar bleibt es leer, wenn die Sektion oder Schlüssel nicht existiert wird der default-String genommen und den hast du mit '' angegeben.
Reicht nicht. Legt dich noch mal hin. |
jo hehe sorry, hab halt noch nicht so nen grossen plan davon :(
btw nochmal was...
Delphi-Quellcode:
wie man da sieht sind da ca 5 mal
procedure TForm3.FormActivate(Sender: TObject);
var settings: TIniFile; begin settings := TIniFile.create(ExtractFilePath(ParamStr(0)) + 'settings.ini'); Try edit1.Text := settings.ReadString('nick', 'nickname', ''); edit2.Text := settings.ReadString('nick', 'passwort', ''); if settings.ReadString('server', 'servernr', '') = '1' then begin listbox1.Selected[1-1] := true; end; if settings.ReadString('server', 'servernr', '') = '2' then begin listbox1.Selected[2-1] := true; end; if settings.ReadString('server', 'servernr', '') = '3' then begin listbox1.Selected[3-1] := true; end; if settings.ReadString('server', 'servernr', '') = '4' then begin listbox1.Selected[4-1] := true; end; if settings.ReadString('server', 'servernr', '') = '5' then begin listbox1.Selected[5-1] := true; end; finally settings.Free; end; end;
Delphi-Quellcode:
solche sachen (nur mit anderen werten)
if settings.ReadString('server', 'servernr', '') = '4' then
begin listbox1.Selected[4-1] := true; end; könnte man das nicht irgendwie kürzer machen? also nicht für jeden wert nochmal das ganze schreiben? mit ner prozedur(?) oder so?? gruss mario btw: schlafen geht nimmer muss noch pc kaufen :( |
Moin Mario,
sollte so gehen:
Delphi-Quellcode:
procedure TForm3.FormActivate(Sender: TObject);
var settings: TIniFile; i : integer; begin settings := TIniFile.create(ExtractFilePath(ParamStr(0)) + 'settings.ini'); Try edit1.Text := settings.ReadString('nick', 'nickname', ''); edit2.Text := settings.ReadString('nick', 'passwort', ''); for i := 0 to 4 do begin ListBox1.Selected[i] := Settings.ReadString('server','servernr','') = IntToStr(i+1); end; finally settings.Free; end; end; |
moin christian, danke für den code, das funktioniert bei mir nur nicht :(
also ich hab ne ini datei da steht ca: [server] servernr=2 Servernummer kann zwischen 1-5 schwanken deswegen soll beim oncreate meines form3's aus der ini gelesen werden welche zahl da ist also 1,2,3,4 oder 5 und dann dementsprechen z.b wenn da 4 steht soll die 4. Zeile meiner listbox markiert anzeigezeigt werden hoffe das du mir das sagen kannst :) gruss mario |
Moin Mario,
mir ist zwar im Moment nicht so recht klar, warum das nicht funktioniert (auch wenn's nicht schön ist die Servernummer fünfmal zu lesen, gehen sollte es so), aber ich hätte da noch eine Idee:
Delphi-Quellcode:
Da die ServerNummer ja numerisch ist, kannst Du sie auch gleich als Integer lesen.
var
settings : TIniFile; iServerNr : integer; begin settings := TIniFile.create(ExtractFilePath(ParamStr(0)) + 'settings.ini'); Try edit1.Text := settings.ReadString('nick', 'nickname', ''); edit2.Text := settings.ReadString('nick', 'passwort', ''); iServerNr := Settings.ReadInteger('server','servernr',-1); if iServerNr <> -1 then begin ListBox1.Selected[iServerNr-1] := true; end; finally settings.Free; end; end; |
genau so meinte ich das, danke :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:47 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