Zitat von
schöni:
Delphi-Quellcode:
DoBreakRun := False;
while Windows.GetMessage(Msg, 0, 0, 0) and not DoBreakRun do
begin
Windows.TranslateMessage(msg);
Windows.DispatchMessage(msg);
end;
Wes Grundes benutzt du eine Boolen-Variable? Dazu ist doch WM_QUIT da, um die Nachrichtenschleife abzubrechen?!
Zitat von
schöni:
Die Variable Window(1) ist doch laut Delphi Hilfe definiert. Nach meinem Verständnis müßte ich doch, falls die Variable Windows nicht ordnungsgemäß initialisiert ist, eine
Exception kriegen. Krieg ich aber nicht! Stattdessen bleibt mein Programm an der WHILE-Anweisung einfach stehen, wie ich mit dem integrierten Debugger festgestellt habe. Ich müßte doch hier, falls keine Message ankommt, weiterspringen. Wenn Messages anliegen, was ich mal voraussetze, da ja der Befehlszähler an der While Schleife stehen bleibt, müßte ich bis zum Eintreffen von Alt+F4 ständig TranlateMessage->DispatchMessage->GetMessage abarbeiten
Zeigst du denn das Fenster vorher auch an? Ansonsten kann ich dir sagen warum keine Nachrichten ankommen *g*
Bei den Stilen fehlt WS_VISIBLE und das folgende ist total unsinnig. Wozu würde man Nullen dort stehen lassen?
Zitat von
schöni:
WindowStyleExTable: array[TGfxWindowType] of LongWord = (
WS_EX_APPWINDOW, // wtWindow
WS_EX_APPWINDOW, // wtBorderlessWindow
0, // wtPopup
0, // wtBorderlessPopup
WS_EX_PALETTEWINDOW, // wtToolWindow
0); // wtChild
Zitat von
schöni:
(1) Und in diesem Codeteil kommt die Variable Window vor, die ich oben erwähnt habe:
Window ist höchstwahrscheinlich eine Eigenschaft (Property) der Klasse. Da du die Klasse ja selber geschrieben hast, solltest du das doch auch wissen. Genaugenommen sollte Window sogar ein Kindfenster der Instanz von TMainWindow sein.
Zitat von
schöni:
Kann es sein, das in TranslateMessage/DipatchMessage die besagte Variable Window, statt des Unitbezeichners Windows zur Auffindung der
API Funktionen, dort stehen muß, wie wenn diese Unterprogramme zum konkreten Fenster gehören, das die Message(s) abarbeitet?
Nein.
Zitat von
schöni:
Oder ist oben der Unitbezeichner richtig?
Soweit ich es sehen kann schon.
Ansonsten ist dir schon bewußt, daß man nur eine Nachrichtenschleife pro Thread haben kann?! Du gibst uns zuwenig um wirklich helfen zu können, wobei Low-Level-
VCL-Programmierung sowieso nicht mein Ding ist. Mindestens die Typendefinition deiner Klasse müßte noch her.