Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi INI Dateien mit Integer verwenden (https://www.delphipraxis.net/75461-ini-dateien-mit-integer-verwenden.html)

gauggi 19. Aug 2006 14:38


INI Dateien mit Integer verwenden
 
Hallo!

Was ist da Falsch??

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
ini: TIniFile;
a: integer;
begin
try
ini := TiniFile.Create(ExtractFilePath(ParamStr(0))

+'gaugghtmlkonfig.ini');
begin
//Ab hier ist es falsch laut D3
a:= ini.ReadInteger('Allgemein', 'Erststart', 0);
//Dies seien inkompatible Typen
if a='1' then OKRightDlg7.ShowModal;
end;
Wie könnte man das anders machen?? :gruebel:

mfg gauggi

[edit=Jelly]Titel auf Wunsch von Gauggi geändert Mfg, Jelly[/edit]

OregonGhost 19. Aug 2006 14:41

Re: Form über Ini anzeigen geht nicht
 
Hmm, mir wäre neu, dass man in Delphi mitten im Code einen neuen Block (begin...end) eröffnen kann...

leddl 19. Aug 2006 14:42

Re: Form über Ini anzeigen geht nicht
 
Zitat:

Zitat von gauggi
Hallo!

Was ist da Falsch??

Delphi-Quellcode:
a: integer;
if a='1' .,..
Wie könnte man das anders machen?? :gruebel:

ZB einen Integer auch mit einem Integer vergleichen :zwinker: a ist als Integer deklariert, du vergleichst die Variable aber später mit der String-Konstanten '1'. Laß die ' weg, dann geht's auch ;)

DGL-luke 19. Aug 2006 14:43

Re: Form über Ini anzeigen geht nicht
 
wenn a ein integer ist, kannst du es nicht mit dem string-literal '1' vergleichen. Wir sind ja hier schließlich nicht bei PHP! :warn:

EDIT: Ja, OreghonGhost, das try ist da wohl ein wenig unglücklich geworden...

gauggi 19. Aug 2006 14:47

Re: Form über Ini anzeigen geht nicht
 
Zitat:

Zitat von DGL-luke
wenn a ein integer ist, kannst du es nicht mit dem string-literal '1' vergleichen. Wir sind ja hier schließlich nicht bei PHP! :warn:

EDIT: Ja, OreghonGhost, das try ist da wohl ein wenig unglücklich geworden...

Wie kann ich das nun machen? :wiejetzt:

Zum Schluss wird die INI wieder freigegeben:
das habe ich vom obrigen Code weggelassen:
Delphi-Quellcode:
finally
ini.Free
end;
end;
mfg gauggi

CK_CK 19. Aug 2006 14:49

Re: Form über Ini anzeigen geht nicht
 
So:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
  ini: TIniFile;
  a: integer;
begin
  try
    ini := TiniFile.Create(ExtractFilePath(ParamStr(0))+'gaugghtmlkonfig.ini');
    a:= ini.ReadInteger('Allgemein', 'Erststart', 0);

    if a=1 then OKRightDlg7.ShowModal;
  finally
    ini.Free;
  end;
end;

gauggi 19. Aug 2006 14:51

Re: Form über Ini anzeigen geht nicht
 
Zitat:

Zitat von CK_CK
So:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
  ini: TIniFile;
  a: integer;
begin
  try
    ini := TiniFile.Create(ExtractFilePath(ParamStr(0))+'gaugghtmlkonfig.ini');
    a:= ini.ReadInteger('Allgemein', 'Erststart', 0);

    if a=1 then OKRightDlg7.ShowModal;
  finally
    ini.Free;
  end;
end;

Aso! :zwinker: Die Stringstriche '' habe ich ganz übersehen!

Danke an alle :thumb:

Hawkeye219 19. Aug 2006 15:10

Re: Form über Ini anzeigen geht nicht
 
Besser so:

Delphi-Quellcode:
ini := TiniFile.Create(...);
try
  // INI verarbeiten
finally
  ini.Free;
end;
Wenn der Constructor von TIniFile eine Exception auslöst, wird die (lokale) Variable ini nicht initialisiert. Steht der Aufruf des Constructors im Innern der TRY-Anweisung, wird auf jeden Fall der FINALLY-Abschnitt durchlaufen, in dem der Aufruf der Methode Free dann wahrscheinlich zum nächsten Fehler führen wird. Mit obigem Code wird das vermieden.

Gruß Hawkeye

Muetze1 19. Aug 2006 16:23

Re: Form über Ini anzeigen geht nicht
 
Zitat:

Zitat von Hawkeye219
Wenn der Constructor von TIniFile eine Exception auslöst, wird die (lokale) Variable ini nicht initialisiert.

Nein, da widerspreche ich und sage, dass die Variable in dem Falle trotzdem ein Nil bekommt. So hatte ich das mal ausprobiert und bin auf das Ergebnis gekommen.

/EDIT: Ok, nicht mal auf das kann ich mich verlassen, wie Hawkeye219 beweist. Ich hatte es damals mit D4 ausprobiert, aber das sollte keinen Unterschied machen. Nun gut, ich nehme alles zurück und behaupte das Gegenteil...

Hawkeye219 19. Aug 2006 17:52

Re: Form über Ini anzeigen geht nicht
 
Hoffentlich wird das jetzt nicht OT...

Zitat:

Zitat von Muetze1
So hatte ich das mal ausprobiert und bin auf das Ergebnis gekommen.

Hier ist mein Testcode:

Delphi-Quellcode:
type
  TDummy = class (TObject)
  public
    constructor Create;
  end;

constructor TDummy.Create;
begin
  inherited;
  raise Exception.Create ('oops!');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Dummy : TDummy;
begin
  Dummy := Pointer(4711);
  try
    Dummy := TDummy.Create;
  except
    ShowMessage (Format('%d', [Cardinal(Dummy)]));
  end;
end;
Die Messagebox zeigt den Wert 4711 an, nicht den Wert 0. Getestet mit Delphi 6 und BDS 2006.

Gruß Hawkeye

CK_CK 19. Aug 2006 17:59

Re: Form über Ini anzeigen geht nicht
 
Das hat damit doch gar nichts zu tun...

Hast du dir mal den Quelltext von ".Free" einer beliebigen Komponente angeschaut?
Es ist nur eine Abfrage, ob die Komponente existiert und falls ja wird "Destroy" aufgerufen, ansonsten nichts.

Also kann das ".Create" ruhig in die try-Abfrage...
Als Test kannst du ja mal folgenden Code probieren:

Delphi-Quellcode:
var
  wuppdi: TIniFile;
begin
  wuppdi.Free;
end;
Es wird keinen Fehler geben, da Free auch ohne vorherigen Konstruktor funktioniert...

[EDIT]OK, da hab' ich wohl Mist erzählt...
Der Beispielcode gibt zwar keinen Fehler, jedoch wird das ganze Formular entfernt...

Naja, wieder was gelernt *schäm* :stupid:
[/EDIT]

Hawkeye219 19. Aug 2006 18:10

Re: Form über Ini anzeigen geht nicht
 
Dein Code löst keinen Fehler aus, wenn wuppdi eine globale Variable oder ein Feld eines Objekts ist. In diesem Fällen wurde die Variable von der Laufzeitumgebung mit dem Wert NIL vorbesetzt. Lokale Variablen liegen auf dem Stack und werden nicht initialisiert. Sie enthalten deshalb keine definierten (oder besser: vorhersagbaren) Werte.

Gruß Hawkeye

Jelly 19. Aug 2006 18:54

Re: Form über Ini anzeigen geht nicht
 
Leute,
Ihr weicht vom Thema ab. Diskussion ist nicht, wann und wie Objekte erzeugt und wieder freigegeben werden, sondern wie der Fragesteller mit seine INI Datei klar kommt.

Und auch deshalb meine Bitte an gauggi: Ändere bitte deinen Titel in etwas Aussagekräftiges. Dein Problem hat nix mit Forms zu tun, sondern es hakt einfach nur beim Zugriff auf die INI Datei.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:48 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