1

水平スクロールが実行されているときにOnAfterItemPaintイベントを使用して描画する際に問題が発生します。

基本的に私が達成したいのは、選択したセル効果のマージです。たとえば、1列目と2列目のテキスト、3列目と4列目のテキストなどです。これまでのところ、VTは列のマージをサポートしていません。手動で描画する必要があります。

代わりに使用する必要がある回避策または別のイベントはありますか?

使用:Delphi 7 + VirtualTreeview 4.8.5

イベントソース:

begin
  TargetCanvas.TextOut(ItemRect.Left+ VT1.OffsetX, ItemRect.Top,
    '1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF');
end;

スクロールする前に:

代替テキストhttp://a.imagehost.org/0869/screen1.gif

スクロール後(右にスクロールしてから左にスクロール):

代替テキストhttp://a.imagehost.org/0645/screen2.gif

4

2 に答える 2

1

達成したいことを言うのは難しいですが、複数の列にまたがる長いテキストがあるのを見ると、適切なイベントを使用しているかどうかわかりません.通常、列に対して長すぎる場合はテキストを切り捨てます.

とにかく、 VirtualTreeView.pdfドキュメンテーション ファイルのセクション 5.2「ペイント サイクルとステージ」を読んで、ペイントしたいものに使用する適切なイベントを見つけるのが最善の方法です。それは次のOnAfterItemPaintように述べています:

After item paint ステージは、そのノードのすべての列に関係するフレームなどのノード固有のものを追加するために使用され、ノードごとに 1 回呼び出されます。

したがって、おそらく使用したいものではないと思います。

編集:

OK、セルをマージする場合は、正しい動作を得るために追加を削除するだけで済みますVT1.OffsetX(代わりに追加する必要があります)。VT1.TextMarginこれはもちろん、最初の (インデックス 0) 列でテキスト出力を開始することを前提としています。そうでない場合は、列幅から水平方向のテキスト位置を計算する必要があります。

しかし、ペイント ステージの説明から、BeforeItemPaintイベントを使用してCustomDrawvar パラメータをに設定し、Trueデフォルトのペイントをスキップしたいと思います。

于 2009-10-04T13:44:25.827 に答える
0

これを試しましたか:

TreeOptions.AutoOptions := TreeOptions.AutoOptions + [toAutoSpanColumns];

それはあなたが必要とすることをほとんど行います。唯一の問題は、有効にする列を指定できないことです。範囲を広げたくない列のセルテキストを空白に設定することで、制限によっておそらくこれを回避できます。

于 2009-10-05T10:58:42.363 に答える