Wenn Sie die Arbeit mit der VCL gewohnt sind, dann werden Sie sicher wissen, dass Sie mit der TAB-Taste von einem Control zum nächsten wechseln können. Und dass Sie die unterstrichenen Buchstaben eines Controls in Verbindung mit der ALT-Taste als Shortcut benutzen können, um die entsprechende Funktion zu aktivieren.
Ohne VCL sieht die Sache anders aus. Wenn Sie den Beispielen gefolgt sind und diese getestet haben, dann werden Sie merken, dass genau diese Funktionalität fehlt.
Um sie nachzurüsten, müssen wir die Funktion "IsDialogMessage" aus dem Dialog-Tutorial ein wenig zweckentfremden. Nun ist diese Funktion zwar für Dialogfelder gedacht, aber in unserem Fall ist sie hilfreich. Da sie das Handle eines Fensters erwartet, müssen wir unser, mit "CreateWindowEx" erzeugtes Hauptfenster angeben:
hwndMain := CreateWindowEx(0, ClassName, AppName, WS_CAPTION or WS_VISIBLE or WS_SYSMENU, integer(CW_USEDEFAULT),integer(CW_USEDEFAULT),WindowWidth, WindowHeight, 0, 0, hInstance, nil);
while GetMessage(msg,0,0,0) do begin if not(IsDialogMessage({Fenster-Handle ->} hwndMain, msg)) then begin TranslateMessage(msg); DispatchMessage(msg); end; end;
Wenn es sich bei unserer ankommenden Nachricht also um keine Dialognachricht handelt, dann wird sie auf dem normalen Weg weitergereicht und bearbeitet, ansonsten springt der Dialogmanager ein und sorgt dafür, dass unser Programm nun auch auf die Tabulatortaste reagiert.
Dazu ist allerdings noch ein Schritt erforderlich: Sie müssen allen Controls, die Sie auf diesem Weg ansteuern wollen, das Stilattribut WS_TABSTOP zuordnen. Beispielsweise:
hClose := CreateWindowEx(WS_EX_CLIENTEDGE, 'BUTTON', '&Schließen', WS_VISIBLE or WS_CHILD { neues Stilattribut ->} or WS_TABSTOP, WindowWidth-115, WindowHeight-60, 100, 25, hWnd, IDC_CLOSE, hInstance, nil);
CreateWindowEx(WS_EX_CLIENTEDGE, 'BUTTON', 'Button 1', WS_VISIBLE or WS_CHILD { neues Stilattribut ->} or WS_TABSTOP, 10, 10, 100, 25, hWnd, 0, hInstance, nil);
Wenn Sie das Programm jetzt testen, können Sie die einzelnen Buttons nacheinander mit der TAB-Taste anwählen. Und durch den Dialogmanager funktioniert auch das Schließen über den Button-Shortcut ALT+S.
Ich bitte zu bedenken, dass dies keine offizielle Lösung ist. Es ist mehr ein Patch, wenn Sie die TAB-Funktionalität unbedingt in Ihren selbst erstellten Fenstern benötigen. Und ich habe feststellen müssen, dass es bei Menüs zu Problemen kommen kann, wenn man versucht, mit ALT und dem unterstrichenen Buchstaben das Menü zu öffnen. Manchmal löst auch der Druck von ESC eine willkürlich (?) gewählte Aktion aus.
Wenn möglich, benutzen Sie bitte Dialog-Ressourcen anstelle von Fenstern. Dann können Sie den Dialogmanager des Systems nutzen und müssen sich keine Gedanken über die Implementierung der TAB/ALT-Funktionalität machen.