![]() |
INI Dateien mit Integer verwenden
Hallo!
Was ist da Falsch??
Delphi-Quellcode:
Wie könnte man das anders machen?? :gruebel:
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; mfg gauggi [edit=Jelly]Titel auf Wunsch von Gauggi geändert Mfg, Jelly[/edit] |
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...
|
Re: Form über Ini anzeigen geht nicht
Zitat:
|
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... |
Re: Form über Ini anzeigen geht nicht
Zitat:
Zum Schluss wird die INI wieder freigegeben: das habe ich vom obrigen Code weggelassen:
Delphi-Quellcode:
mfg gauggi
finally
ini.Free end; end; |
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; |
Re: Form über Ini anzeigen geht nicht
Zitat:
Danke an alle :thumb: |
Re: Form über Ini anzeigen geht nicht
Besser so:
Delphi-Quellcode:
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.
ini := TiniFile.Create(...);
try // INI verarbeiten finally ini.Free; end; Gruß Hawkeye |
Re: Form über Ini anzeigen geht nicht
Zitat:
/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... |
Re: Form über Ini anzeigen geht nicht
Hoffentlich wird das jetzt nicht OT...
Zitat:
Delphi-Quellcode:
Die Messagebox zeigt den Wert 4711 an, nicht den Wert 0. Getestet mit Delphi 6 und BDS 2006.
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; Gruß Hawkeye |
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:
Es wird keinen Fehler geben, da Free auch ohne vorherigen Konstruktor funktioniert...
var
wuppdi: TIniFile; begin wuppdi.Free; end; [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] |
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 |
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