2012-01-29 5 views
5

仮想モード(OwnerData:= True)で使用しているTListView(レポートモード)があります。私が知っている2つの状況を除いて、すべてがうまく働き、自動的に列を自動サイズ調整します。彼らは以下のとおりです。OwnerDataがtrueのTListViewでデフォルトの列自動サイズ設定を処理する方法

  1. はダブルすべての列をautosizesするための単一の列
  2. Ctrlキーを押しながらKeypadPlusキーを自動サイズ調整するために、ヘッダーの列セパレータをクリックします。

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

+0

ここに似たようなものhttp://stackoverflow.com/q/9255540/960757 – TLama

答えて

1

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

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

データの最初の行について自動サイズのみの課金を観察する理由がわかりません。それが本当にあなたのために起こっているなら、あなたが見なければならないコードに何か間違ったものがなければならないと思います。


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

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

+0

Davidに感謝します。私はどのメソッドを使用しているのか分かりませんが、私のXPシステムでは、自動サイズ変更を行うために可視の行を使用していないようです(あるいは間違って測定します。いくつかの文字で、時にはより多くの)。いずれにしても、私の質問は本当にどのようにデフォルトの私のニーズを満たしていないように動作を制御することです。 – MarkF

+0

私はWindows 7で実験しました。私はXPマシンを見ていきます。それがどのように動作するか見ることができます。 –

+0

ありがとう、あなたの更新をありがとう。私の主な開発マシンはXPですが、もちろんWin 7 64bitにアップグレードする予定ですので、XE2で遊ぶことができます。私は、この問題を回避するために独自のヘッダーコントロールを使用しなければならないと述べたC++のいくつかのフォーラム投稿を見たので、あなたは喜びの欠如について正しいかもしれないと思う...私はちょうどそれが上書きすると便利です。 – MarkF

関連する問題