![]() |
Wechseln zwischen Fenstern derselben Anwendung
Hallo,
ich habe eine Anwendung geschrieben, bei der gleichzeitig mehrere Fenster geöffnet sein können (Grafikfenster, Eingabefenster). Wenn der Nutzer alle Fenster maximiert, dann stellt sich das Problem, wie er zwischen den Fenstern wechseln kann. Das Windows-Tastenkürzel alt+tab erlaubt nur das Wechseln zwischen verschiedenen Anwendungen, nicht aber zwischen verschiedenen Fenstern derselben Anwendung. In der Taskbar zeigt sich für meine Anwendung auch nur ein Symbol unabhängig davon, wie viele Fenster geöffnet sind. Gibt es für dieses Problem eine elegante Lösung? |
AW: Wechseln zwischen Fenstern derselben Anwendung
Moin,
wenn du mit folgendem Überschreib in allen Kinderfenstern, die es betreffen soll, herumhantierst, dann bekommst du in der Taskleiste ein per ALT+TAB wechselbares Fenster.
Delphi-Quellcode:
TForm1 = class(TForm)
... protected procedure CreateParams(var Params: TCreateParams); override; ... end;
Delphi-Quellcode:
procedure TForm1.CreateParams(var Params: TCreateParams);
begin inherited CreateParams(Params); Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; Params.WndParent := 0; end; |
AW: Wechseln zwischen Fenstern derselben Anwendung
Cool, funktioniert prima, Danke!
|
AW: Wechseln zwischen Fenstern derselben Anwendung
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. :shock: Hmmm, und wie geht das bei MDI? (dachte da ging es auch schon) Letztes Fenster:
Delphi-Quellcode:
Die letzten Fenster: (Beispiel mit Strg+Tab und ohne Reverse-Shift und Rollover)
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;
Delphi-Quellcode:
Demo: neue VCL-Anwendung, ein/mehrere neue VCL-Forms (mit Visible=True) und TApplicationEvents.OnShortCut (z.B. auf die MainForm)
//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; |
AW: Wechseln zwischen Fenstern derselben Anwendung
In MDI-App geht das von Haus aus mit Strg+Tab.
Gruß |
AW: Wechseln zwischen Fenstern derselben Anwendung
... und für alles andere gibts das Fenster Menü.
Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz