TApplication.OnShowHint
イベント ハンドラーをまたはイベントに割り当てるかTApplicationEvents.OnShowHint
、 または サブクラス化してメッセージTStringGrid
をインターセプトしCM_HINTSHOW
ます。THintInfo
これらのいずれかを使用すると、ヒント ウィンドウの動作を制御するために使用されるレコードにアクセスできます。THintInfo.CursorRect
必要に応じてメンバーの座標をカスタマイズできます。ヒント ウィンドウは、マウスがその四角形の外に移動するたびに、最新のHint
プロパティ テキスト (表示される前にメンバーでカスタマイズできます) で再アクティブ化されます。THintInfo.HintStr
四角形が小さいほど、ヒント ウィンドウが再アクティブ化される頻度が高くなります。この機能により、UI コントロールはクライアント領域内に複数のサブセクションを持ち、マウスが同じ UI コントロール内を移動している間、異なるヒント文字列を表示できます。
TApplication.HintShortPause
プロパティの値(またはCM_HINTSHOWPAUSE
メッセージをインターセプトする値) は、再アクティブ化する前にヒント ウィンドウが消えるかどうかを制御します。一時停止の値を 0 に設定すると、ヒント ウィンドウは消えることなくテキストをすぐに更新します。一時停止の値を 0 以外の値に設定すると、マウスが同じ UI コントロール上にある限り、ヒント ウィンドウが消え、指定されたミリ秒数が経過すると再び表示されます。
例えば:
procedure TTmMainForm.FormCreate(Sender: TObject);
begin
Application.OnShowHint := AppShowHint;
end;
procedure TTmMainForm.FormDestroy(Sender: TObject);
begin
Application.OnShowHint := nil;
end;
procedure TTmMainForm.AppShowHint(var HintStr: String; var CanShow: Boolean; var HintInfo: THintInfo);
var
R, C: Integer;
begin
if HintInfo.HintControl = SgScoutLink then
begin
R := 0;
C := 0;
SgScoutLink.MouseToCell(HintInfo.CursorPos.X, HintInfo.CursorPos.Y, C, R);
if (R = 0) and (C >= 3) and (C <= 20) then
begin
HintInfo.CursorRect := SgScoutLink.CellRect(C, R);
HintInfo.HintStr := FManager.ScoutLinkColumnTitles.stGetColumnTitleHint(C-3);
end;
end;
end;
編集: Lazarus を使用していることに気付きました。私が説明したのは、Delphi でこの問題を処理する方法です。それがラザロにも当てはまるかどうかはわかりません。