ヒント表示について

解決


PE  2005-06-02 19:17:55  No: 15271

かんたんなことだと思うのですが・・
環境は windowsXP、Delphi7 です。

StringGrid 上でヒント表示を行っていますが、
約3秒ぐらいでヒントが消えてしまいます。

セルが表示されていて、各セルの上で、セル内容の説明
を表示するようにしていますが、時間が短くて、
内容を読み終わる前に消えてしまいます。
しかも、マウスをアプリケーション外に持っていって
元に戻さないと再表示しなかったりと非常に不便なのですが、
この表示時間を変更または、消えないようにするには
どうすればよいのでしょうか?


deldel  2005-06-02 20:05:44  No: 15272

ヒントカスタマイズTipsです。

//ヒントをすぐ表示するようにする
Application.HintPause := 1;

//ヒントを3秒後に非表示にする
Application.HintHidePause := 3000;

//ヒントの背景色
Application.HintColor := $00FFFF80;


とおりすがらない  2005-06-02 21:17:05  No: 15273

うちは、別のHintWindowを用意してグリッドの選択セルの上に表示しています。
ただし、勝手に消えないはずなので、必要に応じて表示/非表示を切り換える必要があります。


通り過ぎた  2005-06-02 21:31:12  No: 15274

WinAPIのToolTipとかはどうでしょ?


とおりすがらない  2005-06-02 21:35:03  No: 15275

こんなカンジですな。

一部抜粋(実装部のみ)

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を呼び出しておけばいいかと。


とおりすがらない  2005-06-02 21:36:03  No: 15276

おっと、通り過ぎられてしまった。


PE  2005-06-03 18:12:32  No: 15277

PEです。

>あとは、必要なタイミングでShowHintWindowを・・・
とおりすがらないさんすみません。
必要なタイミングで完全に動作できなかったので、
とりあえず deldel さんの

>//ヒントを3秒後に非表示にする
>Application.HintHidePause := 3000;
Application.HintHidePause := 60000;
でしのいでいますが、再度時間があれば
挑戦します。

みなさん、どうもありがとうございました。


PE  2005-06-03 18:15:38  No: 15278

解決ボタンチェックするの
忘れてました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加