关于CHM中内部网页信息URL的实现(50分)

  • 主题发起人 主题发起人 creation-zy
  • 开始时间 开始时间
C

creation-zy

Unregistered / Unconfirmed
GUEST, unregistred user!
打开一个CHM文件,在网页里点击右键->属性,可以看到当前页面的URL信息,例如:
mk:@MSITStore:D:/Books/HUBDOG.CHM::/在Report_Builder中增加自定义函数.htm
使我不解的是,当我关闭该CHM文件之后,在IE中输入该URL,它居然能够定位到CHM内部的页面!
和在CHM中查看几乎没有区别,只是没有左侧的工具栏而已。
我想知道是不是和CHM关联的ActiveX控件给系统挂接了一个接口,使IE能够定位到CHM的内部?
如果不是,又是怎么实现的呢? 如何用Delphi编程实现这样的效果?

我又发现了一个问题:
如果我在Delphi程序的OpenDialog中输入该URL,在关闭对话框之后,试图打开该文件时,程序
报错——Shell32.dll Access .... at 00000.. 按关闭按钮都不起作用!怎么回事?? (Win2K
Advanced Server SP3, IE6 2600, Delphi5 SP1)

大家只要告诉我那里有相关资料就可以了,如果有详细的回答,我会加分的。
 
这就如果写isapi 是样的道理 mk:@MSITStore:D:/Books/HUBDOG.CHM::/在Report_Builder中增加自定义函数.htm
是访问这个D:/Books/HUBDOG.CHM后面的参数是传给这个CHM来处理的,也就是说你看到
的内容是有CHM根据你传的参数生成的。CHM 是把内容以HTTP协议的方式输出的。而OPENDALOG 要打开的
物理文件,因为跟本没有这个文件,当然也就报错了。
 
谢谢alvinlv!

>>内容是有CHM根据你传的参数生成的
问题是CHM并不是ISAPI呀,我觉得应该是和它相关联的ActiveX弄的。如何用Delphi实现呢?
(比如我自己定义一种文件格式,类似CHM,如何让IE识别呢?)
 
参数的传递是由mk:@MSITStore作为标记通知Explorer负责的。然后由Explorer将参数
传给CHM,CHM将结果输出浏览器解释结果并显示。
 
请问,我是不是用其他方式
也就是说执行一个调用CHM文件,然后向它传递参数就可以得到网页数据呢?
还有,如果我想让我的某个文件也支持同样的参数传递是不是可以呢?
那现在流行的电子图书软件是不是就是根据这个原理做的呀?
 
呵呵,找到了一个好东西:

res协议可以使浏览器显示储存在资源中HTML
procedure TForm1.LoadHTMLResource;
var
Flags, TargetFrameName, PostData, Headers: OleVariant;
begin
WebBrowser1.Navigate('res://' + Application.ExeName + '/myhtml', Flags, TargetFrameName, PostData, Headers)
end;

资源文件
MYHTML 23 "./html/myhtml.htm"

MOREHTML 23 "./html/morehtml.htm"

用bcc32编译
{$R *.RES}
{$R HTML.RES}


不过还有一个问题——如何压缩资源呢?
 
你好creation-zy!如果把CHM文件作为资源文件,怎样用webbrowser调用呢?
 
多人接受答案了。
 
后退
顶部