![]() |
WM_KEYDOWN wird nicht aufgerufen
Delphi-Quellcode:
Seltsames verhalten wieder.function WndProc(WinHandle: HWND; Msg: UINT; wP: WParam; lP: LParam): longint; stdcall; begin case Msg of WM_KEYDOWN: begin if wP = VK_ESCAPE then DestroyWindow(WinHandle); end; WM_TIMER: SetImage(WinHandle); WM_NCHITTEST: begin Result := HTCAPTION; exit; end; WM_DESTROY: begin PostQuitMessage(0); Result := 0; exit; end; end; Result := DefWindowProc(WinHandle, Msg, wP, lP); end; Wenn ich ESC drücke wird WM_KEYDOWN nicht aufgerufen die anderen Tasten funktionieren aber. |
AW: WM_KEYDOWN wird nicht aufgerufen
Bitte wer es testen will.
Das
Delphi-Quellcode:
ersetzen mit
WM_KEYDOWN:
begin if wP = VK_END then DestroyWindow(WinHandle); end;
Delphi-Quellcode:
geht bei mir nicht Taste geht aber in anderen Programmen.
WM_KEYDOWN:
begin if wP = VK_ESCAPE then DestroyWindow(WinHandle); end; EDIT: Leider geht die dglOpenGL Unit nicht mit 64Bit deshalb habe ich die richtige Angehängt. Einfach die alte ersetzen. Manifest kann man in uMain deaktivieren ist nicht nötig! Habe noch eine andere Texture hochgeladen. |
AW: WM_KEYDOWN wird nicht aufgerufen
Scheint niemand eine Lösung zu haben. Hmmm...
Das einzige was mit ESC funktioniert ist folgender Code.
Delphi-Quellcode:
Warum WM_KEYDOWN jetzt nicht geht keine Ahnung.
// WM_KEYDOWN:
// begin // if wP = VK_END then // DestroyWindow(WinHandle); // end; WM_COMMAND: begin case LoWord(wP) of IDCANCEL: DestroyWindow(WinHandle); end; end; Wie kann ich denn nun alle Keys mit WM_KEYDOWN behandeln? |
AW: WM_KEYDOWN wird nicht aufgerufen
In meinen Programmen geht das schon. Allerdings nutze ich nicht WM_KEYDOWN via Message.
Voraussetzung ist die Einstellung bei "KeyPreview". Beispiel:
Delphi-Quellcode:
Wobei "KeyPreview:= true;" in FormCreate gesetzt werden kann.
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
// ssShift Die Taste Umschalt wird gedrückt gehalten. // ssAlt Die Taste Alt wird gedrückt gehalten. // ssCtrl Die Taste Strg wird gedrückt gehalten. // ssLeft Die linke Maustaste wird gedrückt gehalten. // ssRight Die rechte Maustaste wird gedrückt gehalten. // ssMiddle Die mittlere Maustaste wird gedrückt gehalten. // ssDouble Es wurde mit der Maus doppelgeklickt. begin //if (key = VK_F1) or ((key = VK_F1) and (ssAlt IN Shift)) then {F1-taste - funktioniert nur, wenn Form1.KeyPreview:= true; } //ShowInfoDialog(Form1); if key = VK_ESCAPE then {ESC-taste - funktioniert nur, wenn Form1.KeyPreview:= true; } Close; end; |
AW: WM_KEYDOWN wird nicht aufgerufen
Danke.. Arbeite mit NonVcl und habe das Problem gefunden.
Es liegt an meiner Message Queue.
Delphi-Quellcode:
So geht's
while GetMessage(Msg, 0, 0, 0) do
begin if IsDialogMessage(MainHandle, Msg) = False then // verhindert die Weitergabe einiger Key Eingaben (VK_RETURN, VK_ESCAPE) begin TranslateMessage(Msg); DispatchMessage(Msg); end; end;
Delphi-Quellcode:
Habe die Base WinMain aus einem anderen Projekt übernommen und nicht darauf geachtet.
while GetMessage(Msg, 0, 0, 0) do
begin TranslateMessage(Msg); DispatchMessage(Msg); end; Kommt davon wenn man nicht alles Neuschreibt. :) Na ja jetzt habe ich 2 Möglichkeiten. |
AW: WM_KEYDOWN wird nicht aufgerufen
Kleine Abwandlung des vorherigen Projekt.
Einige Funktionen aus meiner Library mit Copy\Paste eingefügt man muß ja nicht alles neu schreiben. ;) GradientPaintDC, MyAlphaBlend, DisplayDC, SetupAlphaChannel Lösche die Anhänge nächste Woche wieder. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 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