在窗体WndProc过程中,如何根据message.LParam参数,取得HelpContext? ( 积分: 50 )

  • 主题发起人 主题发起人 gencheng
  • 开始时间 开始时间
G

gencheng

Unregistered / Unconfirmed
GUEST, unregistred user!
当发生WM_HELP消息时,也就是在窗体的WndProc过程中,当message.Msg = WM_HELP 时,如何根据WParam参数,获得HelpContext值。
我查看MSDN,发现WM_HELP返回的LParam参数是一个HELPINFO结构体,它的结构是:
typedef struct tagHELPINFO {
UINT cbSize;
int iContextType
int iCtrlId;
HANDLE hItemHandle;
DWORD dwContextId;
POINT MousePos;
} HELPINFO, FAR *LPHELPINFO;

其中的cbSize,iContextType,iCtrlId,hItemHandle,dwContextId,MousePos等等如何在Delphi7中得到?
这个问题我也在CSDN提问了,回答问题的在CSDN也有分!
http://community.csdn.net/Expert/topic/5481/5481284.xml?temp=.4913141
 
下列代码无效,不知哪有错?

Procedure TForm1.WndProc(Var message: TMessage);
var
H1:PHelpInfo;
Begin
If message.Msg = WM_HELP Then
begin
H1:=PHelpInfo(message.LParam);
Windows.WinHelp(Form1.Handle, 'TESTHELP.hlp', HELP_CONTEXTPOPUP,H1.dwContextId);
end
Else
Inherited;
End;

不知道怎么搞的H1.dwContextId总是返回0,所以老显示“没有与之相关的帮助主题”!
 
Procedure TForm1.WndProc(Var message: TMessage);
var
Control: TWinControl;
Begin
If message.Msg = WM_HELP Then
begin
Control := FindControl(TWMHelp(Message).HelpInfo.hItemHandle);
if Control <> nil then
//Caption := Format('%d', [Control.HelpContext]);
end
Else
Inherited;
End;

要显示帮助,Delphi会自动完成的,为什么要自己WinHelp呢
 
“要显示帮助,Delphi会自动完成的,为什么要自己WinHelp呢?”
原因是在Delphi7下helpcontext设置无效,不会起任何作用!具体原因在这:
http://community.csdn.net/Expert/topic/5475/5475484.xml?temp=.2661249
http://community.csdn.net/Expert/topic/5481/5481284.xml?temp=.4913141
 
成功!
请ANiDelphi大侠到上面的网址去领分!
三个地方共150分!!!
 
奇怪,这样写不行?
Procedure TForm1.WndProc(Var message: TMessage);
var
ContextId:Cardinal;
Begin
If message.Msg = WM_HELP Then
begin
ContextId:=TWMHelp(Message).HelpInfo.dwContextId;
Windows.WinHelp(Form1.Handle, 'GOTOHLP.HLP', HELP_CONTEXTPOPUP,ContextId);
end
Else
Inherited;
End;

必须要用ANiDelphi大侠的方法,先FindControl找到句柄才行,百思不得其解。Delphi7在调用winhelp()时真是有BUG啊!
 
TCustomForm有处理WM_HELP的过程

private
procedure WMHelp(var Message: TWMHelp); message WM_HELP;

用这个可能效率要高点

ps.我在CSDN没用注册 :)
 
“我在CSDN没用注册”
那就花几分钟在CSDN注册一下吗,100分在CSDN也不是很容易得到的。
我上面的问题在CSDN挂了4天,居然没一个人能回答。所以我想把分给你。(在CSDN没人回答的帖子是不能结贴的)
 
已经将这个封装成了一个组件,彻底解决D7下What is this?问题。结帐!
 
后退
顶部