[Q][Gelöst!] Hidden-Form + QueryEndSession
-
- Beiträge: 38
- Registriert: Di 18. Nov 2014, 22:50
- OS, Lazarus, FPC: Windows 7 [x64]; Lazarus 1.6.4 [i386-win32]; FPC 3.0.2 [win32 i386]
- CPU-Target: 64Bit
[Q][Gelöst!] Hidden-Form + QueryEndSession
Hey Leute,
folgends:
ich habe mir eine kleine Anwendung gebaut die Regeläßig meine mit Blender gerenderten Bilder sichert. Es ist nähmlich sehr schön zu sehen wie sich die Szenen über die Zeit/Arbeit verändern =)
Nun habe ich eine Funktion eingebaut die Windows am herunterfahren hindert, solange die Bilder noch gesichert werden.
Das klappte auch alles wunderbar, bis ich eine Funktion eingebaut habe mit der man die Application in den Tray minimieren kann.
Dann fährt Windows nähmlich sofort herunter und ignoriert den Rückgabewert von QueryEndSession (Cancel := TRUE)...
Hat jemand das selbe Problem und/oder vielleicht eine Lösung parat?
Ich danke schonmal Herzlichst im vorraus!
Mit freundlichen Grüßen 'TerribleCode'
folgends:
ich habe mir eine kleine Anwendung gebaut die Regeläßig meine mit Blender gerenderten Bilder sichert. Es ist nähmlich sehr schön zu sehen wie sich die Szenen über die Zeit/Arbeit verändern =)
Nun habe ich eine Funktion eingebaut die Windows am herunterfahren hindert, solange die Bilder noch gesichert werden.
Das klappte auch alles wunderbar, bis ich eine Funktion eingebaut habe mit der man die Application in den Tray minimieren kann.
Dann fährt Windows nähmlich sofort herunter und ignoriert den Rückgabewert von QueryEndSession (Cancel := TRUE)...
Hat jemand das selbe Problem und/oder vielleicht eine Lösung parat?
Ich danke schonmal Herzlichst im vorraus!
Mit freundlichen Grüßen 'TerribleCode'
Zuletzt geändert von TerribleCode am Do 20. Nov 2014, 16:02, insgesamt 1-mal geändert.
Re: [Q] Hidden-Form + QueryEndSession
Erstmal ein herzliches Willkommen im Forum!
Bei mir funktioniert maxi- und minimiert, mit und ohne Focus:
- eine TApplicationProperties auf das Formular
- Eventhandler für OnQueryEndSession erstellen
- und:Win7 64bit, Lazarus 32bit
Bei mir funktioniert maxi- und minimiert, mit und ohne Focus:
- eine TApplicationProperties auf das Formular
- Eventhandler für OnQueryEndSession erstellen
- und:
Code: Alles auswählen
procedure TForm1.ApplicationProperties1QueryEndSession(
var Cancel: Boolean);
begin
Cancel:=True;
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 38
- Registriert: Di 18. Nov 2014, 22:50
- OS, Lazarus, FPC: Windows 7 [x64]; Lazarus 1.6.4 [i386-win32]; FPC 3.0.2 [win32 i386]
- CPU-Target: 64Bit
Re: [Q] Hidden-Form + QueryEndSession
Danke, echt nice das es ein deutsches Lazarus-Forum gibt!
Nunja... Genau so wie du es beschrieben hast, habe ich es gemacht ^^
Ich minimiere das Fenster mit:
es ist dann auch nicht mehr in der Taskleiste zu sehen (dafür ist ja das Tray-Icon).
Klappt es dann auch noch bei dir?
Nunja... Genau so wie du es beschrieben hast, habe ich es gemacht ^^
Ich minimiere das Fenster mit:
Code: Alles auswählen
Form1.HIDE;
Klappt es dann auch noch bei dir?
Re: [Q] Hidden-Form + QueryEndSession
Ja, sorry, war zu schnell mit lesen. In der Tat geht das bei mir dann auch nicht. Ich hatte nur minimiert getestet.
Ich habe noch erfolglos http://stackoverflow.com/questions/2553 ... n-shutdown probiert. Kann Dir da leider nicht helfen.
Ich habe noch erfolglos http://stackoverflow.com/questions/2553 ... n-shutdown probiert. Kann Dir da leider nicht helfen.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: [Q] Hidden-Form + QueryEndSession
So hatte mich doch noch interessiert, warum das nicht ging. Gemäß http://msdn.microsoft.com/en-us/library/ms700677.aspx muss ab Windows Vista eine Api gestartet werden, die von nicht Top-Level-Anwendungen heraus das runterfahren verhindert (das passiert wohl, wenn man das Formular.Hide aufruft).
Folgender Ansatz funktioniert bei mir:
- eine TApplicationProperties auf das Formular
- Eventhandler für OnQueryEndSession erstellen
- und:
Folgender Ansatz funktioniert bei mir:
- eine TApplicationProperties auf das Formular
- Eventhandler für OnQueryEndSession erstellen
- und:
Code: Alles auswählen
uses ..., Windows;
...
function ShutdownBlockReasonCreate(hWnd: HWND; Reason: LPCWSTR): Bool; stdcall; external user32;
function ShutdownBlockReasonQuery(hWnd:HWND; pwszBuff: LPWSTR; pcchBuff: PDWORD): Bool; stdcall; external user32;
function ShutdownBlockReasonDestroy(hWnd: HWND): Bool; stdcall; external user32;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShutdownBlockReasonCreate(Handle, 'Bitte warten, bis alle Daten gespeichert sind!');
Hide;
Sleep(30000); //Speichere hier Deine Daten!
ShutdownBlockReasonDestroy(Handle);
end;
procedure TForm1.ApplicationProperties1QueryEndSession(var Cancel: Boolean);
begin
Cancel:=True;
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 38
- Registriert: Di 18. Nov 2014, 22:50
- OS, Lazarus, FPC: Windows 7 [x64]; Lazarus 1.6.4 [i386-win32]; FPC 3.0.2 [win32 i386]
- CPU-Target: 64Bit
[Gelöst!] Hidden-Form + QueryEndSession
Cool, das funktioniert!
Mir ist nur nicht ganz klar was da genau passiert...
Werde die Tage mal auf die suche gehen, nach Tutorials, zum Thema API´s.
Danke Michl, für deine schnelle Hilfe!
Mir ist nur nicht ganz klar was da genau passiert...

Werde die Tage mal auf die suche gehen, nach Tutorials, zum Thema API´s.

Danke Michl, für deine schnelle Hilfe!
