Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi IniFile wird nicht erstellt! (https://www.delphipraxis.net/136238-inifile-wird-nicht-erstellt.html)

aramintaros 26. Jun 2009 00:46


IniFile wird nicht erstellt!
 
Hallo zusammen,
bei mir wird kein IniFile erstellt und ich hab nach einigem Suchen keine Lösung gefunden.
Kann mir hier weiter geholfen werden? Um einen IniFile zu erstellen benutze ich folgenden Code:
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var Ini: TIniFile;
begin
  Ini:= TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
  try
    Ini.WriteString( 'VideoSaveDir', 'VideoSaveDir', VideoSaveDir);
    Ini.WriteString('Zwischenspeicher', 'Zwischenspeicher', Zwischenspeicher);
    Ini.WriteString('Arbeitsverzeichnis', 'Arbeitsverzeichnis', Arbeitsverzeichnis);
    Ini.UpdateFile;
  finally
  end;
  Ini.Free;
  VideoFilelist.Free;
  Videopuffer:= nil;
  VideoInfo:= nil;
end;

// Hab's dann so versucht:

  Ini:= TIniFile.Create('C:\DasVerzeichnis\Meine.ini');

// Aber auch hier passiert nichzs - keine *.ini
Die Variable "Ini" als eine globbale Variable zu deklarieren hat auch nicht geklappt.
Weis jemand Rat, bin nach 4 Stunden erfolglosem Suchen, lesen und probieren recht entnervt :roll:
Auf dem PC bin ich der Chefe, also fehlende Rechte können es nicht sein, klappt ja mit Textfiles und anderen auch (XP-Delphi2009).
Danke schon mal und noch einen ruhigen Abend.

Luckie 26. Jun 2009 01:19

Re: IniFile wird nicht erstellt!
 
Welches Betriebssystem? Und warum ist das Ini.Free; nicht im finally-Block wo es hingehört?

Deine Sektionen heißen genauso wie die Schlüssel, das finde ich etwas ungewöhnlich. Eventuell liegt das Problem darin begründet.

mirage228 26. Jun 2009 01:30

Re: IniFile wird nicht erstellt!
 
Schalt sonst mal die Debug DCUs an und setze einen Haltepunkt auf die FormClose Routine (wird sie überhaupt aufgerufen?)

Viele Grüße

Muetze1 26. Jun 2009 06:34

Re: IniFile wird nicht erstellt!
 
Zitat:

Zitat von mirage228
Schalt sonst mal die Debug DCUs an und setze einen Haltepunkt auf die FormClose Routine (wird sie überhaupt aufgerufen?)

Und wieso braucht er dafür die Debug DCU's?

hoika 26. Jun 2009 07:00

Re: IniFile wird nicht erstellt!
 
Hallo,

Delphi-Quellcode:
Ini:= TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
Inis gehören nichts ins Exe-Verzeichnis.
Dort besteht unter deinem XP in der Regel kein Schreibrecht,
ab Vista geht das gar nicht mehr (jaja, stimmt nicht ganz)

Delphi-Quellcode:
Ini:= TIniFile.Create('C:\DasVerzeichnis\Meine.ini');
Hast du in C:\DasVerzeichnis Schreibrecht ?
Existiert das Verzeichnis überhaupt.
Hast du nach dem Create auch etwas in die Ini reingeschrieben ?
Ini.Free vergessen ?


Heiko

mkinzler 26. Jun 2009 07:02

Re: IniFile wird nicht erstellt!
 
Besser mit Special FoldersSpecial Folders arbeiten

mirage228 26. Jun 2009 08:33

Re: IniFile wird nicht erstellt!
 
Zitat:

Zitat von Muetze1
Zitat:

Zitat von mirage228
Schalt sonst mal die Debug DCUs an und setze einen Haltepunkt auf die FormClose Routine (wird sie überhaupt aufgerufen?)

Und wieso braucht er dafür die Debug DCU's?

Naja, falls was in TIniFile selbst nicht passiert bzw. schief läuft würde er das ja auch sehen.

Popov 26. Jun 2009 09:20

Re: IniFile wird nicht erstellt!
 
Zitat:

Zitat von aramintaros
Hallo zusammen,
bei mir wird kein IniFile erstellt und ich hab nach einigem Suchen keine Lösung gefunden.
Kann mir hier weiter geholfen werden? Um einen IniFile zu erstellen benutze ich folgenden Code:

...

Also was den Quellcode angeht, so gibt es da keinen Fehler. Zwar sollte die Ini.Free in den finally-Block, aber das nur nebenbei und hat auf die Funktionalität selbst keine Auswirkung. Ob die Ini Variable global oder lokal angelegt wird hat für die Funktionalität auch keine Bedeutung. Lokal ist besser, global ist aber kein Fehler. Ich gehe mal davon aus, daß du die Unit IniFiles eingetragen hast, sonst hättest du ja eine Fehlermeldung.

Teste es eventuell ohne Ini.UpdateFile, aber das sollte es auch nicht sein. Unter Win NT ff hat UpdateFile sowieso keine Bedeutung.

Das einzige was sein kann, sind tatsächlich Schreibrechte in dem Ordner. Benutzt du eventuell Vista? Bei Vista denkt man oft, daß man Adminrechte hat, hat man aber keine.

Das einzige was noch sein könnte, aber das kann man am Code nicht erkennen, ist, daß das Programm hier aussteigt

Delphi-Quellcode:
Ini.WriteString( 'VideoSaveDir', 'VideoSaveDir', VideoSaveDir);
Wenn aber VideoSaveDir ein String ist, dann gibt es keinen Grund dafür. Denn eine Ini wird erst in dieser Zeile angelegt.

jaenicke 26. Jun 2009 09:51

Re: IniFile wird nicht erstellt!
 
So etwas würde ich eher in OnCloseQuery ausführen statt in OnClose.

Davon abgesehen: Der Code ist soweit funktionsfähig, auch wenn das Free wie schon gesagt wurde ins finally gehört.

Da Delphi ja die Exe in dem Ordner erstellen konnte, die Rechte also kein Problem sind, bleibt nur:
Zitat:

Zitat von mirage228
und setze einen Haltepunkt auf die FormClose Routine (wird sie überhaupt aufgerufen?)

Kann es sein, dass die Prozedur im Objektinspektor gar nicht bei OnClose eingetragen ist?

Andere Möglichkeit: Das Programm stürzt in OnCloseQuery ab oder wird via Halt oder so abgestürzt, dann wird OnClose natürlich nicht ausgeführt.

DeddyH 26. Jun 2009 09:56

Re: IniFile wird nicht erstellt!
 
Ein Breakpoint sollte hier Klarheit schaffen.

Popov 26. Jun 2009 10:37

Re: IniFile wird nicht erstellt!
 
Zitat:

Zitat von jaenicke
Kann es sein, dass die Prozedur im Objektinspektor gar nicht bei OnClose eingetragen ist?

Ich hab es gerade getestet. Keine Probleme in OnClose, die Ini wird angelegt.

DeddyH 26. Jun 2009 10:39

Re: IniFile wird nicht erstellt!
 
Das ist aber nicht besonders aussagefähig, da möglicherweise im OI das Ereignis nicht zugewiesen ist, obwohl die Methode im Source steht ;)

Muetze1 26. Jun 2009 11:17

Re: IniFile wird nicht erstellt!
 
Zitat:

Zitat von jaenicke
So etwas würde ich eher in OnCloseQuery ausführen statt in OnClose.

Wie kommt man denn auf eine solche Idee? Damit du die INI jedesmal neuschreibst, wenn der Benutzer beim "wirklich beenden" Dialog nochmal nein sagt?

Die Definition von OnClose und OnCloseQuery sind eindeutig und somit ist auch das zu benutzende Ereignis eindeutig. Kein Wunder, dass es soviele komische Programme gibt...

jaenicke 26. Jun 2009 11:26

Re: IniFile wird nicht erstellt!
 
Zitat:

Zitat von Muetze1
Wie kommt man denn auf eine solche Idee? Damit du die INI jedesmal neuschreibst, wenn der Benutzer beim "wirklich beenden" Dialog nochmal nein sagt?

Weil das System bei OnCloseQuery zuerst freundlich fragt und man bei OnClose in Gefahr läuft beim Herunterfahren vorher abgewürgt zu werden, wenn das System ausgelastet ist und der Benutzer das Beenden erzwingt... :roll: (ich habs mal ausprobiert als es da Probleme gab)
Ich nutze allerdings normalerweise auch OnClose, wenn es keine kritischen Sachen sind, die da ablaufen.

Und wenn man beim Dialog ein Nein bekommt und CanClose auf False setzt und trotzdem speichert, dann ist das ja kein Zwang, man kann ja auch nur speichern, wenn das Schließen zugelassen wird...

// EDIT:
Ach ja: ganz andere Idee noch:
Wenn es sich hier nicht um das Hauptformular handelt, dann wird beim Schließen des Programms das OnClose oder OnCloseQuery gar nicht ausgeführt!

Muetze1 26. Jun 2009 11:54

Re: IniFile wird nicht erstellt!
 
Zitat:

Zitat von jaenicke
Und wenn man beim Dialog ein Nein bekommt und CanClose auf False setzt und trotzdem speichert, dann ist das ja kein Zwang, man kann ja auch nur speichern, wenn das Schließen zugelassen wird...

Nun ja, wenn ich vorher meinen USB Stick (oder früher Disketten) vor dem Speichern wieder einlegen muss, da zwischenzeitlich gewechselt/abgezogen, dann hat man im OnCloseQuery ein Problem.

Und mit dem abwürgen beim OnClose: man sollte dort nicht anfangen noch grossartig langwierige Dinge zu erledigen. Aber bei einem abwürgen durch den Benutzer gibt es eh keine sicheren Datenbestände, dass ist dem Nutzer bei solchen Aktionen wohl klar, sonst würde er nicht anfangen "Programm trotzdem schließen", etc. Windows weist ihn genau auf diese Gefahren hin...

Popov 26. Jun 2009 12:02

Re: IniFile wird nicht erstellt!
 
Wenn aber der Rechner (automatisch) runtergefahren wird, dann wird zwar eine Abfrage in OnCloseQuery berücksichtigt, aber nur paar Sekunden. Dann wird das Programm abgeschossen. Ohne Abfrage würde alles gespeichert.

Also Wenns gibt es jede Menge. Letztendlich muß man selbst entscheiden was besser für einen ist.

Luckie 26. Jun 2009 13:11

Re: IniFile wird nicht erstellt!
 
Ich glaube, ihr diskutiert gerade am Problem vorbei.

Brunhilde 26. Jun 2009 14:44

Re: IniFile wird nicht erstellt!
 
Versuch mal ParamStr(0) statt Application.ExeName

Popov 26. Jun 2009 16:35

Re: IniFile wird nicht erstellt!
 
Das ist das Gleiche. Das Eine ist das Result des Anderen.

DeddyH 26. Jun 2009 17:20

Re: IniFile wird nicht erstellt!
 
Vielleicht ist es nicht ganz durchgekommen, aber ist das Ereignis auch zugewiesen?

jaenicke 26. Jun 2009 17:22

Re: IniFile wird nicht erstellt!
 
PAUSE :mrgreen:

Warten wir doch einfach mal bis aramintaros selbst etwas dazu schreibt. :stupid:

DeddyH 26. Jun 2009 17:26

Re: IniFile wird nicht erstellt!
 
Ja eben, da fange ich doch beim Naheliegendsten an :stupid:

aramintaros 26. Jun 2009 21:49

Re: IniFile wird nicht erstellt!
 
Zitat:

Zitat von Luckie
Welches Betriebssystem? Und warum ist das Ini.Free; nicht im finally-Block wo es hingehört?

Deine Sektionen heißen genauso wie die Schlüssel, das finde ich etwas ungewöhnlich. Eventuell liegt das Problem darin begründet.

Ich habe festgestellt, daß es ab einer bestimmten Stelle des "end" nicht darauf ankommt wo das "Ini.Free" steht. Normalerweiser steht es bei mir auch im "Finally".
Das BS ist XP-Pro + Delphi09, steht aber auch oben drinne, lies mal genauer :roll:
Die Namen der Sektionen und Schlüssel spielen keine Rolle, es kommt nur auf die Variablen an.
S.U.
Danke :lol:

aramintaros 26. Jun 2009 21:51

Re: IniFile wird nicht erstellt!
 
Zitat:

Zitat von mirage228
Schalt sonst mal die Debug DCUs an und setze einen Haltepunkt auf die FormClose Routine (wird sie überhaupt aufgerufen?)

Viele Grüße

Genau das ist das Ding, die "OnFormClose"-Routine greift nicht. :drunken:

aramintaros 26. Jun 2009 22:00

Re: IniFile wird nicht erstellt!
 
Ab Delphi 2009 scheint das "OnClose"-Event nur noch das ausschließliche "Beenden" -> "Application.Terminate" zu beinhalten.
Das "OnCloseQuery" berücksichtigt anscheinend viele ButtonClicks. :lol:
Seitdem ich ein par Anweisungen dem "OnCloseQuery" übergebe, klappt es ohne Fehlermeldung :hello:

Luckie 26. Jun 2009 22:14

Re: IniFile wird nicht erstellt!
 
Zitat:

Zitat von aramintaros
Ab Delphi 2009 scheint das "OnClose"-Event nur noch das ausschließliche "Beenden" -> "Application.Terminate" zu beinhalten.
Das "OnCloseQuery" berücksichtigt anscheinend viele ButtonClicks. :lol:

Wie? OnClose und OnCloseQuery werden immer ausgelöst, wenn das Formular geschlossen wird, also Close aufgreufen wird. Mit den Ereignisbehandlungsroutinen von Schaltflächen hat das nichst zu tun.

aramintaros 26. Jun 2009 22:42

Re: IniFile wird nicht erstellt!
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von aramintaros
Ab Delphi 2009 scheint das "OnClose"-Event nur noch das ausschließliche "Beenden" -> "Application.Terminate" zu beinhalten.
Das "OnCloseQuery" berücksichtigt anscheinend viele ButtonClicks. :lol:

Wie? OnClose und OnCloseQuery werden immer ausgelöst, wenn das Formular geschlossen wird, also Close aufgreufen wird. Mit den Ereignisbehandlungsroutinen von Schaltflächen hat das nichst zu tun.

Da empfehle ich dir mal genau nach zu lesen, D09 bedient nur nur noch den "OnClose" mit seinem Ereignis "OnClose". Es gibt nichts mehr, was da noch zwischenpasst. Das "OnCloseQuery" bietet aber Raum für jede Procedure, und seit dem ich das benutze, funktionieren die Routinen auch wieder.

Luckie 26. Jun 2009 23:49

Re: IniFile wird nicht erstellt!
 
Zitat:

D09 bedient nur nur noch den "OnClose" mit seinem Ereignis "OnClose". Es gibt nichts mehr, was da noch zwischenpasst.
Tut mir leid, ich habe keine Ahnung, was du meinst. Was soll das heißen "bedient" und wo soll noch was zwischen passen?

Aber davon mal abgesehen, denke ich nicht, dass sich Delphi2009 anders verhält als Vorgängerversionen, denn wenn das so wäre, wäre dies ein Albtraum bei der Portierung von Projekten auf Delphi2009.

Und irgendwie gefälltt mir dein Ton nicht, in dem du mit mir redest. Ich wollte nur helfen und dann werde ich von dir so abgekanzelt. Was soll das? Hier zum Beispiel:

Zitat:

Die Namen der Sektionen und Schlüssel spielen keine Rolle, es kommt nur auf die Variablen an.
Woher willst du das wissen? Oder hast du uns im ersten Posting nicht alles gesagt, was du rausgefunden hast? Denn der Code war soweit in Ordnug, bis eben auf die Tatsache, dass Sektionen und Schlüssel bei dir identisch sind, was eben etwas ungewöhnlich ist.

aramintaros 27. Jun 2009 09:15

Re: IniFile wird nicht erstellt!
 
Zitat:

Und irgendwie gefälltt mir dein Ton nicht, in dem du mit mir redest. Ich wollte nur helfen und dann werde ich von dir so abgekanzelt. Was soll das? Hier zum Beispiel:

Zitat:

Die Namen der Sektionen und Schlüssel spielen keine Rolle, es kommt nur auf die Variablen an.
Woher willst du das wissen? Oder hast du uns im ersten Posting nicht alles gesagt, was du rausgefunden hast? Denn der Code war soweit in Ordnug, bis eben auf die Tatsache, dass Sektionen und Schlüssel bei dir identisch sind, was eben etwas ungewöhnlich ist.
1) Es tut mir leid, wenn du das Gefühl hast daß ich dich abkanzle. Das ist nicht so gemeint. Ich entschuldige mich dafür und hoffe du bist nicht sauer auf mich. Warscheinlich fehlt der Tonfall zum geschriebenen, ich bin dankbar für jede Unterstützung.
2) Und das mit den Sections habe ich ausprobiert, das Programm nimmt beim starten nur die gewünschten Variablen, egal wie die Sectionen benannt werden.
3) Habe mich vertan, :oops: ich meinte nicht die "OnCloseQuery-Routine" es ist die ComboBox "OnDestroy". Da finde ich alle ButtonClicks wieder und der übergebe ich auch die "WriteIni-procedure". Da wird sie jedenfalls geschrieben.


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