【问题标题】:TListView - when mouse is over an item, do not draw that blue rectangle. How?TListView - 当鼠标悬停在一个项目上时,不要绘制那个蓝色矩形。如何?
【发布时间】:2013-03-01 17:04:15
【问题描述】:

当鼠标移到 TListView 项目上方时,会出现蓝色轮廓(见图)。我将如何删除它?

我知道的唯一方法是手动绘制所有项目...但也许有更简单的方法?试过 HotTrack=False,没有帮助:(

【问题讨论】:

  • 为什么要违背平台的标准做事方式?那个蓝色矩形对用户来说是一个非常重要的提示。它告诉他如果他点击那里然后会选择什么。
  • 我为项目使用自定义背景颜色,当将鼠标移到项目上时,这个背景消失了。
  • 啊,好吧,你很好,你保留了它的功能,只是以不同的方式实现它。

标签: delphi drawing tlistview custom-draw


【解决方案1】:

那幅画是由特殊的探险家主题完成的。通过在TCustomListView.CreateWnd 中调用SetWindowTheme(Handle, 'explorer', nil) 将其添加到控件中。如果您使用默认主题,那么您将无法获得热跟踪。您可以通过还原资源管理器窗口主题来实现这一点。例如在插入器类中:

type
  TListView = class(ComCtrls.TListView)
  protected
    procedure CreateWnd; override;
  end;
....    
procedure TListView.CreateWnd;
begin
  inherited;
  SetWindowTheme(Handle, nil, nil);
end;

当然,您也会失去探索者主题添加的所有其他内容。

据我所知,没有通知消息可以让您禁止浏览器主题热跟踪绘画。

【讨论】:

  • 嗯...更改整个控件主题有点矫枉过正 :) 我想我需要自己实现完整的项目绘制。
  • 看起来我不必重新发明轮子,这个 SO 问题有绘制项目的代码:stackoverflow.com/questions/5519742/… 以防其他人会寻找这个:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多