AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Auslesen .ini

Offene Frage von "MoBe13"
Ein Thema von MoBe13 · begonnen am 15. Dez 2013 · letzter Beitrag vom 15. Dez 2013
Antwort Antwort
MoBe13

Registriert seit: 15. Dez 2013
11 Beiträge
 
#1

Auslesen .ini

  Alt 15. Dez 2013, 12:43
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:
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;
Dort sollen die Werte verwendet werden:

Delphi-Quellcode:
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;
Ich hoffe ihr könnt mir helfen! Danke.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Auslesen .ini

  Alt 15. Dez 2013, 13:23
Wenn man den Quellcode mal formatiert, dann fällt folgendes auf:
Delphi-Quellcode:
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;
Kann ich mir ja nicht vorstellen.

Vorstellen kann mich mir aber eher, dass diese Codezeilen, des Öfteren bei dir auftauchen (wobei der Wert 50 wohl eher variiert)
Delphi-Quellcode:
  if g < 50
  then
    ShowMessage('Sie haben zu wenige Geld.');

  if g >= 50
  then
    g := g - 50;
Warum dann nicht eine Methode, die die Kosten automatisch abzieht und das Resultat als Boolean zurückliefert.
Es wäre auch schön, wenn die Variable einen sprechenden Namen bekommen würde. g ist wenig aussagekräftig. Geld würde da schon eher passen. Ist aber Kosmetik, die nicht die Funktion aber die Pflege des Programms beeinträchtigt.
Delphi-Quellcode:
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;
alternativ geht dann auch (wahrscheinlich sogar übersichtlicher)
Delphi-Quellcode:
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;
Auch dieses Konstrukt ist eher unüblich (obwohl nicht wirklich falsch)
Delphi-Quellcode:
if xost > 0 then tost1.Interval:=5000;
if xost > 0 then tost1.Enabled:= true;
Besser
Delphi-Quellcode:
if xost > 0
then
  begin
    tost1.Interval := 5000;
    tost1.Enabled := true;
  end;
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.

Eventuell liest du aus der falschen Datei, die falsche Section, den falschen Wert aus ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (15. Dez 2013 um 13:26 Uhr)
  Mit Zitat antworten Zitat
MoBe13

Registriert seit: 15. Dez 2013
11 Beiträge
 
#3

AW: Auslesen .ini

  Alt 15. Dez 2013, 13:52
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;
Angehängte Dateien
Dateityp: 7z Spielstand.7z (319 Bytes, 3x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Auslesen .ini

  Alt 15. Dez 2013, 14:09
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. ini und filename , welche ja nur in den Funktionen verwendet werden, also gehören Diese auch lokal in die jeweiligen Funktionen rein
$2B or not $2B

Geändert von himitsu (15. Dez 2013 um 14:12 Uhr)
  Mit Zitat antworten Zitat
MoBe13

Registriert seit: 15. Dez 2013
11 Beiträge
 
#5

AW: Auslesen .ini

  Alt 15. Dez 2013, 14:13
Ok die function hab ich deklariert bekommen! Hatte es an der falschen Stelle.
  Mit Zitat antworten Zitat
MoBe13

Registriert seit: 15. Dez 2013
11 Beiträge
 
#6

AW: Auslesen .ini

  Alt 15. Dez 2013, 14:16
Ok das hab ich nicht gesehen! Vielen Danke euch beiden! Jetzt geht alles!
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz