![]() |
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:
Wenn ich nun aber auf meinem Unterformular (TFormSecond) gewisse Komponenten aufrufe, die ein zusätzliches Fenster öffnen, verliere ich den Fokus.
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; 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 |
AW: Form mit Alt + Tab verliert Fokus
Könnte das evtl. mit Application.MainFormOnTaskbar zusammenhängen?
|
AW: Form mit Alt + Tab verliert Fokus
Versuche mal WndParent auf Null anstatt auf das Desktop-Fenster zu setzen.
|
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.
|
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: ![]() 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 07:53 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