AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VCL TTaskDialog Z-Order Problem

Ein Thema von TurboMagic · begonnen am 4. Jun 2022 · letzter Beitrag vom 4. Jun 2022
Antwort Antwort
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#1

VCL TTaskDialog Z-Order Problem

  Alt 4. Jun 2022, 11:20
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#2

AW: VCL TTaskDialog Z-Order Problem

  Alt 4. Jun 2022, 12:22
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 4. Jun 2022 um 12:32 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#3

AW: VCL TTaskDialog Z-Order Problem

  Alt 4. Jun 2022, 13:01
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?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:09 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