Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Form mit Alt + Tab verliert Fokus (https://www.delphipraxis.net/175216-form-mit-alt-tab-verliert-fokus.html)

RedOne 6. Jun 2013 16:14

Form mit Alt + Tab verliert Fokus
 
Hallo zusammen

Mich plagt zur Zeit folgendes Problem:
Ich habe ein Hauptformular. Von diesem aus öffne ich ein weiteres Formular (nicht Modal). Beide Forms sollen nun in der Taskleiste angezeigt werden und beide Forms sollen auch über Alt + Tab sichtbar sein.
Dies löse ich so:
Delphi-Quellcode:
procedure TFormSecond.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; //Damit wird das Form in der Taskbar sichtbar
  Params.WndParent := GetDesktopWindow; //Damit wird das Form mit Alt + Tab auswählbar
end;
Wenn ich nun aber auf meinem Unterformular (TFormSecond) gewisse Komponenten aufrufe, die ein zusätzliches Fenster öffnen, verliere ich den Fokus.
Als Beispiel: Ich habe auf dem Unterformular eine TRichView-Komponente mit ihrem eigenen Color-Dialog.
Klicke ich auf den Button, erscheint unterhalb des Buttons die Farbpalette, wie man sie aus Word kennt. Nun aber wird der Fokus auf das Hauptformular gesetzt. Das heisst, ich sehe das Hauptformular und darüber die Farbpalette.
Der gleiche Effekt tritt z.B. auch mit dem SynEdit auf, wenn die Completion geöffnet wird.
Das ganze liegt an dieser Zeile: Params.WndParent := GetDesktopWindow;
Entferne ich sie, funktioniert alles wunderbar. Nur verliert das Fenster seine Alt+Tab-Funktionalität.

Über Vorschläge würde ich mich freuen :-)

Herzlichen Dank!
RedOne

DeddyH 6. Jun 2013 16:31

AW: Form mit Alt + Tab verliert Fokus
 
Könnte das evtl. mit Application.MainFormOnTaskbar zusammenhängen?

Der schöne Günther 6. Jun 2013 16:34

AW: Form mit Alt + Tab verliert Fokus
 
Versuche mal WndParent auf Null anstatt auf das Desktop-Fenster zu setzen.

Medium 6. Jun 2013 20:49

AW: Form mit Alt + Tab verliert Fokus
 
Wenn WndParent ein HWND (Fenster-Handle) ist (was ich ohne nachzuschlagen vermute), dann sind 0, bzw. NULL und GetDesktopWindow zumindest in allen bisherigen Windows Versionen identisch - zumindest in ein und dem selben Usercontext. Wie es bei "fremden" Desktops aussieht, weiss ich nicht.

RedOne 7. Jun 2013 07:21

AW: Form mit Alt + Tab verliert Fokus
 
Hallo zusammen

Merci für Eure Antworten.
MainFormOnTaskbar hat auch nicht den gewünschten Effekt gebracht. Ebenso WndParent auf 0 zu setzen.
Verflixtes Ding...

[Edit]
Einen Workaraound habe ich anhand dieses Threads gefunden:
http://www.delphipraxis.net/114471-h...rdergrund.html
Ich mache nun eine Interceptorklasse die ich in der entsprechenden Komponente einbinde. Nicht besonders schön, da ich eingekauften Code verändern muss, aber wens anders nicht geht...

Delphi-Quellcode:
type
  TfrmRVBase = class( BaseRVFrm.TfrmRVBase )
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

implementation

procedure TfrmRVBase.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.WndParent := 0;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz