关于Chm文件的讨论(100分)

  • 主题发起人 puppyboy
  • 开始时间
P

puppyboy

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi默认是不支持chm文件帮助的。对于如何将chm和delphi关联(在不同窗口按F1,chm<br>对应到不同的主题),大富翁上大多是这样解决的!<br>Application.helpfile:=******.chm<br>Application.onhelp:=自定义的函数。<br>然后在自定义的函数中调用hhctrl.ocx中的HtmlHelpA函数。<br>但我在实际操作中却遇到问题。<br>将chm文件赋值给helpfile,按F1之后,系统会提示错误,delphi并不认chm文件。<br>而如果不设置helpfile属性,按F1之后onhelp函数不响应。<br>虽然可以给每个窗口些消息函数来响应F1,但是这样太麻烦,我想在消息还未分发给<br>窗口之前把它截获,这样只需写一次就能对所有窗口有效。<br>一个方法是用自己的窗口过程替代应用对象的窗口过程:<br>function NewWndProc(Handle:hWnd;Msg,wParam,lParam:Longint):Longint;stdcall;<br>{这是一个窗口过程,用于处理应用程序接收到的消息}<br>begin<br>&nbsp; if Msg=WM_HELP then<br>&nbsp; &nbsp; ShowMessage('截获到F1');<br>&nbsp; {将消息传给原来的窗口过程}<br>&nbsp; Result:=CallWindowProc(WProc,Handle,Msg,wParam,lParam);<br>end;<br><br>initialization<br>{指定一个窗口过程}<br>&nbsp; WProc:=Pointer(SetWindowLong(Application.Handle,GWL_WNDPROC,Integer(@NewWndProc)));<br><br>finalization<br>&nbsp; if WProc &lt;&gt; nil then<br>&nbsp;{恢复原来的窗口过程}<br>&nbsp; &nbsp; SetWindowLong(Application.Handle,GWL_WNDPROC,LongInt(WProc));<br><br>但是好像if Msg=WM_HELP then是不是没写对,因为没有任何反应,但是这个函数是肯定截获<br>了消息的,因为如果我把Result:=CallWindowProc(WProc,Handle,Msg,wParam,lParam);<br>去掉,文本框之列的控件根本不能输入内容。<br><br>我想问怎么解决这个在不同窗口按F1,chm对应到不同的主题的问题,还有就是上面那个<br>消息截获的做法有什么问题?????????
 
挂一个键盘钩子啦,用来进行F1按键的处理。<br>键盘钩子的问题实在太多了,自己搜索一下,大把例子。
 
顶部