TVirtualStreeTree.HintMode = hmTooltipの場合、ノードテキストが完全に表示されていないノードおよび列にマウスを合わせると、ノードテキストがヒントテキストになります。ただし、HintMode = hmHintを設定する必要があります。これにより、偶数ハンドラーで現在のマウスカーソルの位置に基づいてさまざまなヒントテキストを指定でき、そのHintModeではヒントテキストが自動的に生成されません。
私の質問は、ノードテキストが完全に表示されているかどうかを知る方法です。そのため、ヒントテキストとしてノードテキストまたは空の文字列を指定する必要がありますか?
ありがとう。
1805 次
2 に答える
2
を呼び出しTBaseVirtualTree.GetDisplayRectて、ノードのテキスト境界を決定できます。パラメータに応じて、Unclippedテキストの全幅または実際の幅が表示されます。TextOnly次のように設定する必要がありますTrue:
function IsTreeTextClipped(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean;
var
FullRect, ClippedRect: TRect;
begin
FullRect := Tree.GetDisplayRect(Node, Column, True, True);
ClippedRect := Tree.GetDisplayRect(Node, Column, True, False);
Result := (ClippedRect.Right - ClippedRect.Left) < (FullRect.Right - FullRect.Left);
end;
ノードがまだ初期化されていない場合、関数はノードを暗黙的に初期化することに注意してください。
于 2010-01-20T09:39:15.403 に答える
0
ツリーコントロール自体が使用するものを使用できます。これは、モードが有効なcm_HintShow場合の単一行ノードのメッセージハンドラーからの抜粋です。hmTooltip
NodeRect := GetDisplayRect(HitInfo.HitNode, HitInfo.HitColumn, True, True, True);
BottomRightCellContentMargin := DoGetCellContentMargin(HitInfo.HitNode, HitInfo.HitColumn
, ccmtBottomRightOnly);
ShowOwnHint := (HitInfo.HitColumn > InvalidColumn) and PtInRect(NodeRect, CursorPos) and
(CursorPos.X <= ColRight) and (CursorPos.X >= ColLeft) and
(
// Show hint also if the node text is partially out of the client area.
// "ColRight - 1", since the right column border is not part of this cell.
( (NodeRect.Right + BottomRightCellContentMargin.X) > Min(ColRight - 1, ClientWidth) ) or
(NodeRect.Left < Max(ColLeft, 0)) or
( (NodeRect.Bottom + BottomRightCellContentMargin.Y) > ClientHeight ) or
(NodeRect.Top < 0)
);
trueの場合ShowOwnHint、ノードのテキストをヒントテキストとして返す必要があります。それ以外の場合は、ヒントテキストを空白のままにします。
そのコードを使用する際の主な障害は、DoGetCellContentMargin保護されているため、直接呼び出すことができないことです。ソースを編集して公開するか、独自の関数でその機能を複製することができます。イベントを処理していない場合はOnBeforeCellPaint、とにかく常に(0、0)を返します。
データはのHitInfo呼び出しから取得されGetHitTestInfoAtます。
于 2010-01-20T15:57:47.900 に答える