Autor |
Beitrag |
Stocki1990
      
Beiträge: 20
|
Verfasst: So 01.11.09 18:53
Servus Leute!
Trotz Allerheiligen bin ich gerade dabei, meine Hausübung in Software Engineering zu machen. Leider ist ein Problem bezüglich INI-Files aufgetreten:
Dies ist mein INI-File namens einstellungen.ini:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| [Startposition] left=10 top=28 [Zelle] hoehe=25 breite=25 [Anzahl] zeilen=20 spalten10 |
Ich möchte gerne die Werte in meine Variablen einlesen und diese dann dazu nutzen, ein Spielfeld aufzubauen. Jedoch passiert hier nichts, da ich den Default-Wert auf "0" gesetzt habe.
Wie kann man erreichen, dass das Programm automatisch erkennt, welchen Wert zB die Höhe (25) hat ???
Anbei noch mein Quellcode:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.FormShow(Sender: TObject); var ini: TIniFile;
begin
ini:=TIniFile.Create('einstellungen.ini'); try unit1.Zeilen:=ini.ReadInteger('Anzahl','zeilen',0); unit1.Spalten:=ini.ReadInteger('Anzahl','spalten',0);
unit1.startposition_top:=ini.ReadInteger('Startposition','top',0); unit1.startposition_left:=ini.ReadInteger('Startposition','left',0);
unit1.Breite:=ini.ReadInteger('Zelle','breite',0); unit1.Hoehe:=ini.ReadInteger('Zelle','hoehe',0); finally ini.free; end; |
Ich hoffe, dass Ihr mir hier bei diesem Problem helfen könnt und wünsche euch noch ein schönes, ruhiges Allerheiligen
Grüße aus Salzburg
Christoph
Moderiert von Narses: Code-Tags hinzugefügt.
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: So 01.11.09 19:01
Du verwendest ReadInteger schon richtig. Problem ist das du keinen absoluten Pfad bei TIniFile.Create übergibst, also wird dei Datei nicht gefunden, neu angelegt und die enthält dann eben keine Werte und es wird der Default-Wert benutzt.
ExtractFilePath extrahiert den Pfad aus einen Dateinamen
Mit Application.ExeName oder ParamStr(0) bekommst du den Pfad + Dateinamen der Exe.
Besser wäre es natürlich wenn du deine Einstellungen in einem Verzeichnis speicherst in dem auch normale User Schreibrechte haben: GETSHELLFOLDER CSIDL_APPDATA INCLUDETRAILINGPATHDELIMITER
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 01.11.09 19:10
Und hier das ganze nochmal fertig als Thread in der Library inkl. Demo:
www.delphi-library.d...ewtopic.php?p=499701
|
|
Stocki1990 
      
Beiträge: 20
|
Verfasst: So 01.11.09 19:34
Danke Leute - Nun Funktioniert alles einwandfrei
Grüße
Christoph
|
|
Gruenschnabel
      
Beiträge: 41
Windows 7, 10
Delphi6, Delphi7SEportable, Delphi 10 Berlin Starter
|
Verfasst: Mi 20.01.10 22:51
Hallo!
ich befasse mich das erste mal mit INI-Dateien und deren Anwendung.
Recht hilfreich war dabei folgende Seite:
www.delphi-treff.de/...se/wiki/Ini-Dateien/
Nun stoße ich aber auf ein Problem, wo ich nicht so recht weiter weiß.
Und zwar ist mein problem ein ähnliches dem des threadersteller. Ich schreibe Werte in eine INI-file, was auch einwandfrei funktioniert. Bei mir haperts aber beim auslesen. Im o.g. Link wird der Wert ja fix wieder ausgelesen. da sich meine Werte aber immer ändern (können), kann ich ja schlecht wie im Beispiel feste Werte auslesen, sondern ich will meine, zuvor gespeicherte haben.
Sicherlich muss ich hier mit Variablen oder in der Richtung arbeiten, aber ich steig nicht dahiner.
Da die Erstellung wunderbar funktioniert, poste ich jetzt nur mal den Auslesen-Teil:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TFarbgebung.FormCreate(Sender: TObject); Var Ini: TIniFile; begin Ini:=TIniFile.Create('C:\BOSV_Data.ini'); colorbox1.ItemIndex:= Ini.ReadInteger ('Farbgebung', 'Überschrift', Default); colorbox2.itemIndex:= Ini.ReadInteger ('Farbgebung', 'Hintergrund', Default); end; |
In diesem Teil soll eine gespeicherte Farbe einer Colorbox beim Neustart wieder aufgerufen werden. Gespeichert habe ich den ItemIndex als Integerwert.
So, für Default soll nun der in der Ini stehende Wert ausgelesen werden... was genau muss ich da eintragen? Hab da einiges probiert, aber nix
Wie gesagt, unter dem o.g. Link ist nur von festen Werten die Rede. Oder hab ich da komplett was verpasst?
MfG,
Gruenschnabel
_________________ Fährst Du rückwärts an den Baum, verkleinert sich dein Kofferraum!
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 20.01.10 22:54
Gruenschnabel hat folgendes geschrieben : | So, für Default soll nun der in der Ini stehende Wert ausgelesen werden... was genau muss ich da eintragen? Hab da einiges probiert, aber nix
Wie gesagt, unter dem o.g. Link ist nur von festen Werten die Rede. Oder hab ich da komplett was verpasst? |
Default ist wie der Name schon sagt der Standardwert. Wenn nämlich der Wert nicht in der Ini existiert. Und daher kannst du dort den dann zu benutzenden Wert, z.B. 0, angeben.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mi 20.01.10 22:55
naja, der Defaultwert gibt an was genommen werden soll wenn es den eintrag den du suchst NICHT gibt. Da es ihn nicht gibt kannst du ihn auch nicht als Default wert auslesen.
demnach würde ich dir vorschlagen du nimmst den wert, der genommen wird wenn das programm zum ersten mal ausgeführt wird.
lg elundril
€: too slow
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Gruenschnabel
      
Beiträge: 41
Windows 7, 10
Delphi6, Delphi7SEportable, Delphi 10 Berlin Starter
|
Verfasst: Mi 20.01.10 22:58
Hm entweder hab ich nen Denkfehler oder ich drücke mich falsch aus.
Also nochmal anders; Ich speichere ne Integer in der Ini.
Beim auslesen weiß ich doch aber nicht, welchen integer Wert da drin steht, wenn der sich paar mal ändert. Der, der drin steht, soll zugewiesen werden. Wenn ich im Code nun also 0 oder 10 oder was weiß ich eintrage, dann liest er doch immer diesen Wert aus und nicht den, der in der file steht! So zumindest bei mir und bei "0" der Fall.
_________________ Fährst Du rückwärts an den Baum, verkleinert sich dein Kofferraum!
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mi 20.01.10 23:00
vielleicht weil die INI-Datei noch nicht angelegt war oder die Combobox beim Speichern den ItemIndex 0 hatte?
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Gruenschnabel
      
Beiträge: 41
Windows 7, 10
Delphi6, Delphi7SEportable, Delphi 10 Berlin Starter
|
Verfasst: Mi 20.01.10 23:08
also beim Schließen des Programms sieht die Ini so aus als Beispiel:
[Farbgebung]
Überschrift=10
Hintergrund=24
Wenn ich nun versuche den ersten Wert auszulesen mit
Delphi-Quelltext 1:
| colorbox1.ItemIndex:= Ini.ReadInteger ('Farbgebung', 'Überschrift', 0); |
Dann ist die colorbox immer leer, weil ja 0= kein Eintrag heißt.
Gebe ich statt der 0 meinetwegen die 1 ein, kommt immer der erste Eintrag, logisch.
Ich bekomme es also nicht hin, dass er den aktuellen Wert, in diesem falle die 10 übernimmt.
Wie gesagt, ich hantiere das aller erste mal mit ini's. sorry 
_________________ Fährst Du rückwärts an den Baum, verkleinert sich dein Kofferraum!
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 20.01.10 23:11
Gruenschnabel hat folgendes geschrieben : | Dann ist die colobox immer leer, weil ja 0= kein eintrag heißt. |
Der Quelltext sollte den elften Eintrag auswählen. Dafür ist der Quelltext so korrekt. Du kannst aber beim Debuggen ja auch sehen was bei ReadInteger herauskommt (Strg + F7).
|
|
Gruenschnabel
      
Beiträge: 41
Windows 7, 10
Delphi6, Delphi7SEportable, Delphi 10 Berlin Starter
|
Verfasst: Mi 20.01.10 23:21
Delphi neugestartet, nu geht's. Also mit den Standartwerten aus der Ini, bzw. mit dem Eintrag "0" beim Auslesen. Danke vielmals!
_________________ Fährst Du rückwärts an den Baum, verkleinert sich dein Kofferraum!
|
|
|