AGB  ·  Datenschutz  ·  Impressum  







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

Frame schluckt WM_KEYDOWN-Message

Ein Thema von tigerman33 · begonnen am 4. Sep 2005 · letzter Beitrag vom 14. Sep 2005
Antwort Antwort
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#1

Frame schluckt WM_KEYDOWN-Message

  Alt 4. Sep 2005, 22:34
Hallo an alle,

wenn ich ein Frame auf eine Form setze und dem OnKeyDown oder OnKeyUp-Event des Forms eine Handling-Methode zuweise, scheint das Frame die entsprechenden Messages irgendwie zu "verschlucken".

Ich habe dazu auch schon probiert, die WndProc des Frames zu überschreiben und die Nachricht quasi manuell an das Form weiterzuleiten. Ergebnis: Wenn ich die Weiterleitung mit SendMessage oder PostMessage mache funktioniert es nicht (d.h. der Eventhandler des Forms wird nicht aufgerufen), mache ich das stattdessen über die Methode Perform (die ja direkt die WindowProc des Forms aufruft ohne den Umweg über die Windows Message Queue) geht alles einwandfrei.

Jemand eine Ahnung woran das liegen könnte?

Falls es einen Unterschied machen sollte: Ich nutze Delphi 2005 Professional.

Danke im Voraus!

PS: Hmmm, bin mir nicht ganz sicher ob das hier das richtige Forum ist. Wenn nicht, verschiebts bitte. (Z.B. in die Kategorie Bug Reports )
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Frame schluckt WM_KEYDOWN-Message

  Alt 6. Sep 2005, 09:00
Hab noch mal ein wenig weiter damit experimentiert.

Das Frame schluckt nicht nur Keyboard messages, sondern auch z.B. eine WM_LBUTTONDOWN und andere Mouse-Messages.

Daraufhin hab ich dem ganzen jetzt einen eigenen Eventhandler für WM_KEYUP und WM_KEYDOWN verpasst (protected Methoden KeyUp und KeyDown überschrieben), und zack, es klappt. Meistens. Denn wenn ich die Tasten Pfeiltaste hoch oder Pfeiltaste runter drücke, springt er gar nicht in die Methode rein. Bei anderen Tasten aber schon. Und Windows feuert definitiv eine Message ab (das habe ich nachgesehen).

Und jetzt der Clou:
Ich habe ein TApplicationEvents auf mein Form gepackt und in OnMessage diesen Code geschrieben:
Delphi-Quellcode:
if Msg.message = WM_KEYDOWN then
  SendMessage(Frame1.Handle, WM_KEYDOWN, VK_UP, 0);
Jetzt springt er dann tatsächlich in den entsprechenden Eventhandler. Obwohl ich ja nichts gemacht hab, als einfach nochmal eine Message zu senden.

Warum macht er das?!?! Was ist denn daran jetzt anders, wenn ich selbst eine Message verschick als wenn Windows das macht? Und warum ignoriert er das WM_KEYDOWN nur bei bestimmten Parametern in der Message-Struktur.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Frame schluckt WM_KEYDOWN-Message

  Alt 9. Sep 2005, 18:21
*push*

Hab jetzt alle Updates installiert und eigentlich gehofft damit würde sich das Problem geben. Falsch gedacht.

Wenn hier nicht jemand eine hat, werde ich das ganze wohl demnächst als bug reporten...
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Frame schluckt WM_KEYDOWN-Message

  Alt 9. Sep 2005, 18:56
Hat die Frame denn kein OnKeyDown - Event ?
Dann schreib deinen Quelltext da rein, dann müsste es gehen.
Das mit dem KeyDown, KeyUp und KeyPress funktioniert sogar auch nicht wenn ein Button auf der Form ist weil die Message dann irgendwie auf andere Kontroll gerichtet ist..
Michael
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Frame schluckt WM_KEYDOWN-Message

  Alt 10. Sep 2005, 09:37
Nee, das event gibts leider nicht. Außerdem hab ich ja auch direkt die Message abgefangen, und das geht ja auch nicht. Manche Messages kommen ja auch an. WM_KEYDOWN mit PageUp z.B. geht durch, WM_KEYDOWN mit Pfeiltaste runter wird ignoriert. Komisch.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Frame schluckt WM_KEYDOWN-Message

  Alt 10. Sep 2005, 11:22
Der Frame schluckt da gar nix. Wenn du einen Button auf dem Form hast und dieser den Focus hat dürftest du auch die Mousemessages nicht auf dem Form erhalten weil diese eben nicht an die Form sondern an den Button gehen. Hast du es schon mit TApplicaitonEvents versucht (oder TAppEvents, weiß nicht genau wie das heißt).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#7

Re: Frame schluckt WM_KEYDOWN-Message

  Alt 11. Sep 2005, 10:53
Also:

-ein Button ist nicht auf dem Form, und auch nicht auf dem Frame. Den Frame nutze ich quasi als "Komponente" im groben Stile einer Listview, auf dem ich zur Laufzeit "Items" aus Shapes, Labels und Images erstelle.
-ApplicationEvents habe ich schon ausprobiert. Hab da die Message abgefangen und mal analysiert. Die geht schon ans richtige Handle (nämlich das des Frames, der btw auch Screen.ActiveControl--oder ist das Application.ActiveControl?--ist).
-Manche WM_KEYDOWN messages gehen ja auch durch. Wenn ich z.B. PageUp oder PageDown drücke kommt die Message an, bei den Pfeiltasten nicht.
-Ursprünglich hatte ich den EventHandler ja auch im Ereignis des Forms. D.h. der Frame hätte die Message bekommen, nicht verarbeitet und nach oben weitergereicht.

Das Ding treibt mich nochmal zum Wahnsinn. Unter D7 hat's ja auch funktioniert.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#8

Re: Frame schluckt WM_KEYDOWN-Message

  Alt 14. Sep 2005, 11:35
Die OH sagt dazu bei TForm.KeyPreview folgendes:

Zitat von OH:
Diese Einstellung wirkt sich nicht auf Navigationstasten (Pfeiltasten, TAB usw.) aus, da diese keine Tastaturereignisse auslösen
Was soll mir das denn jetzt sagen? It's not a bug, it's a feature?

Wobei ganz nebenbei ebendiese OH dann zum Thema "Tastaturbotschaften" eben genau diese Abfrage macht! Also

If Key in [VK_UP,VK_DOWN,VK_LEFT,VK_RIGHT,VK_NEXT] etc etc Und früher gings ja auch. Passiert dieser Fehler eigentlich nur bei mir, oder könnt ihr den reproduzieren?
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  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 10:05 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