2

VirtualStringTreeコントロールをリストビューとして使用し、並べ替え機能を使用しています。ただし、VirtualStringTreeヘッダーをダブルクリックすると、ヘッダーをもう一度クリックするまで、並べ替え方向の記号が非表示になります。

その動作を無効にすることはできますか?

私が試したがうまくいかないこと:

  • プロパティを検索しましたが、関連する設定が見つかりません
  • ダブルクリックヘッダーイベントをクリックヘッダーイベントにリンクしました

私の環境はDelphi2007Pro、Windows 7Pro64ビットです。

4

1 に答える 1

1

ダブルクリックとソート三角形の非表示で同じ問題が発生しましたが、代わりに、他に何もない単純な上下の切り替えが必要でした。残念ながら、この問題は最新の 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;
于 2011-11-30T22:05:08.857 に答える