Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Wechseln zwischen Fenstern derselben Anwendung (https://www.delphipraxis.net/194186-wechseln-zwischen-fenstern-derselben-anwendung.html)

iphi 26. Okt 2017 07:37

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?

Towmuz 26. Okt 2017 07:47

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;

iphi 26. Okt 2017 08:37

AW: Wechseln zwischen Fenstern derselben Anwendung
 
Cool, funktioniert prima, Danke!

himitsu 26. Okt 2017 12:49

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:
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)

stifflersmom 26. Okt 2017 13:45

AW: Wechseln zwischen Fenstern derselben Anwendung
 
In MDI-App geht das von Haus aus mit Strg+Tab.

Gruß

Sherlock 26. Okt 2017 14:16

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