Einzelnen Beitrag anzeigen

chrschn
(Gast)

n/a Beiträge
 
#4

Re: DLL-Fenster erhält nicht alle Keyboard-Events?! GEHT JET

  Alt 18. Nov 2004, 23:50
Zitat von chrschn:
Zitat von chrschn:
Was allerdings (noch) nicht funktioniert:
  • [TAB] innerhalb des DLL-Fensters wechselt nicht den Focus innerhalb desselben, sondern springt zum nächsten Control der Hostanwendung
  • Der Focuswechsel durch [TAB] in der Hostanwendung überspringt das DLL-Fenster
  • MenuAccels im DLL-Fenster funktionieren nicht, also z. B. Button-Captions wie '&OK' können nicht mit [ALT]+[O] aktiviert werden
Eher zufällig bin ich noch auf eine Lösung für das letzte der genannten Probleme gestoßen, nämlich die Menu-Accelerators. Ich habe meine Prozedur zum anzeigen des DLL-Fensters um einen var-Parameter erweitert. Dieser liefert der Host-Anwendung das Handle des DLL-Fensters zurück.
Da ich jetzt schonmal das Handle des DLL-Fensters hatte, lag es nahe, auch gleich den Focus-Wechsel wie oben beschrieben mit einzubauen. Dazu habe ich das Panel, in dem die DLL-Fenster jeweils angezeigt werden, fokusierbar gemacht (Panel.TabStop := True). Dann habe ich für das Panel folgenden OnEnter-Event-Handler geschrieben:
Delphi-Quellcode:
var
  DllDlgHandle: THandle

[...]

procedure TConfigForm.ConfigPanelEnter(Sender: TObject);
begin
  if (DllDlgHandle > 0) then
     Windows.SetFocus(DllDlgHandle);
end;
Das aktiviert das DLL-Fenster und auch dessen Komponente, falls vorher schon eine ausgewählt war. Nun kann ich mit [TAB] in der Host-Anwendung auch in das DLL-Fenster springen. Allerdings springt das nächste [TAB] zum nächsten Control der Host-Anwendung, und nicht zum nächsten Control des DLL-Fensters. Naja, man kann wohl nicht alles haben

Schönen Gruß,

Christian
  Mit Zitat antworten Zitat