【问题标题】:Can the Delphi TTaskDialog be made to use VCLStyles?Delphi TTaskDialog 可以使用 VCLStyles 吗?
【发布时间】:2012-05-04 07:21:53
【问题描述】:

可以让 Delphi TTaskDialog 使用 VCLStyles 吗?

【问题讨论】:

  • TTaskDialog 完全是Windows Vista up dialog,恐怕这很难做到(如果可能的话)。我的建议是创建你自己的(此外,你会得到好处,你自己的任务对话框也可以在下面的 Windows XP 上工作)。
  • Arnaud 为 Windows XP 及更低版本创建了 task dialog simulation
  • Tlama / Arnaud - StackOverflow 社区的知识和乐于助人再次让我震惊!

标签: delphi delphi-xe2 vcl-styles ttaskdialog


【解决方案1】:

我刚刚向VCL Styles Utils 库添加了TTaskDialog 支持。

要激活此功能,您需要将这些单元添加到您的项目中。

  • Vcl.Styles.Utils.Forms
  • Vcl.Styles.Utils.SysStyleHook
  • Vcl.Styles.Utils.SysControls
  • Vcl.Styles.Hooks

更多信息可以在这个blog post找到。

【讨论】:

    【解决方案2】:

    AFAIK,正如 TLama 在他的评论中所说,这个 TTaskDialog 只是直接映射 Windows API,你不能直接做 VCL 样式。

    但是您可以通过使用类似于 described in this article about using VCL Styles within a TWebBrowser 的 hack 来做到这一点。

    我怀疑这将是一些工作,甚至是不可行的。您将不得不破解 Windows 创建的所有组件,这并不容易。 Task Dialog API 没有提供完整详细的 COM 接口,有很多回调,随时可以被覆盖,就像 TWebBrowser 一样。

    如果您使用我们的Open-Source Task Dialog emulation code 作为开始,您可以强制将我们的仿真层与纯 VCL 组件一起使用。在这种情况下,使用样式将很容易。不要忘记向我们发送反馈和补丁,以便让单元得到改进!我认为,其他用户也希望受益于如此出色的功能。这就是开源的伟大之处:你开始一些东西,发布,然后contributions are integrated,结果会变得更好。 :)

    【讨论】:

    • +1ed,我不想偷学分 :-) 无论如何,我发现了一个奇怪的定位问题。设置Form.Canvas.TextWidth 会将位置更改为较高的负值,随后对表单大小的每次更改也会降低位置值,因此表单永远不会可见。我不明白为什么会发生这种情况,因为这不应该影响表单位置恕我直言。
    • @TLama “设置 Form.Canvas.TextWidth” 是什么意思?
    • SynTaskDialog.pas,第 653 行。我在已删除的帖子中调用了 Execute,在该行中,Form.LeftForm.Top 已更改为负值(非常奇怪反正)。顺便提一句。我已经设置了 poScreenCenter 位置的呼叫者表单(这取决于某种方式,不明白为什么)。
    • 抱歉,这是一个错字,我的意思是说getting the Form.Canvas.TextWidth 没有设置,当然:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多