状況依存ヘルプをひょうじするには?

解決


 2003-07-25 13:26:40  No: 4236  IP: 192.*.*.*

標準ダイヤログのタイトルバーに?ボタンを付けるまでは出来たのですがこれをクリックして目的のコントロールにポップアップヘルプを表示したいのですが関数というかイベントハンドラーなのか見つけられません。どなたかご教示をお願いします。

編集 削除
にしの  2003-07-25 13:45:41  No: 4237  IP: 192.*.*.*

WM_HELPというメッセージが、そのコントロールにとばされます。

Formに、

protected
  procedure WMHelp(var Message: TWMHelp); message WM_HELP;
を用意して、その実体を、

procedure TForm1.WMHelp(var Message: TWMHelp);
var
  ctrl: TControl;
  HELPINFO: THelpInfo;
begin
  ctrl:= FindControl(Message.HelpInfo^.hItemHandle);
  if ctrl <> nil then
  begin
    ShowMessage(ctrl.Name);
  end;
end;

とすれば、?を押してからクリックしたコントロールの名前が表示されます

編集 削除
 2003-07-26 13:57:18  No: 4238  IP: 192.*.*.*

にしの  さんへ
早速のご教示有難うございます。

Form1のUnit1に
protected
  procedure WMHelp(var Message: TWMHelp); message WM_HELP;

OKBottomDlgのUnit2の
var
  OKBottomDlg: TOKBottomDlg;

implementation
 uses Unit1;
{$R *.dfm}
の次に
procedure TForm1.WMHelp(var Message: TWMHelp);
var
略(本体)
end;
としましたがUnit2で';'が必要な場所に'.'があるとかコンパイルエラーが出ます。
初歩的なミスで恐縮ですが
  なおダイヤログにはLabelとEditを用意しています。この本体をUnit1に書いた場合はコンパイルエラーはでませんが?ボタンをクリックしてコントロール上でクリックしても変化無です。

編集 削除
にしの  2003-07-26 15:04:56  No: 4239  IP: 192.*.*.*

上に示した例は、「Form1(TForm1)上の?を使用する場合」です。
臨機応変に修正しましょう。

編集 削除
 2003-07-26 16:09:59  No: 4240  IP: 192.*.*.*

にしのさん  有難う御座いました。後は、ヘルプトピックへジャンプ出来るように
がんばってみます

編集 削除