Delphi:在 vista 和 aero 中以标题形式绘制文本,如 windows 7
如何在 vista 上使用 aero 像 Windows 7 一样在标题栏中绘制文本(使用 onClick 事件)?
替代文本 http://img529.imageshack.us/img529/3643/immaginembl.jpg< /a>
delphi.about.com 中的示例不适用于带有 aero 的 Vista。 你有什么想法?
谢谢大家。
对不起,我的英语不好。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
在非客户区域绘图会导致玻璃自动禁用。 MS Office 所做的就是扩大客户区域以覆盖边界。 请查看 这篇 WPF 文章 获取建议。 恐怕您必须自己将 API 调用转换为 Delphi。
Drawing in the nonclient region causes glass to be disabled automatically. What MS Office does is expand the client region to cover the borders. Look at the "Drawing in the NC area with glass" section of this WPF article for suggestions. You'll have to convert the API calls to Delphi yourself, I'm afraid.
关键是 API DwmExtendFrameIntoClientArea
你应该声明并像这样得到它:
您还已经将代码移植到这里: 带 Aero 的半透明窗口
没有框架,您这样称呼它:
有了这一切,实现您想要的应该不难。
The key is the API DwmExtendFrameIntoClientArea
You shoud declare it and get it like this:
You also have the code already ported here: Translucent Windows with Aero
To have not frame you call it like:
With all this it should not be to hard to achieve what you want.
在 Delphi 2009 中,TLabel 有一个名为“GlowSize”的新属性(查看帮助)。 为此属性设置正值的效果非常接近您似乎正在寻找的效果(标签文本周围的发光)。
In Delphi 2009 TLabel has a new property called "GlowSize" (see help). The effect of setting a positive value for this property is very close to what you seem to be looking for (a glow around label's text).
您需要对 DwmSetWindowAttribute 进行一次调用,之后一切都非常简单。 检查这篇文章,特别是评论:) http://delphihaven.wordpress.com/2010/04/22/setting-up-a-custom-title-bar-reprise/
You need a single call to DwmSetWindowAttribute, after that everything is quite simple. Check this article and especially comments :) http://delphihaven.wordpress.com/2010/04/22/setting-up-a-custom-title-bar-reprise/
扩展框架是一回事,绘制 Vista 主题(发光)文本是另一回事。 使用 Canvas.TextOut 或 DrawText 时,输出会弄乱 alpha,这将给您带来效果。 您需要使用 DrawThemeTextEx。 以下是在玻璃上绘制文字的正确步骤:
Extending the frame is one thing and drawing Vista themed (glowing) text is another. With Canvas.TextOut or DrawText the output has messed up alpha which will give the effect you got. You need to use DrawThemeTextEx. Heres the correct procedure for drawing text on glass:
感谢您提供 DrawTextOnGlass 代码。 但为了按预期工作,我需要替换
DrawThemeTextEx
中的b.handle
b.canvas.handle
Thanks for DrawTextOnGlass code. But to work as expected, I needed to replace
b.handle
b.canvas.handle
inDrawThemeTextEx