Oder die Behandlung nur für das eigene Programm anpassen,
wenn man nicht will, dass das eigene Programm mehrmals im Alt+Tab auftaucht.
* Tab / Shift+Tab = Next Control
* Strg+Tab / Strg+Shift+Tab = Next Tab Control (PageControl)
* Strg+Alt+Tab / Strg+Shift+Alt+Tab = Next Form (InApp) ???
* Alt+Tab / Alt+Shift+Tab = Next Application
* Win+Tab = Task View
Komisch, hätte gedacht, dass Windows da schon lange was hat, für MultiWindow-Apps.
Hmmm, und wie geht das bei
MDI? (dachte da ging es auch schon)
Letztes Fenster:
Delphi-Quellcode:
procedure TForm6.ApplicationEvents1ShortCut(var Msg: TWMKey; var Handled: Boolean);
var
i: Integer;
begin
if (Msg.CharCode = VK_TAB) and (GetKeyState(VK_CONTROL) < 0) then begin
i := 1;
while i < Screen.FormCount do
if Screen.Forms[i].Visible and IsWindowEnabled(Screen.Forms[i].Handle) then begin
Screen.Forms[i].SetFocus;
Break;
end else
Inc(i);
end;
end;
Die letzten Fenster: (Beispiel mit Strg+Tab und ohne Reverse-Shift und Rollover)
Delphi-Quellcode:
//private
// FFormSwitchStart: Integer;
procedure TForm6.ApplicationEvents1ShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
if (Msg.CharCode = VK_CONTROL) and (Msg.KeyData and $40000000 = 0) then
FFormSwitchStart := 1;
if (Msg.CharCode = VK_TAB) and (GetKeyState(VK_CONTROL) < 0) then begin
while FFormSwitchStart < Screen.FormCount do
if Screen.Forms[FFormSwitchStart].Visible and IsWindowEnabled(Screen.Forms[FFormSwitchStart].Handle) then begin
Screen.Forms[FFormSwitchStart].SetFocus;
Inc(FFormSwitchStart);
Break;
end else
Inc(FFormSwitchStart);
end;
end;
Demo: neue
VCL-Anwendung, ein/mehrere neue
VCL-Forms (mit Visible=True) und TApplicationEvents.OnShortCut (z.B. auf die MainForm)