加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi XE2 TLabel发光引起屏幕左上角的图形问题

发布时间:2020-12-15 04:26:54 所属栏目:大数据 来源:网络整理
导读:自从从XE移植到XE2的应用程序我注意到一个奇怪的错误,只是打开ide或运行应用程序的形式,一个白色的方框绘制在屏幕的左上角(out of the form)将鼠标悬停在窗口上方.我跟踪到TLabel,只是放弃一个在表单上,??并将Glowsize设置在0以上导致问题. 我重新安装并更新
自从从XE移植到XE2的应用程序我注意到一个奇怪的错误,只是打开ide或运行应用程序的形式,一个白色的方框绘制在屏幕的左上角(out of the form)将鼠标悬停在窗口上方.我跟踪到TLabel,只是放弃一个在表单上,??并将Glowsize设置在0以上导致问题.

我重新安装并更新到最后一个XE2 update3,并且仍然出现问题.任何人都知道发生了什么事情?

解决方法

该问题从TCustomLabel.AdjustBounds开始,通过屏幕的设备上下文和标志DT_CALCRECT调用DoDrawText.因此,如果在设备上下文中有任何画面,它将被画在屏幕上. DT_CALCRECT标志应该阻止,但是Vcl.Themes.TUxThemeStyle.DoDrawText中的DrawThemeTextEx调用似乎忽略了DT_CALCRECT LOptions.dwFlags DTT_CALCRECT并且绘制到设备上下文中,它只应该计算所需的矩形.我不知道为什么DrawThemeTextEx做了(但),但它是一个起点.

更新1:
Delphi 2009似乎不受此影响,但也调用DrawThemeTextEx.唯一的区别是,所有未使用的选项记录都是零,而在Delphi XE2中,它们包含垃圾.也许DrawThemeTextEx需要它们为零.

更新2:
Delphi 2009和XE2之间的区别在于,在Delphi 2009中,不仅指定了DTT_CALCRECT,而且还包括DTT_COMPOSITE.

在德尔福2009年,DTT_COMPOSITE始终设定:

Options.dwFlags := DTT_TEXTCOLOR or DTT_COMPOSITED or DTT_GLOWSIZE;

而在XE2中,只有标签涂在玻璃上才会设置标志:

if csGlassPaint in ControlState then
    Include(LFormat,tfComposited);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读