Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Wann INI schreiben? (https://www.delphipraxis.net/157866-wann-ini-schreiben.html)

SvenLittkowski 27. Jan 2011 18:37

Wann INI schreiben?
 
Hi,

ich will die Positionskoordinaten meines Programmes in eine eigene INI schreiben. Wann ist der beste Zeitpunkt dafür? Bei "OnClose" des Windows?

Hatte dies versucht (Programm wird beendet mit Knopfdruck, der "Application.Terminate" aufruft, und diese dann hoffentlich "OnClose"), aber nichts wurde hineingeschrieben. Bin nun auf Fehlersuche.

Luckie 27. Jan 2011 18:44

AW: Wann INI schreiben?
 
Wenn du dein Auto zum Anhalten vor die Wand fährst, kannst du da nach auch kein Licht mehr ausschalten. Schließe dein Programm vernünftig mit der Methode Close des Formulars, dann werden auch die entsprechenden Ereignisse beim Schließen aufgerufen und du kannst im OnClose Ereignis deine Fensterposition speichern.

Sunlight7 27. Jan 2011 19:11

AW: Wann INI schreiben?
 
Am besten in der Nachricht WM_MOVE die Koords speichern, wenn Dein Programm (oder Windoof :stupid: ) abstürtzt ist die Position immer gesichert, auf try except nicht vergessen, sonst wirds nervig, falls ein Fehler auftritt ;)

Chemiker 27. Jan 2011 19:45

AW: Wann INI schreiben?
 
Hallo SevenLittkowski,

laden der Form-Daten im Create-Ereignis des Forms und das Speichern der Form-Daten im Destory-Ereignis des Forms. Angefangen wird mit Standard-Werte die beim Auffinden der Ini-Datei überschrieben werden.

Bis bald Chemiker

himitsu 27. Jan 2011 19:51

AW: Wann INI schreiben?
 
Ansonsten OnDestroy, also kurz bevor das Fenster freigegeben wird.

OnClose gehört zum OnCloseQuery und Letzeres wird nicht aufgerufen, wenn die ganze Anwendung beendet wird, damit es nicht zu einer Blockierung kommt.

PS: Windows stürzt nie ab, also wozu unnötig oft alles Speichern? :stupid:
Nja, aber nun mal ernst ... bei solchen "unwichtigen" Daten, welche da gespeichert werden sollen, ist es nicht notwendig dabei zu übertreiben ... OnDestroy reicht doch aus (so oft stürzt Windows nun auch nicht ab) oder man schließt eben das Fenster so, daß OnClose aufgerufen wird (siehe Luckie).

Chemiker 27. Jan 2011 19:55

AW: Wann INI schreiben?
 
Hallo himitsu,

habe ich doch geschrieben.

Bis bald Chemiker

himitsu 27. Jan 2011 20:03

AW: Wann INI schreiben?
 
:shock: deinen Beitrag hatte ich garnicht gesehn

Hobby-Programmierer 27. Jan 2011 20:19

AW: Wann INI schreiben?
 
Warum werden die Daten nicht gleich bei Positionsänderung des Fensters geschrieben :gruebel:

himitsu 27. Jan 2011 20:22

AW: Wann INI schreiben?
 
Zitat:

Zitat von Hobby-Programmierer (Beitrag 1077761)
Warum werden die Daten nicht gleich bei Positionsänderung des Fensters geschrieben :gruebel:

Mal so als Tipp: Wie oft wird denn wohl OnMouseMove aufgerufen, wenn man das Fenster verschiebt?
(jedenfalls nicht nur einmal)

Chemiker 27. Jan 2011 20:30

AW: Wann INI schreiben?
 
Hallo Hobby-Programmierer,

warum soll man jede Positionsänderung des Fensters auf die Festplatte schreiben? Das würde meiner Meinung nach doch nur Zeitverlust bringen und keinen wirklichen Mehrwert für die Anwendung.

Bis bald Chemiker

Sir Rufo 27. Jan 2011 20:31

AW: Wann INI schreiben?
 
Und wenn der Anwender mit einer SSD das spitz kriegt bekomme ich sogar noch ne Rechnung von dem ;)

Hobby-Programmierer 27. Jan 2011 20:33

AW: Wann INI schreiben?
 
Ich habe jetzt kein Delphi hier, aber gibt es kein Event das nach verschieben des Formulars eintritt? Man könnte aber auch auf MouseDown und Positionswechsel prüfen. Aber kann schon sein das dies zu umständlich wird.
Edit: Mit dem schreiben bei jedem Positionswechsel meinte ich eigentlich das schreiben nachdem der durchgeführt wurde und nicht das jede Pixelverschiebung gespeichert wird.

himitsu 27. Jan 2011 20:35

AW: Wann INI schreiben?
 
Zitat:

Zitat von Hobby-Programmierer (Beitrag 1077766)
Man könnte aber auch auf MouseDown und Positionswechsel prüfen. Aber kann schon sein das dies zu umständlich wird.

Könnte man, aber ja ... genau deswegen einfach nur einmal am Ende.

Wenn es um Daten geht, welche auf jedenfall unbedingt sofort auf den Datenträger müssen, dann muß man auch nochmal größere Geschütze auffahren, um auch noch die Cache auszuschalten, denn nicht alles, was man in eine Datei reinschreibt, ist auch sofort auf dem Datenträger.

Sir Rufo 27. Jan 2011 20:36

AW: Wann INI schreiben?
 
Und selbst wenn, warum ständig speichern wo das Fenster gerade hängt, wo doch nur die letzte Position vorm Schließen relevant ist.

Ob bei einem Programmabsturz dann das Fenster an der alten Position erscheint ist ja wohl gesch*** drauf

Hobby-Programmierer 27. Jan 2011 20:38

AW: Wann INI schreiben?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1077768)
Und selbst wenn, warum ständig speichern wo das Fenster gerade hängt, wo doch nur die letzte Position vorm Schließen relevant ist.

Ob bei einem Programmabsturz dann das Fenster an der alten Position erscheint ist ja wohl gesch*** drauf

Jo, stimmt schon. Hab wahrscheinlich wieder zu kompliziert gedacht.:oops:

Chemiker 27. Jan 2011 20:39

AW: Wann INI schreiben?
 
Hallo Hobby-Programmierer,

warum hast Du den Bedenken, kurz vor dem zerstören des Forms die letzte Position abzuspeichern?

Bis bald Chemiker

Matze 27. Jan 2011 21:24

AW: Wann INI schreiben?
 
Zitat:

Zitat von Hobby-Programmierer (Beitrag 1077766)
Ich habe jetzt kein Delphi hier, aber gibt es kein Event das nach verschieben des Formulars eintritt?

Das wurde doch alles schon geschrieben und zwar in Beitrag #2: WM_MOVE
Zitat:

Zitat von msdn
WM_MOVE Message
Sent after a window has been moved.

Laufende Schreibzugriffe etc. pp, was hier diskutiert wird, trifft da nicht zu, da die Message nicht während des Verschiebens aufgerufen wird, sondern danach. So verstehe ich das "after" zumindest. Getestet habe ich es nicht.

SvenLittkowski 28. Jan 2011 06:52

AW: Wann INI schreiben?
 
Hallo alle zusammen,

vielen super Dank für all Eure Antworten! Ein tolles Forum, gute Hilfsbereitschaft.

Der Hinweis, daß OnClose nicht immer aufgerufen wird, hat mir sehr weitergeholfen.

Ich will die Koordinaten des Programmes speichern, damit es sich das nächste Mal beim Laden dorthin positioniert, wo der Benutzer es das letzte Mal hatte, denn ich gehe davon aus, daß jener Standort vom Benutzer bevorzugt wird. Ich will dem Benutzer also Bequemlichkeit und Komfort geben.

Sunlight7 28. Jan 2011 08:01

AW: Wann INI schreiben?
 
Zitat:

Zitat von Matze (Beitrag 1077776)
Laufende Schreibzugriffe etc. pp, was hier diskutiert wird, trifft da nicht zu, da die Message nicht während des Verschiebens aufgerufen wird, sondern danach. So verstehe ich das "after" zumindest. Getestet habe ich es nicht.

Stimmt, WM_MOVE wird nur einmal nach dem ziehen ausgelöst.

Wenn Du Deiner Kundschaft bequemlichkeit anbieten willst, wäre vllt. WM_SIZE für Dich noch interessant, falls Dein Fenster in der Größe veränderbar ist.

SvenLittkowski 29. Jan 2011 09:24

AW: Wann INI schreiben?
 
Erneut ein nettes Dankeschön. Aber nein, es ist nicht veränderbar in der Größe, aber Du denkst mit, finde ich gut. :-)


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