![]() |
Auslesen .ini
Hallo alle miteinander,
ich hoffe ich bin in der richtigen Kategorie gelandet! Ich versuche seit einigen Tagen in ein Unterrichtsprojekt eine Speicherfunktion einzubauen. Das ganze wird ein Spiel und das Speichern in einer Inidatei funktioniert auch spitze. Ich habe nur ein Problem mit dem Reinladen der Daten. Es wird keine Fehlermeldung ausgegeben allerdings werden die Werte nicht für das Programm übernommen. Hier Ausschnitte aus dem Code: Die Funktion zum Laden der Elemente:
Delphi-Quellcode:
Dort sollen die Werte verwendet werden:
procedure TForm1.Button8Click(Sender: TObject);
begin filename := ExtractFilePath(ParamStr(0)) + 'Gesamt.ini'; ini := TIniFile.Create(filename); eost := ini.ReadFloat('ost', 'eost', eost); xost := ini.ReadFloat('ost', 'xost', xost); ini.Free; if xost > 0 then tost1.Interval:=5000; if xost > 0 then tost1.Enabled:= true; timer1.Interval:=1000; timer1.Enabled := true; timer2.Interval:=5000; timer2.Enabled := true; end;
Delphi-Quellcode:
Ich hoffe ihr könnt mir helfen! Danke.
procedure TForm1.sostClick(Sender: TObject);
begin if g<50 then ShowMessage('Sie haben zu wenige Geld.'); if g>=50 then g:= g-50; xost:= xost+1; tost1.Interval:=5000; tost1.Enabled:= true; end; |
AW: Auslesen .ini
Wenn man den Quellcode mal formatiert, dann fällt folgendes auf:
Delphi-Quellcode:
Kann ich mir ja nicht vorstellen.
procedure TForm1.sostClick(Sender: TObject);
begin if g < 50 then ShowMessage('Sie haben zu wenige Geld.'); if g >= 50 then g := g - 50; // Der Rest hier wird immer ausgeführt, egal ob genug Geld da war oder nicht // Soll das so sein? xost := xost + 1; tost1.Interval := 5000; tost1.Enabled := true; end; Vorstellen kann mich mir aber eher, dass diese Codezeilen, des Öfteren bei dir auftauchen (wobei der Wert 50 wohl eher variiert)
Delphi-Quellcode:
Warum dann nicht eine Methode, die die Kosten automatisch abzieht und das Resultat als Boolean zurückliefert.
if g < 50
then ShowMessage('Sie haben zu wenige Geld.'); if g >= 50 then g := g - 50; Es wäre auch schön, wenn die Variable einen sprechenden Namen bekommen würde.
Delphi-Quellcode:
ist wenig aussagekräftig.
g
Delphi-Quellcode:
würde da schon eher passen. Ist aber Kosmetik, die nicht die Funktion aber die Pflege des Programms beeinträchtigt.
Geld
Delphi-Quellcode:
alternativ geht dann auch (wahrscheinlich sogar übersichtlicher)
function TForm1.ErfolgreicheZahlung( const Kosten : Integer ) : Boolean;
begin Result := ( g >= Kosten ); if Result then begin g := g - Kosten; end else begin ShowMessage( 'Sie haben zu wenig Geld' ); end; end; procedure TForm1.sostClick(Sender: TObject); begin if ErfolgreicheZahlung( 50 ) then begin xost := xost + 1; tost1.Interval := 5000; tost1.Enabled := true; end; end;
Delphi-Quellcode:
Auch dieses Konstrukt ist eher unüblich (obwohl nicht wirklich falsch)
procedure TForm1.sostClick(Sender: TObject);
begin if not ErfolgreicheZahlung( 50 ) then Exit; // Die Methode wird einfach verlassen xost := xost + 1; tost1.Interval := 5000; tost1.Enabled := true; end;
Delphi-Quellcode:
Besser
if xost > 0 then tost1.Interval:=5000;
if xost > 0 then tost1.Enabled:= true;
Delphi-Quellcode:
Warum er aus deiner Ini-Datei nichts ausliest, können wir aber nicht sagen, weil wir nicht sehen wie du in diese Datei speicherst bzw. nicht den Inhalt der Datei kennen.
if xost > 0
then begin tost1.Interval := 5000; tost1.Enabled := true; end; Eventuell liest du aus der falschen Datei, die falsche Section, den falschen Wert aus ... |
AW: Auslesen .ini
Liste der Anhänge anzeigen (Anzahl: 1)
Vielen Dank!
Ich vermute ein Experte würde einen Schreikrampf bei meinem Quelltext bekommen ;) Wie deklariere ich die Funktion richtig und wo? Und zu meiner Ausgangsfrage:
Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);
begin filename := ExtractFilePath(ParamStr(0)) + 'Spielstand.ini'; ini := TIniFile.Create(filename); ini.WriteInteger('Geld', 'g', g); ini.WriteFloat('ost', 'eost', eost); ini.WriteFloat('ost', 'xost', xost); ini.Free; end; procedure TForm1.Timer3Timer(Sender: TObject); begin if z = 0 then ComboBox2.Items.Delete(0); if zi = 0 then ComboBox2.Items.Delete(2); end; |
AW: Auslesen .ini
Tipp: Schau dir mal die Dateinamen an, in deiner Speichern- und Laden-Funktion.
Mach dir besser eine Konstante mit dem Namen, dann hast du überall das Gleiche. Und warum sind alle Variablen global, bzw. wo sind diese deklariert? z.B.
Delphi-Quellcode:
und
ini
Delphi-Quellcode:
, welche ja nur in den Funktionen verwendet werden, also gehören Diese auch lokal in die jeweiligen Funktionen rein :!:
filename
|
AW: Auslesen .ini
Ok die function hab ich deklariert bekommen! Hatte es an der falschen Stelle.
|
AW: Auslesen .ini
Ok das hab ich nicht gesehen! Vielen Danke euch beiden! Jetzt geht alles!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:05 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 by Thomas Breitkreuz