In meinem TComponent
gibt es einen Punkt, an dem ich Schlüsselereignisse abhören und die ESC
-Schlüssel abfangen und in meiner Komponente verarbeiten, den Tastenanschlag konsumieren / "essen" möchte, so dass zum Beispiel das Eigentümerformular erscheint werde es in diesem Stadium nicht behandeln. Genau wie in TDragObject
, wenn Sie beginnen, ziehen Sie sie und brechen Sie sie ab, indem Sie ESC
drücken.
Problem ist, dass TDragObject
hat AllocateHWnd
, die von ihrem Eigentümer Formular mit CN_KEYDOWN
gemeldet wird. Aber niemand benachrichtigt meine Komponente.
Muss ich das WindowProc
des Formulars durch mein eigenes Formular ersetzen? Wenn ja, wie macht man das dann sozusagen "im Buch"?
Nur um 100% klar zu sein:
%Vor%Ich habe einen kleinen Test gemacht und es scheint zu funktionieren:
%Vor%Ich frage mich, ob dies der richtige / einzige Ansatz ist.
Eine Möglichkeit besteht darin, ein TApplicationEvents
-Objekt in Ihrer Komponente zu erstellen und dann mit dem OnMessage
-Ereignis nach Nachrichten aus der Nachrichtenwarteschlange des Haupt-Threads zu suchen, z. B. Tastenanschläge, bevor der Rest der VCL sie verarbeitet .