Delphi TTaskDialog可以使用VCLStyles吗?

4
Delphi的TTaskDialog可以使用VCLStyles吗?

5
TTaskDialog是完全基于Windows Vista或更高版本的对话框,我担心这可能很难实现(如果有可能的话)。我的建议是创建自己的任务对话框(此外,您将获得好处,您自己的任务对话框也可以在Windows XP及以下版本上使用)。 - TLama
Arnaud为Windows XP及以下版本制作了任务对话框模拟。task dialog simulation - TLama
1
Tlama / Arnaud - 我再次惊叹于StackOverflow社区的知识和乐于助人! - mmmm
2个回答

8
我刚刚给VCL Styles Utils库添加了TTaskDialog支持。
如要使用此功能,需要将以下单元添加到您的项目中:
  • Vcl.Styles.Utils.Forms
  • Vcl.Styles.Utils.SysStyleHook
  • Vcl.Styles.Utils.SysControls
  • Vcl.Styles.Hooks
详细信息请参见博客文章

5
据TLama在他的评论中所述,AFAIK,这个TTaskDialog只是直接映射Windows API,你将无法直接使用VCL样式。
但是,您可以通过使用类似于此文章中描述的关于在TWebBrowser中使用VCL样式的方法的黑客来实现此操作。
我怀疑这可能需要一些工作,甚至不可行。您将不得不修改Windows创建的所有组件,这并不容易。任务对话框API没有提供完整和详细的COM接口,也没有很多回调函数可以重写,就像TWebBrowser一样。
如果您使用我们的开源任务对话框仿真代码作为起点,您可以强制使用纯VCL组件与我们的仿真层一起工作。在这种情况下,使用样式将变得容易。不要忘记向我们发送反馈和补丁,以便让该单元得到改进!我认为其他用户也会喜欢这样的好功能。这就是开源的伟大之处:您开始某些事情,发布它,然后贡献被整合,结果变得更好。 :)

+1ed,我不想抢走你的功劳 :-) 无论如何,我发现了一个奇怪的定位问题。设置 Form.Canvas.TextWidth 会将位置更改为高负值,而且每次对表单大小进行的后续更改也会减小位置值,因此表单永远不会变得可见。我不明白为什么会发生这种情况,因为这应该不会影响表单位置。 - TLama
@TLama,“设置Form.Canvas.TextWidth是什么意思?” - Arnaud Bouchez
SynTaskDialog.pas,第653行。我像在我的已删除的帖子中那样调用了Execute,在那一行中,Form.LeftForm.Top被更改为负值(非常奇怪)。顺便说一下,我已经将调用者表单设置为poScreenCenter位置(这在某种程度上取决于情况,不知道为什么)。 - TLama
对不起,是打错字了,我是想说获取Form.Canvas.TextWidth而不是设置,当然 :-) - TLama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接