ヒント表示について

解決


PE  2005-06-02 10:17:55  No: 15271  IP: 192.*.*.*

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

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

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

編集 削除
deldel  2005-06-02 11:05:44  No: 15272  IP: 192.*.*.*

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

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

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

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

編集 削除
とおりすがらない  2005-06-02 12:17:05  No: 15273  IP: 192.*.*.*

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

編集 削除
通り過ぎた  2005-06-02 12:31:12  No: 15274  IP: 192.*.*.*

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

編集 削除
とおりすがらない  2005-06-02 12:35:03  No: 15275  IP: 192.*.*.*

こんなカンジですな。

一部抜粋(実装部のみ)

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 12:36:03  No: 15276  IP: 192.*.*.*

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

編集 削除
PE  2005-06-03 09:12:32  No: 15277  IP: 192.*.*.*

PEです。

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

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

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

編集 削除
PE  2005-06-03 09:15:38  No: 15278  IP: 192.*.*.*

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

編集 削除