0

我的 Firemonkey Delphi XE3 项目遇到了一个奇怪的问题,我在 OSX 10.8.3 上测试了该应用程序。

通常当鼠标光标移动到文本上时,它看起来:

在此处输入图像描述

但是在应用程序调用打开一个标准对话框之后,我再次将鼠标光标移到文本上,它看起来像这样:

在此处输入图像描述

我怀疑这个问题是由于 Retina 显示器造成的,因为我的朋友在非视网膜 mac 上测试过它,它看起来不错,我的 macbook 支持视网膜,我遇到了这个问题..

有什么想法可以解决这个问题吗?

4

1 回答 1

0

这种“错误”实际上与 FM2 中所做的更改有关(您提到了 XE3/FM2,但问题被标记为 XE2/FMX),但它有时也发生在 FMX 应用程序中。解决方案是简单地调用repaint()标签上的函数。ShowMessage为简单起见,我将假设,但只要您处理 UI 中的任何内容(消息框、面板、矢量形状等),这同样适用。

ShowMessage('My Message');
Label1.Repaint;

使用 repaint() 应该是您在适当时使用的东西。这是一个繁重的操作(一般来说),你应该自由地使用它。一般准则;

  • 仅在必要时使用
  • 如果您只需要重绘 1 个子组件,则只需重绘该组件
  • 如果需要重绘许多子组件,请改为重绘父组件
  • 重绘应该用在效果的父组件上而不是效果本身上(即在TLabel代替上TGlowEffect

实际上,我已经将整个应用程序的界面放在 TLayout 或 TRectangle 中,颜色为 claNull。这样,我可以在一次调用中重新绘制整个界面。然后,我将各个主要部分分成子 TLayouts(例如警报栏),然后如果我需要对其进行动画处理(例如,当有新消息时滑入视图中),可以选择在计时器上重新绘制它。

于 2013-09-05T11:53:40.653 回答