Как остановить скрытие символа сортировки при двойном щелчке заголовка TVirtualTreeView (TVirtualStringTree)

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

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

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

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

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


person Paul H    schedule 28.11.2011    source источник


Ответы (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;
person Coder12345    schedule 30.11.2011
comment
В версии 4.8.7 OnHeaderDblClick никогда не будет запущен, возникла проблема. Все это исправлено в последней версии на данный момент. . - person TLama; 01.12.2011
comment
После того, как все исправлено, я имею в виду, что OnHeaderDblClick теперь правильно запускается, и проблема с исчезновением глифа сортировки при двойном щелчке устранена. - person TLama; 01.12.2011
comment
+1, вы правы, это решает проблему, но не забывайте, что после выхода новой версии ничего не переключается ;) Я удалю свой пост отсюда, мне кажется, что ОП победит. никогда не вернусь :) - person TLama; 01.12.2011
comment
Большое спасибо за вышеуказанное решение и все сообщения. Я планирую перейти на 5.0.0.0, но пока использую вышеуказанное решение. Спасибо, Пол. - person Paul H; 02.12.2011