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.