ダブルクリックとソート三角形の非表示で同じ問題が発生しましたが、代わりに、他に何もない単純な上下の切り替えが必要でした。残念ながら、この問題は最新の VirtualTreeView (4.8.7) にも存在します。
この問題を修正するコードを次に示します。このようなものをOnHeaderClick
イベントに入れます ( OnHeaderDblClick
! ではありません)。
関連する行はif HitInfo.Column = NoColumn then Exit;
、ダブルクリックの問題を修正するものです。残りのコードを自分の目的で使用する場合と使用しない場合がありますが、他の人にとっては役立つ場合があります。残りの説明はコードのコメントにあります。
OnHeaderDblClick イベントを定義する必要はありません。不要な場合は空になる可能性があるため、コードから削除することをお勧めします。
アップデート
バージョン5.0.0のように見えるので、TLamaからのコメントも読んでください。この修正は意図したとおりに動作しない可能性があります。ただし、現在のバージョンではそうです。
{**
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;