かんたんなことだと思うのですが・・
環境は windowsXP、Delphi7 です。
StringGrid 上でヒント表示を行っていますが、
約3秒ぐらいでヒントが消えてしまいます。
セルが表示されていて、各セルの上で、セル内容の説明
を表示するようにしていますが、時間が短くて、
内容を読み終わる前に消えてしまいます。
しかも、マウスをアプリケーション外に持っていって
元に戻さないと再表示しなかったりと非常に不便なのですが、
この表示時間を変更または、消えないようにするには
どうすればよいのでしょうか?
ヒントカスタマイズTipsです。
//ヒントをすぐ表示するようにする
Application.HintPause := 1;
//ヒントを3秒後に非表示にする
Application.HintHidePause := 3000;
//ヒントの背景色
Application.HintColor := $00FFFF80;
うちは、別のHintWindowを用意してグリッドの選択セルの上に表示しています。
ただし、勝手に消えないはずなので、必要に応じて表示/非表示を切り換える必要があります。
WinAPIのToolTipとかはどうでしょ?
こんなカンジですな。
一部抜粋(実装部のみ)
constructor THogeForm.OnCreate(aOwner: TComponent);
begin
HintWindow := THintWindow.Create(Self);
end;
destructor THogeForm.OnDestroy;
begin
HintWindow.Free;
end;
//これは、フォームが隠れたりしたときに、ヒントの表示を切り換えている
procedure THogeForm.WndProc(var Message: TMessage);
begin
with Message do begin
if Msg = WM_ACTIVATE then begin
if WParam = WA_INACTIVE then begin
if HintWindow.Visible then begin
HintWindow.ReleaseHandle;
HintWindow.Tag := 1;
end;
end
else begin
if HintWindow.Tag = 1 then begin
ShowHintWindow(StringGrid1.Col, StringGrid1.Row);
end;
end;
end;
end;
end;
//ヒント表示のメイン
procedure THogeForm.ShowHintWindow(aCol, aRow: Integer);
var
contents: String;
clRect: TRect;
begin
if not Visible then Exit;
{ヒントを隠す}
HintWindow.ReleaseHandle;
if aRow > 0 then begin
{セルの表示矩形範囲を得る}
{これは選択されているセルの範囲なので、
上に表示したければ、clRectの範囲を上に移動する}
clRect := StringGrid1.CellRect(aCol, aRow);
{(例)ヒントで表示するテキスト}
contents := StringGrid1.Cells(aCol, aRow);
{ヒントを表示}
HintWindow.ActivateHint(clRect, contents);
end;
end;
あとは、必要なタイミングでShowHintWindowを呼び出しておけばいいかと。
おっと、通り過ぎられてしまった。
PEです。
>あとは、必要なタイミングでShowHintWindowを・・・
とおりすがらないさんすみません。
必要なタイミングで完全に動作できなかったので、
とりあえず deldel さんの
>//ヒントを3秒後に非表示にする
>Application.HintHidePause := 3000;
Application.HintHidePause := 60000;
でしのいでいますが、再度時間があれば
挑戦します。
みなさん、どうもありがとうございました。
解決ボタンチェックするの
忘れてました。
ツイート | ![]() |