状況依存ヘルプを表示するには?(再)

解決


  2003-07-27 21:13:18  No: 4247

?ボタンをクリックしたときの呼び出しは

Application.HelpFile := ExtractFilePath(ParamStr(0))+'MYFILE・・.HLP';
    Application.HelpJump('トビックのID');

でよいと思っていましたがこれでは表示はされてもポップアップではないので
コントロールにフォーカスを移しても消えてくれません。よろしくご教示お願いします。


にしの  2003-07-29 17:52:39  No: 4248

ポップアップヒント表示ですね。
探した限りでは、ポップアップヒント表示を直接行う関数などはなさそうです。
THintWindowから派生したヒントクラスを作り、フォーカスがはずれたら消えるようにすればできるかと思います。

簡単に実現するには(MS標準とは少しビジュアルが違いますが)、ボーダーなしのフォームを作成し、ヒントを表示するときにそのフォームを表示しフォーカスをそのフォームに移すようにすればよいかと思います。
このとき、作成したヒント用フォームのOnDeactivateイベントで、自分自身を消すようにすれば、フォーカス移動時に消えます。


にしの  2003-07-29 19:20:00  No: 4249

やっぱりありました。
    WinHelp(Handle,
      'ヘルプのファイル名',
      HELP_CONTEXTPOPUP,
      コンテキストID
    );
で表示されると思います。


  2003-07-29 22:18:41  No: 4250

私もWinHelpを見つけて色々やってましたがHandleのところがうまくいきません。
?ボタンと目指すコントロールはOKBottonDlgに有るのですが
'ヘルプのファイル名'の部分もPChar云々とかのエラーが出ています。


にしの  2003-07-29 22:37:50  No: 4251

Handleの部分は、フォームのハンドルかApplication.Handleでよろしいかと思います。
OKButtonDlgであれば、TFormからの継承ですので、Handleプロパティがあるはずです。
WMHelpを実装しているのはOKBottonDlgですよね?そうであれば、Handleで躓くことはないと思いますが・・・。

PChar云々でるのは、型がStringではいけないからです。
PCharは、Charへのポインタです。
Stringは文字列です。
Stringのままではいけません。PCharでキャストしてやればエラーにならないと思います。


  2003-07-30 00:29:47  No: 4252

にしのさん  早速のご教示有難う御座いました。解決しました。

みられる方の参考までにコピーしておきます。

procedure TOKBottomDlg.WMHelp(var Message: TWMHelp);

var
ctrl: TControl;
path: string;
hwnd: Integer;//  Or  LongWord  ?
HELPINFO: THelpInfo;

begin
ctrl:= FindControl(Message.HelpInfo^.hItemHandle);
if ctrl <> nil then
begin
    Application.HelpFile := ExtractFilePath(ParamStr(0))+'MYFILERの使        用方法.HLP';
    path:=Application.HelpFile;
    hwnd:=Form1.Handle;
    WinHelp(hwnd,PChar(path),HELP_CONTEXTPOPUP,333);
end;
    //333は  HelpWorkshop  の  Map  で  割り当てた数字です。


  2003-07-30 00:31:27  No: 4253

有難う御座いました。


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

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






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