2

私はかなりうまく機能しているグリッドとして TVirtualStringTree を使用しています。

ユーザーがマウスをセルの上に置いたときにヒントを表示するために、ツリービューのヒント機能を使用しています。 セルのテキストの長さに関係なくヒントを表示したいので、HintMode を hmHint に変更する必要がありました。

私が今やろうとしているのは、マウスがセル内にある場所に応じて異なるヒントを表示することです。

OnGetHint イベントを使用して、ヒントが表示される前にこれを問題なく実行できます。私の問題は、ユーザーがマウスを別のセルに移動したときにのみ、このイベントが発生することです。

ヒントが表示され、マウスが同じセル内で移動している間にヒントを更新する方法を見つけることができません

アプリケーションの OnShowHint イベントを使用して、他のコントロールの提案を見てきましたが、ヒントが消えて再び表示されないようです。

誰でもアイデアはありますか?

ありがとう

アップデート

いくつかの調査の後、誰かが解決策を思いつくのに役立つ場合に備えて、私が見つけたものは次のとおりです。

CMHintShow メソッドは、HintInfo レコードの CursoRect フィールドをセルの境界に設定します。これにより、マウスがこの矩形 (TApplication.HintMouseMessage) の外に出るまで、VCl がヒント コードを再度トリガーするのを停止するようです。

CursorRect をセル境界よりも小さい値に設定すると、ヒントが更新されます。私はさまざまな目的でいくつかの場所で VT を使用しているため、これらの変更を直接行うことはできません。この変更を必要としないソリューションを取得するとよいでしょう。

4

1 に答える 1

1

上部のすぐ近くにTBaseVirtualTree.CMHintShow、コードは次のようになります。

if PtInRect(FLastHintRect, HintInfo.CursorPos) then
  Exit;

これをコメントアウトすると、動作は探しているものに近くなります。同じセル内でマウスを動かすとヒントウィンドウは表示されませんが、クリックすると表示されます。

ただし、マウスをクリックしないと、同じセルにヒントウィンドウを表示する方法が見つからないようです。

于 2011-03-21T22:03:39.813 に答える