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