Autor Beitrag
Stocki1990
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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:
ausblenden 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:

ausblenden 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 user profile iconNarses: Code-Tags hinzugefügt.
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: 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: Suche in: Delphi-Forum, Delphi-Library GETSHELLFOLDER Suche im MSDN CSIDL_APPDATA Suche in: Delphi-Forum, Delphi-Library INCLUDETRAILINGPATHDELIMITER
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 01.11.09 19:10 
Und hier das ganze nochmal fertig als Thread in der Library inkl. Demo: :D
www.delphi-library.d...ewtopic.php?p=499701
Stocki1990 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: So 01.11.09 19:34 
Danke Leute - Nun Funktioniert alles einwandfrei :)

Grüße
Christoph
Gruenschnabel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 41

Windows 7, 10
Delphi6, Delphi7SEportable, Delphi 10 Berlin Starter
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 20.01.10 22:54 
user profile iconGruenschnabel hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 41

Windows 7, 10
Delphi6, Delphi7SEportable, Delphi 10 Berlin Starter
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 41

Windows 7, 10
Delphi6, Delphi7SEportable, Delphi 10 Berlin Starter
BeitragVerfasst: 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 20.01.10 23:11 
user profile iconGruenschnabel hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 41

Windows 7, 10
Delphi6, Delphi7SEportable, Delphi 10 Berlin Starter
BeitragVerfasst: 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!