2011-11-28 1 views
2

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

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

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

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

Мое окружение - Delphi 2007 Pro, Windows 7 Pro 64bit.

ответ

1

У меня была такая же проблема с двойным щелчком мыши и скрытием сортировочного треугольника, и вместо этого я просто хотел просто переключаться вверх/вниз ни с чем другим. К сожалению, эта проблема присутствует и в последнем VirtualTreeView (4.8.7).

Вот немного кода, который исправляет проблему - поместите что-то подобное в ваш OnHeaderClick событие (не OnHeaderDblClick!).

Соответствующая строка: if HitInfo.Column = NoColumn then Exit;, которая устраняет проблему двойного щелчка. Вы можете или не можете использовать остальную часть кода для своих целей, но это может быть полезно кому-то другому. Остальное объяснение содержится в комментариях к коду.

Не нужно определять событие OnHeaderDblClick - оно может быть пустым, если не требуется, поэтому вы можете удалить его из своего кода.

UPDATE

также читать комментарии от 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; 
+0

В ст. 4.8.7 'OnHeaderDblClick' никогда не будет никогда не будет уволен, было [вопрос] (http://stackoverflow.com/a/7890884/960757). Все это исправлено в [последней версии] (http://virtual-treeview.googlecode.com/svn/trunk/Source/VirtualTrees.pas) в это время. – TLama

+0

С этим все фиксированное я подразумеваю 'OnHeaderDblClick', теперь правильно запущен, и проблема с глифом сортировки, исчезающим с двойным щелчком, удаляется. – TLama

+0

+1, вы правы, это обходит проблему, но не забывайте, что она не будет переключаться ни на что после выхода новой версии;) Я удалю свой пост отсюда, мне кажется, что OP выиграл 't никогда не возвращаюсь :) – TLama

Смежные вопросы