双击TVirtualTreeView(TVirtualStringTree)标头时如何阻止排序符号隐藏

时间:2011-11-28 03:06:53

标签: delphi header delphi-7 double-click virtualtreeview

我使用VirtualStringTree控件作为列表视图并使用排序功能。但是,当我双击VirtualStringTree标题时,排序方向符号会隐藏,直到我再次单击标题。

可以禁用该行为吗?

我尝试但不起作用的事情:

  • 我搜索过属性但找不到相关设置
  • 我已将双击标题事件链接到点击标题事件

我的环境是Delphi 2007 Pro,Windows 7 Pro 64位。

1 个答案:

答案 0 :(得分:1)

我在双击和隐藏排序三角形方面遇到了同样的问题,而我只是想要一个简单的向上/向下切换而没有别的。不幸的是,在最新的VirtualTreeView(4.8.7)中也出现了这个问题。

以下是修复此问题的一些代码 - 在OnHeaderClick事件(不是OnHeaderDblClick!)中添加类似的内容。

相关行是if HitInfo.Column = NoColumn then Exit;,它修复了双击问题。您可能会或可能不会将其余代码用于您自己的目的,但它可能对其他人有用。其余的解释在代码注释中。

您不需要定义OnHeaderDblClick事件 - 如果不需要它可能为空,因此您可能希望从代码中删除它。

<强>更新

同时阅读TLama的评论,因为它似乎是5.0.0版本。此修复可能无法按预期运行。虽然目前的版本确实如此。

  {**
    A column header of a VirtualStringTree was clicked: Toggle the sort direction
  }
  procedure TMainForm.vstHeaderClick(Sender: TVTHeader; HitInfo: TVTHeaderHitInfo);
  begin

  // Don't call sorting procedure on right click
  // Some list-headers have a contextmenu which should popup then.
  if HitInfo.Button = mbRight then Exit;

  // Beginning with VT's r181, this proc is also called when doubleclicking-to-autofit
  // Seems buggy in VT as this suddenly calls it with Column=-1 in those cases.
  // See also issue #1150
  if HitInfo.Column = NoColumn then Exit;

  if Sender.SortColumn <> HitInfo.Column then Sender.SortColumn := HitInfo.Column
  else if Sender.SortDirection = sdAscending then Sender.SortDirection := sdDescending
  else Sender.SortDirection := sdAscending;

  Sender.Treeview.SortTree( HitInfo.Column, Sender.SortDirection );
  end;