Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VCL TTaskDialog Z-Order Problem (https://www.delphipraxis.net/210748-vcl-ttaskdialog-z-order-problem.html)

TurboMagic 4. Jun 2022 10:20

VCL TTaskDialog Z-Order Problem
 
Hallo,

ich habe in 11.1 ein kleines komisches Problem mit einem TTaskDialog.

Gegeben:
- VCL-Anwendung mit einem Datenmodul, welches einen TTaskDialog enthält
- Neben dem Hauptformular gibt es 2 weitere Dialoge, beide:
BorderStyle bsSizeable
DefaultMonitor dmActiveForm
PopupMode pmNone
Position poOwnerFormCenter
Scaled true
Beide zur Laufzeit erzeugt und mittels ShowModal angezeigt
In beiden Forms gibt es jeweils einen Button, der diesen TaskDialog mittels Execute anzeigt.
Es nutzt auch nix, die Execute Variante mit dem Handle als Parameter zu benutzen.

In der einen Form klickt man auf den Button und der TaskDialog wird wie gewünscht im Vordergrund angezeigt.
In der anderen Form wird er immer hinter der Form angezeigt und kann nur mittels Alt-Tab hervorgeholt werden.
Eine QP Suche nach evtl. bekannten Problemen ist gerade scheinbar nicht möglich, irgendwie streikt das QP ein bisschen...

Grüße
TurboMagic

himitsu 4. Jun 2022 11:22

AW: VCL TTaskDialog Z-Order Problem
 
Hier geht es ohne Probleme und ist immer vorne, egal ob mit oder ohne Handle.
Delphi-Quellcode:
procedure TForm8.Button1Click(Sender: TObject);
begin
  //TaskDialog1.Execute;
  TaskDialog1.Execute(Self.Handle);
end;

procedure TForm8.Button2Click(Sender: TObject);
begin
  TForm8.Create(Self).Show;
end;
Allerdings stimmt was mit dem PopupMode nicht.
Alle neuen Fenster sind immer vorne, so als wenn wie die MainForm als PopupParent verwenden würden.




Das mit dem "Parent" ist richtig so.
Bei vielen VCL-Dialogen hat die Execute-Funktion zwar einen Parent-Parameter,
aber oftmals wird Dieser intern garnicht verwendet, weil die jeweilige API keinen Parent unterstützt.

Beim TaskDialog wird der Parent zwar durchgereicht, aber man lese mal den Kommentar.
Delphi-Quellcode:
  TASKDIALOGCONFIG = record
    cbSize: UINT;
    hwndParent: HWND;                    // incorrectly named, this is the owner window, not a parent.
Obwohl die Hilfe MSDN-Library durchsuchenTASKDIALOGCONFIG was Anderes sagt.
Zitat:

Handle to the parent window. This member can be NULL.
Womöglich wird der Wert nur für die XY-Position verwendet, aber nicht für Z? (TDF_POSITION_RELATIVE_TO_WINDOW aka tfPositionRelativeToWindow)

TurboMagic 4. Jun 2022 12:01

AW: VCL TTaskDialog Z-Order Problem
 
Eine Suche in QP nach TTaskDialog brachte schon mal nichts.
Und auch einbe Suche nach PopupMode oder Popup hat auf die Schnelle nichts sinnvolles ergeben.

Du scheinst dich da besser auszukennen. Kannst du mal versuchen deinen Verdacht mittels einer
kleinen Demo zu bestätigen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 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