![]() |
Messages bei nonVCL?
Hallo.
Ich möchte folgenden Code in nonVCL (also nur noch DPR, keine DFMs mehr) portieren:
Delphi-Quellcode:
Ich habe es bereits mit Application.OnTerminate probiert, aber es hat nicht funktioniert. Sobald ich nicht mehr mit Forms arbeite (TMainForm.MeineProzedur wird zu MeineProzedur), funktioniert es nicht mehr. Meldung kann ich nochmal nachreichen.
type
TMainForm = class(TForm) private procedure WMEndSession(var Msg : TWMEndSession); message WM_ENDSESSION; end; Dieser Zusatz "message WM_ENDSESSION" funktioniert auch nur innerhalb eines Forms. Muss ich nun mit einer Schleife arbeiten, die mittels PeekMessage das Shutdown-Signal abfängt? Dann müsste ich aber extra dafür einen Thread anlegen, weil der Programmfluss sich ja primär mit einer anderen Aufgabe beschäftigt. :? Gruß blackdrake |
Re: Messages bei nonVCL?
Nun ja, du brauchst eine Nachrichtenschleife und eine Fensterprozedur und damit verbunden eben ein Fenster, da diese Nachricht an toplevel Fenster verschickt wird.
|
Re: Messages bei nonVCL?
Nachrichtenschleife, ja. Aber die Anwendung arbeitet ohne Fenster im Hintergrund. Hatte ich vergessen dazu zu sagen. Ist also alles unsichtbar, deswegen will ich keine Forms.
Ist eine Nachrichtenschleife in einer nonVCL unabdingbar? Muss diese in einen Thread, damit das Programm primär was anderes arbeiten kann? |
Re: Messages bei nonVCL?
Kommt drauf an wie du nonVCL definierst. An was ist die Nachrichtenschleie gebunden, wenn nicht an ein Fenster?
|
Re: Messages bei nonVCL?
Wenn ich keine sichtbaren Elemente habe, gibt's auch kein Fenster und dann habe ich quasi nur Pascal. Das ist absolutes nonVCL :wink:
Delphi-Quellcode:
Für Nachrichtenschleife könnte ich einen Thread aufmachen. An ein Fenster kann ich es ja nicht binden. Aber ist das überhaupt professionell, extra einen Thread aufzumachen, der lediglich die Aufgabe hat, was zu machen, sobald das Shutdown-Signal kommt? Oder gibt's was alternatives?
program xyz;
uses SysUtils, ...; procedure HerunterfahrenEvent(); begin // Aktionen beim Herunterfahren end; begin // ToDo: Hier Arbeit machen // Problem: HerunterfahrenEvent() beachten; // Ende des Programms end; |
Re: Messages bei nonVCL?
Du könntest ein Fenster erzeugen, dieses aber nicht anzeigen.
|
Re: Messages bei nonVCL?
Windows bietet eine Möglichkeit, Konsolen-Handler zu registrieren, mit denen man u.A. strg-c, Beenden des Konsolenfensters und Herunterfahren abfangen kann.
![]() |
Re: Messages bei nonVCL?
ansonten hilft auch sich ein unsichtbares Top-Level-Fenster zu erstellen,
oder besser gleich ein MessageOnly-Fenster. |
Re: Messages bei nonVCL?
Prinzipiell werden Nachrichten ja an Threads verschickt und auch wenn ein Thread mehrere Fenster hat, hat der Thread nur eine Nachrichtenschleife. Folglich ist es durchaus möglich eine Nachrichtenschleife in einem Thread einzurichten und per PostThreadMessage() an den Thread zu richten. Dabei sollte klar sein, daß der Unterschied zwischen Post* und Send* hier auch gilt, es aber keine Send*-Variante gibt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 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