Delphi ListView提示闪烁

时间:2014-07-22 08:02:23

标签: delphi

鼠标移动时,提示始终闪烁,即使在同一行也是如此。尝试设置doublebuffered,但没有结果。尝试也将代码移动到鼠标事件上,但仍然是相同的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在每次鼠标位置更改时触发。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

如果您使用的是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;

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