Delphi TTaskDialog 位置打开

Ste*_*veS 1 delphi ttaskdialog

通过 Delphi 10.2.3:TTaskDialog 始终在屏幕中心打开,并且由于它没有 Position 属性,因此似乎没有直接的方法来覆盖该行为。我希望我所有的 TTaskDialogs 都定位在 poMainFormCenter。没有编写 TTaskDialog 的替代品,有没有办法强制这种行为?

And*_*and 7

您可能不知道该Flags属性和tfPositionRelativeToWindow标志:

如果设置,[该] 任务对话框相对于 [其] 父窗口居中。

with TTaskDialog.Create(Self) do
  try
    Caption := Self.Caption;
    MainIcon := tdiNone;
    Title := 'Do you want to create a new batch of frogs?';
    CommonButtons := [tcbYes, tcbNo];
    Flags := [tfPositionRelativeToWindow];
    Execute;
  finally
    Free
  end;
Run Code Online (Sandbox Code Playgroud)

严格来说,这是相对于父窗体而不是主窗体定位任务对话框的,但我怀疑这正是您真正想要的。

任务对话框在其父窗体上方居中的屏幕截图

tfPositionRelativeToWindow标志映射到TDF_POSITION_RELATIVE_TO_WINDOW底层 API 调用的标志TaskDialogIndirect

指示任务对话框相对于 hwndParent 指定的窗口定位(居中)。如果未提供标志(或未指定 hwndParent 成员),则任务对话框相对于监视器定位(居中)。