6

仮想モード (OwnerData := True) で使用している TListView (レポート モード) があります。列の自動サイズ変更について私が知っている 2 つの状況を除いて、すべてがうまく機能します。彼らです:

  1. ヘッダー列セパレーターをダブルクリックして、1 つの列のサイズを自動調整します
  2. Ctrl-KeypadPlus キーを押すと、すべての列のサイズが自動調整されます。

仮想モードでのこれらのイベントのデフォルトの処理は、実際には機能しません (データの最初の行で自動サイズ設定されているようです)。動作にフックして、独自の列の自動サイズ設定を行いたいと思います。誰もそれを行う方法を知っていますか? それとも、明らかな何かが欠けていますか?Delphi XE を使用しています。提案をありがとう。

4

1 に答える 1

1

仮想リスト ビュー コントロールの列の自動サイズ変更は、自動サイズ変更操作が実行された時点で表示されているすべての項目を使用して実行されます。これが DelphiTListViewコントロールの動作です。エクスプローラーで同じ操作を実行してみると、これがオペレーティング システムの標準であることがすぐにわかります。

非仮想モードでリスト ビューを操作すると、自動サイズの実行時にすべての行の内容が考慮されます。

データの最初の行のみを説明する自動サイズを観察する理由がわかりません。それが本当にあなたに起こっていることなら、私たちが確認する必要があるコードに何か問題があるに違いないと思います.


問題は Windows XP のバグのようです。私が見る限り、仮想リスト ビューは XP で自動サイズ変更を正しく実行しません。エクスプローラーは XP と Vista の間で非仮想から仮想に切り替えたと思いますが、エクスプローラー チームが問題を修正するのに十分な内部力を持っていたことに賭けてもかまいません。

私が知る限り、自動サイズ調整が行われているという通知が届いていないため、問題を回避するのは難しいと思います. これをさらに追求したい場合はHDN_DIVIDERDBLCLICK、ヘッダー コントロールと のリストの通知に応答することを試みることができますCTRL +。しかし、そのアプローチが喜びをもたらすかどうかはわかりません。

于 2012-01-29T20:28:30.887 に答える