?ボタンをクリックしたときの呼び出しは
Application.HelpFile := ExtractFilePath(ParamStr(0))+'MYFILE・・.HLP';
Application.HelpJump('トビックのID');
でよいと思っていましたがこれでは表示はされてもポップアップではないので
コントロールにフォーカスを移しても消えてくれません。よろしくご教示お願いします。
ポップアップヒント表示ですね。
探した限りでは、ポップアップヒント表示を直接行う関数などはなさそうです。
THintWindowから派生したヒントクラスを作り、フォーカスがはずれたら消えるようにすればできるかと思います。
簡単に実現するには(MS標準とは少しビジュアルが違いますが)、ボーダーなしのフォームを作成し、ヒントを表示するときにそのフォームを表示しフォーカスをそのフォームに移すようにすればよいかと思います。
このとき、作成したヒント用フォームのOnDeactivateイベントで、自分自身を消すようにすれば、フォーカス移動時に消えます。
やっぱりありました。
WinHelp(Handle,
'ヘルプのファイル名',
HELP_CONTEXTPOPUP,
コンテキストID
);
で表示されると思います。
私もWinHelpを見つけて色々やってましたがHandleのところがうまくいきません。
?ボタンと目指すコントロールはOKBottonDlgに有るのですが
'ヘルプのファイル名'の部分もPChar云々とかのエラーが出ています。
Handleの部分は、フォームのハンドルかApplication.Handleでよろしいかと思います。
OKButtonDlgであれば、TFormからの継承ですので、Handleプロパティがあるはずです。
WMHelpを実装しているのはOKBottonDlgですよね?そうであれば、Handleで躓くことはないと思いますが・・・。
PChar云々でるのは、型がStringではいけないからです。
PCharは、Charへのポインタです。
Stringは文字列です。
Stringのままではいけません。PCharでキャストしてやればエラーにならないと思います。
にしのさん 早速のご教示有難う御座いました。解決しました。
みられる方の参考までにコピーしておきます。
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 で 割り当てた数字です。
有難う御座いました。
ツイート | ![]() |