如何在vfp9.0中调用chm帮助文件的第8页?

lt5225262 2010-04-27 04:06:38
如何在vfp9.0中调用chm帮助文件的第8页?
下面是6.0以前的例子,在9.0中如何使用,大家给个例子,谢谢!!!

如果在 VFP 6.0 中用 set help to helpfile.chm 命令并用按下 F1 调用帮助文件不会有问题。
但是在 VFP 5.0 或 VFP 3.0 中,使用 set help to helpfile.chm 命令后,若按 F1 想调用帮助文件时会发生系统错误。
因此,可以象以下示例一样来调用一个指定位置处的指定的 .chm 帮助文件中的指定的主题文件
1. 如果你的系统中没有注册 Hhctrl.ocx 按以下方法注册它
在 Visual FoxPro 3.0 和 3.0b, Regsvr32.exe 位于 \Vfp\Samples\Ole 目录, 在 Visual FoxPro 5.0 中, Regsvr32.exe 位于 \Vfp 目录.在 DOS 提示符下,用以下方法注册:
Regsvr32 Hhctrl.ocx
2. 修改 vfphtml.prg,修改变量 lcSampleHelp,lcHhctrl 和 lcTopic 的值. 这些变量包含 .chm 和 Hhctrl.ocx 的位置和要显示的主题的信息.
3. 进入 Visual FoxPro 并运行该程序.
4. 你指定的位置的 .chm 文件中的指定主题将会显示在屏幕上.
请注意示例中 hhctrl.ocx 所在的位置,在你的应用中,应为你的 hhctrl.ocx 指定适当的位置
以下示例假在你的电脑的设你有一个 C:\vfphtml\ 目录,且其中有一个 vfphtml.CHM 帮助文件,该帮助文件中包含有一个 page2.htm 文件。

以下是示例程序

* 在 Visual Foxpro 中用 HTML Help API 显示一个 HTML 帮助文件.
#DEFINE HH_DISPLAY_TOPIC 0

* 修改该行来反映你的 Chm 文件位置
lcSampleHelp = "C:\vfphtml\vfphtml.CHM"

* 修改该行来反映你的 Ocx 文件位置
lcHhctrl="c:\vfphtml\hhctrl.ocx"

* 修改该行来反映你的帮助文件中的 .htm 文件
lcTopic = "C:\vfphtml\vfphtml.CHM::/page2.htm"

* 该函数 取决于 生成 html 帮助文件的计算机的 hhctrl.ocx 版本
DECLARE INTEGER HtmlHelp IN (lcHhctrl) INTEGER hwndCaller, ;
STRING pszFile, INTEGER uCommand, INTEGER dwData

* 确定调用程序的 hwnd
* mainhwnd() 将告诉我们 VFP 桌面的名柄
SET LIBRARY TO SYS(2004) + "foxtools.fll"
m.hwndCaller = mainhwnd()
SET LIBRARY TO

NULLVALUE = 0

* 返回值是 html 帮助窗口的窗口句柄
* 在默认的帮助窗口中显示指定位置(C:\vfphtml\)中的指定帮助文件(vfphtml.CHM)中的指定主题(page2.htm)
hwndHelp = HtmlHelp(m.hwndCaller,;
"C:\vfphtml\vfphtml.CHM::/page2.htm",HH_DISPLAY_TOPIC,NULLVALUE)
...全文
384 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
KQX7381 2012-07-20
  • 打赏
  • 举报
回复
怎么用VFP命令发现CHM文件已打开,并关闭,多谢!
lt5225262 2010-04-28
  • 打赏
  • 举报
回复
按二楼和三楼的帖子已经理解了,谢谢!!!结帖
lt5225262 2010-04-28
  • 打赏
  • 举报
回复
http://www.access911.net/CSDN/FileDescription.asp?mdb=2010-4-28&id=45&mode=3
上面这个地址中有一个很小的帮助文件help.chm, 共有4篇文章
例如我想用prg直接显示第三篇(用手动打开时,用右键显示其地址属性为:mk:@MSITStore:K:\help.chm::/11.html)
请给个例子。谢谢!!!
lt5225262 2010-04-28
  • 打赏
  • 举报
回复
谢谢十豆三大哥!我慢慢消化...
十豆三 2010-04-27
  • 打赏
  • 举报
回复
HelpContextId 控件帮助关联
*-------------------------------------------------
出处:http://dkfdtf.blogbus.com/logs/14090415.html

转自:http://www.zhangyongjun.com/blog/article.asp?id=146

帮助文档制作出来了之后,那如何在软件每个界面中能够实现按下 F1 键就打开帮助文档的相应页面,比如在“会员管理”窗体中按下 F1,就能在帮助文档中直接看到会员管理相关的帮助信息。用 HTML HELP WORKSHOP工具进行编译,编译前做一下下面的工作,就可以实现关联 HelpContextId。

先建立一个头文件,比如 helpId.h 然后象下面那样定义 helpcontextid

//前言
#define idh_bqsm 1010 //版权申明
#define idh_xkxy 1020 //最终用户许可协议

//安装与卸载
#define idh_yxhj 3010 //运行环境
#define idh_rjaz 3030 //软件安装
#define idh_xz 3040 //卸载

//技术支持
#define idh_shfw 5010 //售后服务

然后在 project 页中选择 htmphelp api information
在 map 页中用 header file 将头文件加入
然后选择 alias 页,用 add 将 id 和 html 关联起来,在第一栏中输入一个已定义的常量比如 idh_bqsm,在第二栏里选择一个页面
编译
从菜单选择 test\htmlhelp api
command 选择 hh_help_context
再 map number 中输入一个 id 按 test 如果正常应该条转到正确的页面
十豆三 2010-04-27
  • 打赏
  • 举报
回复
VFP中应用帮助文件,如何在任何表单中实时启动帮助文件中的某一条?其ID如何得到?

在VFP中,我已完成了HELP的文件编译与运用,但不能有任一表单中调用帮助文件中的某一帮助条款。需实现的功能:
如一表单A中有一command按钮,当光标走到command按钮时会自动显示“这是什么?”当点击“这是什么?”时,则启动HELP的相应帮助条款!
  各位高手怎么实现这一功能呢?

*----------------------------



如果你采用id方式,你需要:
1、在help文件中知道相应帮助条目的id
2、在系统开始时,执行
set help on
set help to 文件名
3、当点击“这时什么”时,执行
help id 条目的id
如果不采用id方式,可以:
1、在系统开始时,执行
set help on
set help to 文件名
2、当点击“这时什么”时,执行
help 你希望显示的topic



-------------------------------------------------

方法步骤:
1\将表单属性whatthishelp及whatthisbutton设置为.t. whatthishelpid设置为-1
minbutton及maxbutton设置为.f.
2\添加表单的属性helpprev
3\表单的init代码:thisform.helpprev=set("help",1) && 保存原系统的帮助文件
4\表单的click及activate代码:
set help to addbs(justpath(sys(1271,thisform)))+"帮助文件名称.hlp"
5\打开需要设置的控件的属性,将whatthishelpid=11
&& 11与已经制作好的"帮助文件名称.rtf"的脚注标识的对应数值相同,如:aaa=11
&& 先在word软件中制作"帮助文件名称.rtf",然后制作"帮助文件名称.hlp"(可用microsoft help workshop 软件).

全部完成后,在使用时单击表单右上角的?按钮,然后鼠标单击已经设置的控件,会显示"帮助文件名称.rtf"中相关的信息.
(制作"帮助文件名称.rtf"及用microsoft help workshop 软件制作"帮助文件名称.hlp"的方法略)


---------------------------------------------------
是因为缺少相关的资源文件 foxhhelp9.exe、foxhhelpps9.dll。foxhhelp9.exe运用之后就能调用了。
还可以通过api方式调用的。

* help ID thisForm.helpContextID
* 可将 help ID 替换为 do helpId with ....
do helpid with 1001 && 如调用编号为“1001”

* 功能描述:API方式调用CHM帮助文档(不用foxtools.fll获取窗口句柄)
* 参数说明: tnTopic = 调用主题编号
function HelpId
lparameters tnTopic && 主题编号
declare integer FindWindow in WIN32API string,string
declare integer HtmlHelp in hhctrl.ocx integer hwndCaller,;
string pszFile,integer uCommand,integer dwData
local lcHelp,lhwndCaller
lcHelp = 'rsgzhelp.chm' && chm帮助文档的位置
* 用FindWindow,省去用foxtools.fll中的mainhwnd()函数了
lhwndCaller = FindWindow(0,_screen.caption)
* 若调用主题不存在(不显示),再用主题编号为0调用显示出chm
if HtmlHelp(lhwndCaller,lcHelp,tnTopic,0) = 0
HtmlHelp(lhwndCaller,lcHelp,0,0) && 编号不存在则为0
endif
endfunc

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧