スクロールデルファイVirtualTreeview.OnAfterItemPaintの問題?
-
19-09-2019 - |
質問
私は、水平スクロールが行われた場合の OnAfterItemPaint のイベントを使用して描画の問題を取得しています。
基本的に私が達成したいことは、たとえば、列1&2、列3&4、などのために別のテキストの1文を言って、選択したセルの効果のマージです...これまでのところ、VTは、のためにあらゆるサポートを持っていません列のマージので、私はそれを手動で描画する必要があります。
この問題を回避するか、私が代わりに使用する必要があります別のイベントはありますか?
使用:デルファイ7 + VirtualTreeview 4.8.5
イベントソース:
begin
TargetCanvas.TextOut(ItemRect.Left+ VT1.OffsetX, ItemRect.Top,
'1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF');
end;
スクロール前ます:
http://a.imagehost.org/0869/screen1.gif
スクロールした後(右スクロールし、スクロール左):
解決
それはあなたが私はあなたが適切なイベントを使用わからない複数の列にまたがる長いテキストを持っていることをあなたが達成したいものを言うのは難しいですが、見て - 通常あなたはそれがその列に対して長すぎる場合は、テキストが切り捨てられたいですます。
とにかく、最善のことは、= <のhref =「http://www.soft-gems.net/supplement/download.php?ID=67」RELセクション5.2「ペイントサイクルと段階を」読むことです「nofollowをnoreferrer」> VirtualTreeView.pdf のドキュメントファイル、および適切なイベントを見つけるには、あなたがペイントしたいもののために使用されます。 OnAfterItemPaint
にとっては述べます:
アイテム塗料段は、ノード特定のフレームのようなものなどを追加するために使用された後 これは懸念そのノードのすべての列を、ノードごとに一度呼び出されます。
私はそれはおそらくのありませんを使用するものだと思います。
の編集の
あなたがセルのマージのために行っている場合は、 OK、あなただけの正しい動作を取得するためにVT1.OffsetX
の追加を削除(およびその代わりVT1.TextMargin
を追加)する必要があります。これは、そうでなければ、列の幅から水平テキスト位置を計算する必要があり、あなたが最初の(インデックス0)列のテキスト出力を開始したいもちろん前提としています。
しかし、私はまだかなりBeforeItemPaint
イベントを使用して任意のデフォルトの絵をスキップするCustomDraw
するTrue
のvarパラメータを設定します塗装段階の説明から。
他のヒント
あなたはこれを試したことがあります:
TreeOptions.AutoOptions := TreeOptions.AutoOptions + [toAutoSpanColumns];
これはかなり何が必要ありません。彼らは唯一の問題は、あなたがそれをするために有効になっている列を指定することができないかもしれません。あなたは、おそらくあなたにまたがるしたくないの列の空白にcelltextを設定することにより制限することにより、この問題を回避することができます。