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