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?

War es hilfreich?

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,

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top