Mit KeyDown-Ereignis in das übergeordnete Fenster der Delphi-Mdi-Anwendung
Frage
Wie bekomme ich das KeyDown-Ereignis für die Arbeit in einem Delphi (2007) MDI-Anwendungen Übergeordnete Fenster, selbst wenn ein Untergeordnetes Fenster den Fokus hat?
Ich möchte implementieren Sie eine shortcut-Taste (F1), die bringt ein Hilfe-Bildschirm in einer MDI-Anwendung, habe ich die KeyDown-Verfahren, um das Übergeordnete MDI-Fenster und aktiviert KeyPreview in der Übergeordneten und Untergeordneten Fenstern, aber es funktioniert nicht wie erwartet.
Wenn ich einen Haltepunkt in der Eltern KeyDown-code, den ich sehen kann, es wird nie ausgeführt, auch gibt es keine untergeordneten Fenster öffnen.Aber wenn ich denselben code, um das untergeordnete Fenster, es funktioniert gut.
Gibt es einen Weg, um das übergeordnete Fenster zu erhalten die Schlüssel Pressen, auch wenn das untergeordnete Fenster hat den Fokus, wie das hinzufügen von code zu 25+ Form Nähte ein wenig verschwenderisch?
Lösung
Ich hatte genau das gleiche Problem in dieser Woche! Ich reparierte sie durch auf der Hauptform eine Aktion in der Aktionsmanager zu schaffen. Diese Aktion öffnet die Hilfedatei und hat den F1-Taste Satz als Abkürzung. Es funktioniert auch für alle untergeordneten MDI-Bildschirme.
Andere Tipps
Sie könnte verwenden Sie ein lokales (globales ist nicht erforderlich) zur Verfügung Tastatur-hook.Sie könnten auch leiten Sie alle Ihr Untergeordneten MDI-Formulare von einem signle-form Basis-Klasse und implementieren Sie es einmal.Sie werden feststellen, dass dieses design kommt in handliches für andere Probleme.
Bearbeiten
Application-wide hotkeys/shortcuts kann auch implementiert werden, mit dem TApplication.OnShortCut-Ereignis.Finden http://delphi.about.com/od/adptips2004/a/bltip0904_3.htm
Die Formel 1 ist bereits die standard-Verknüpfung zur Hilfe, die Trigger TApplication.OnHelp.Vielleicht möchten Sie verwenden, die OnHelp-event?Und wenn Sie HelpFile, HelpContext, HelpType und HelpKeyword Eigenschaften, die Sie wahrscheinlich gar nicht brauchen, um zu implementieren, alle Codes.
Wie bekomme ich das Ereignis KeyDown in einem Delphi (2007) MDI-Anwendungen Geordnetes Fenster zu arbeiten, auch wenn ein Kind Fenster den Fokus hat?
Als eine generische Lösung (für andere Anwendungen als F1 für Hilfe) Ich verwende Code ähnlich wie diese zu stoppen ein keydown Ereignis in der Hauptform. Dies wird alle Schlüssel, egal was, selbst wenn ein untergeordnetes MDI aktiv ist. In diesem Beispiel mache ich das Gegenteil von dem, was Sie zu tun versuchen (Ich möchte, dass die Nachricht von meinem Kind Form behandelt wird anstelle der Hauptform), aber das Konzept den Schlüssel in den Eltern fangen ist gleich).
Application.OnMessage := AppMessage;
procedure TMainForm.Appmessage(var Msg: TMsg; var Handled: Boolean);
var
message: TWMKey;
begin
If (msg.message = WM_KEYDOWN) and
( LoWord(msg.wparam) = VK_TAB ) and
(GetKeyState( VK_CONTROL ) < 0 ) and
Assigned( ActiveMDIChild ) then
Begin
Move( msg.message, message.msg, 3*sizeof(Cardinal));
message.result := 0;
Handled := ActiveMDIChild.IsShortcut( message );
End;
end;
F1-Hilfe Verarbeitung ist in Delphi gebaut, so alles, was Sie tun müssen, ist die Hilfemeldungen richtig handhaben. Dies kann so wenig wie die Hilfe-Datei-Eigenschaft für die Anwendung festlegen. Sie können bestimmte Seiten setzen die Hilfe des Formulars ??? Eigenschaften.
Grundsätzlich verwenden nur das Hilfesystem geliefert und vergessen keydown. Dies ist Delphi -. Sie müssen nicht hart arbeiten,