Как остановить скрытие символа сортировки при двойном щелчке заголовка TVirtualTreeView (TVirtualStringTree) - PullRequest
2 голосов
/ 28 ноября 2011

Я использую элемент управления VirtualStringTree в качестве списка и использую функции сортировки.Однако, когда я дважды щелкаю заголовок VirtualStringTree, символ направления сортировки скрывается, пока я снова не щелкну заголовок.

Может ли это поведение быть отключено?

Вещи, которые я пробовал, но не работают:

  • Я искал свойства и не могу найти связанный параметр
  • Я связал событие заголовка двойного щелчка с событием заголовка клика

Моя среда DelphiPro 2007, Windows 7 Pro 64bit.

1 Ответ

1 голос
/ 01 декабря 2011

У меня была та же проблема с двойным щелчком мыши и скрытием треугольника сортировки, и вместо этого я просто хотел переключаться вверх / вниз ни с чем.Эта проблема, к сожалению, присутствует и в последней версии 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;
...