AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WM_KEYDOWN wird nicht aufgerufen

Ein Thema von venice2 · begonnen am 18. Okt 2021 · letzter Beitrag vom 19. Okt 2021
Antwort Antwort
venice2
(Gast)

n/a Beiträge
 
#1

WM_KEYDOWN wird nicht aufgerufen

  Alt 18. Okt 2021, 16:01
Delphi-Quellcode:
    
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;
Seltsames verhalten wieder.
Wenn ich ESC drücke wird WM_KEYDOWN nicht aufgerufen die anderen Tasten funktionieren aber.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#2

AW: WM_KEYDOWN wird nicht aufgerufen

  Alt 18. Okt 2021, 16:19
Bitte wer es testen will.
Das
Delphi-Quellcode:
    WM_KEYDOWN:
      begin
        if wP = VK_END then
          DestroyWindow(WinHandle);
      end;
ersetzen mit
Delphi-Quellcode:
    WM_KEYDOWN:
      begin
        if wP = VK_ESCAPE then
          DestroyWindow(WinHandle);
      end;
geht bei mir nicht Taste geht aber in anderen Programmen.

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.

Geändert von venice2 (21. Okt 2021 um 20:27 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: WM_KEYDOWN wird nicht aufgerufen

  Alt 18. Okt 2021, 21:16
Scheint niemand eine Lösung zu haben. Hmmm...
Das einzige was mit ESC funktioniert ist folgender Code.
Delphi-Quellcode:
// WM_KEYDOWN:
// begin
// if wP = VK_END then
// DestroyWindow(WinHandle);
// end;

    WM_COMMAND:
      begin
        case LoWord(wP) of

          IDCANCEL:
            DestroyWindow(WinHandle);
        end;
      end;
Warum WM_KEYDOWN jetzt nicht geht keine Ahnung.
Wie kann ich denn nun alle Keys mit WM_KEYDOWN behandeln?

Geändert von venice2 (18. Okt 2021 um 21:49 Uhr)
  Mit Zitat antworten Zitat
THY4243

Registriert seit: 15. Dez 2012
Ort: München - Untermenzing
40 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: WM_KEYDOWN wird nicht aufgerufen

  Alt 18. Okt 2021, 22:16
In meinen Programmen geht das schon. Allerdings nutze ich nicht WM_KEYDOWN via Message.
Voraussetzung ist die Einstellung bei "KeyPreview".

Beispiel:
Delphi-Quellcode:
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;
Wobei "KeyPreview:= true;" in FormCreate gesetzt werden kann.

Geändert von THY4243 (18. Okt 2021 um 22:20 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#5

AW: WM_KEYDOWN wird nicht aufgerufen

  Alt 18. Okt 2021, 22:29
Danke.. Arbeite mit NonVcl und habe das Problem gefunden.
Es liegt an meiner Message Queue.
Delphi-Quellcode:
      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;
So geht's
Delphi-Quellcode:
      while GetMessage(Msg, 0, 0, 0) do
      begin
          TranslateMessage(Msg);
          DispatchMessage(Msg);
      end;
Habe die Base WinMain aus einem anderen Projekt übernommen und nicht darauf geachtet.
Kommt davon wenn man nicht alles Neuschreibt.

Na ja jetzt habe ich 2 Möglichkeiten.

Geändert von venice2 (18. Okt 2021 um 22:34 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#6

AW: WM_KEYDOWN wird nicht aufgerufen

  Alt 19. Okt 2021, 13:07
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.

Geändert von venice2 (21. Okt 2021 um 20:27 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 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