【问题标题】:Delphi ListView hint flickersDelphi ListView 提示闪烁
【发布时间】:2014-07-22 08:02:23
【问题描述】:

当鼠标移动时,即使在同一行,提示也会一直闪烁。尝试设置双缓冲,但没有结果。也尝试将代码移动到鼠标事件但仍然相同http://delphi.about.com/od/delphitips2007/qt/listview_hints.htm

procedure TForm1.ListView2InfoTip(Sender: TObject; Item: TListItem;
  var InfoTip: string);
begin
      InfoTip := 'Gracz: ' + InfoTip + #13#10 + hintyStreamyObecne[Item.Index] ;
end;

我正在使用 Delphi XE5。 Listview 放在 PageControl 上。当我为 Application.HintPause 设置非常低的值并选中/取消选中复选框时,我可以在复选框上重现相同的提示闪烁。使用 Application.HintPause 的默认值对 listView 没有帮助。每次鼠标位置更改都会触发事件 ListView2InfoTip。有什么建议吗?

【问题讨论】:

  • 闪烁有多严重。我可以在我自己的应用程序中看到一些,但只是现在你提到了它。
  • 烦人。我上传了视频(鼠标不可见,没有录制更激烈)youtube.com/watch?v=NQf38BM8Kic&feature=youtu.be
  • 这确实很烦人。我有一种感觉,尖端的大小使它比我的更糟。我的只有一行。
  • 是的,很不幸。我总是可以将这些额外的信息移动到弹出菜单下的窗口消息中,但我希望能解决我的问题,因为提示会更好。
  • 我看不到你的简单出路。提示机制深埋在 VCL 中。

标签: delphi


【解决方案1】:

如果您使用的是 Delphi.About.com 的代码,我建议您进行下一个更改:

在那段代码中

li := ListView1.GetItemAt(pt.x, pt.y) ;

用于确定鼠标光标位于哪个项目上。

现在我要做的是创建一些全局变量,或者甚至更好地向 ListView 组件添加另一个字段,我将在其中存储对已显示提示的最后一个 ListItem 的引用。

然后我会添加一个简单的检查,看看上面代码得到的当前 ListItem 是否与我们存储在新变量/字段中的相同。如果不是,则触发显示提示,如果是,则直接退出程序。

var oli: TListItem; //Here we store reference to TListItem to which we shown hint last time

implementation

procedure TMyForm.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

...
begin
  ...
  li := ListView1.GetItemAt(pt.x, pt.y) ;    
  if oli = li then Exit
  else
    oli := li;
    //hint showing code
  end;
end;

此代码更改将确保仅当鼠标移到另一个项目上而不是每次鼠标移动时才会显示新提示。

【讨论】:

  • -1 Hints由框架在不同级别处理,代码非常复杂。您无法通过向单个控件的OnMouseMove 事件添加一些代码来实现提示。
  • OP 引用的来自 delphi.about.com 的 Zarko Gajic 的代码实际上就是这样做的。它动态更改提示内容,然后使用 Application.ActivateHint(Mouse.CursorPos) 强制显示提示; OP 遇到的问题是,每次鼠标移动都会触发它,这会导致由于缓慢的提示重新/绘制而导致闪烁。所以我提出了一种方法来减少提示重新/绘图请求的次数,这应该可以消除闪烁。
  • 如果您在答案中包含完整的解释,那么我会很高兴
  • 好吧,我刚刚写了需要对 Zarko 的代码进行哪些更改。我回家后可以编写完整的代码,因为我目前在工作,但没有访问 Delphi。
  • 我想我早先尝试过减少提示分配,但我不知道我必须从对象检查器中删除“OnInfoTip” - 我只是删除开始结束之间的代码。
猜你喜欢
  • 2012-09-13
  • 2011-04-12
  • 2012-02-01
  • 2011-10-15
  • 1970-01-01
  • 2013-03-27
  • 2023-04-10
  • 2011-09-06
  • 2015-03-18
相关资源
最近更新 更多