没办法,还是做了个离线阅读器——CJ (0分)

  • 主题发起人 主题发起人 CJ
  • 开始时间 开始时间
左兄,要点是必须创建一个 Safearray,过程是:
1.初始化:
procedure TForm1.FormActivate(Sender: TObject);
begin
WebBrowser_V11.Navigate('about:blank', EmptyParam, EmptyParam, EmptyParam, EmptyParam);
end;

2.调用 XSLT 以及写入 TWebBrowser
procedure TForm1.ToolButton1Click(Sender: TObject);
var xmlobj, xslobj, xslt, proc: Variant;
HTMLDocument: IHTMLDocument2;
vv: Variant;
ss: string;
begin
xmlobj := CreateOLEObject('MSXML2.FreeThreadedDOMDocument');
xslobj := CreateOLEObject('MSXML2.FreeThreadedDOMDocument');
xslt := CreateOLEObject('MSXML2.XSLTemplate');
xmlobj.async := false;
xmlobj.load('http://www.delphibbs.com/xml/new2/listq_.asp');
xslobj.async := false;
xmlobj.load('http://www.delphibbs.com/xml/new2/listq_1.xsl');
xslt.stylesheet := xslobj;
proc := xslt.createProcessor;
proc.input := xmlobj;
proc.transform;
ss := proc.output;
vv := VarArrayCreate([0, 0], varVariant);
vv[0] := ss;
HTMLDocument := WebBrowser_V11.Document as IHTMLDocument2;
HTMLDocument.Write(PSafeArray(TVarData(vv).VArray));
HTMLDocument.Close;
proc := unAssigned;
xslt := unAssigned;
xmlobj := unAssigned;
xslobj := unAssigned;
end;

 
再解释一下:
FreeThreadedDOMDocument 和do
MDocument,DOMDocument26,DOMDocument30一样都可以
- 从服务器上下载 xml/xsl,例如 .load('http://...../.xml');
- 从硬盘上读取 xml/xsl, 例如 .load('c:/...../.xml');
- 直接用string传入 xml/xsl, 例如 .loadxml(ss);其中 ss 中是 xml/xsl
非常方便啊。
对于离线阅读器可以从数据库中得到数据生成 xml 字符串(可用ADO的 saveXML),
从硬盘上读取不同 skin 的 xsl,解析后直接灌入浏览器控件,
这几招,招招命中要害,是我新近修炼得到,效果保证好!
差点忘了,所需要的 Unit 都是标准的,但是得手工加入:
implementation
uses activeX, comObj, MSHTML;
CJ,可以从 Project | Import Type Library ... 进入找 Microsoft XML, v3.0
就能输入了。
 
>我把它转化为INTERBASE了,放在我们局域网上的服务器上,又编了一个
>离线阅读器,用起来很快很方便,只是数据库变为200多兆了。
昨天我把这270多兆的数据库放到本机上也非常快,但为什么Access数据库那么慢?
我把Letters表分为了Titles,Letters两个表,给Letters表的ParentID字段加了一个
索引。谢谢大富翁的数据库,它使我对Interbase有信心了!
 
多谢多谢,我补课先……
 
2001.4.19
老板:
唉,在看你这个帖子以前,我就扔掉了著名的XDOM了,呵呵,原因很简单,
我看了近一个半小时它的源码,发现多语言支持有问题...faint...
本来我是考虑,不是每人都有MS IE5的,现在看来,那是没办法的事了。
我现在用MSXML 3.0 有帮助,很好用,呵呵...不知道什么环境下才能有
MSXML 3。IE 5.5?不过我还是使用3,好象2里面Encoding有Bug...
不过您的提示很有用,目前我还仅使用了很少的功能。明天有时间去看看。
唉,该死的著名的XDOM!今天两个小时花在XML上,其中一个半小时就看它
了...
另外,我那个MSXML没有显示在列表里,一定要浏览一个MSXML3.DLL。
2001.4.20
Easy Rich Auto Update 初露端倪,
核心设计已经完成,剩下只是工作量上的问题了。ROOM UPDATE部分已经完成。
如果进展顺利,我又有足够时间,那么,估计下周可以公布Preview
最后,我还是使用了MSXML2,唉,真方便,比那个著名的XDOM强多了...
老板:
1.还是建议您给个类似的参数定义:
STARTID:从某一ID号开始提取数据;
NUMBER: 返回NUMBER个帖子;
就是类似于 SELECT TOP :NUMBER WHERE ID >= :STARTID
2.DTD是什么东西的缩写?呵呵...这个好象以前老师没教过...
3.我提出的那个提取帖子的BUG你还是没有改啊?看看您自己的例子数据吧:
<?xml version="1.0" encoding="gb2312" ?>
<LIST>
<HEADER>
<DATEFROM>4/10/2001 00:00:00</DATEFROM>
<DATETO>4/10/2001 23:59:00</DATETO>
<RecCount>361</RecCount>
</HEADER>
<Q ID="495127">
<from>bslj</from>
<datetime>01-4-11 10:42:03</datetime>
<parent>0</parent>
</Q>
<Q ID="498868">
<from>bslj</from>
<datetime>01-4-11 10:42:03</datetime>
<parent>495127</parent>
</Q>
<ERROR>错误:无效时间:4/10/2001 00:00:00 --- 4/10/2001 23:59:00 //难道非ERROR不可? </ERROR>
</LIST>
我用以下URL访问,
http://www.delphibbs.com/xml/new2/chkl.asp?datefrom=4/9/2001&amp;dateto=4/9/2001
返回以下数据
<?xml version="1.0" encoding="gb2312" ?>
- <LIST>
- <HEADER>
<DATEFROM>4/9/2001</DATEFROM>
<DATETO>4/9/2001</DATETO>
</HEADER>
<ERROR>错误:无效时间:4/9/2001 --- 4/9/2001</ERROR>
</LIST>
用以下URL返回数据正确,篇幅关系,不贴了
http://www.delphibbs.com/xml/new2/chkl.asp?datefrom=4/9/2001&amp;dateto=4/10/2001
 
CJ,
1.您的建议的功能不错,我正在加入中。
2.DTD =do
cument Type Definition (入门知识:http://xml101.com/dtd/dtd_intro.asp)
3.应该用 datefrom=4/9/2001 0:0:0&amp;dateto=4/9/2001 23:59:59
否则 SQL Server 就报那个错。
如果进入过新版大富翁论坛,则 MSXML 3 已经自动安装到客户机上了(有点强制性质的):)
还有请注意了 DFWML 规范将出 0.2,所有根节点将都变成都是 DFWML type="xxx"。
 
奇怪,我的MSXML显示在列表里了啊
我还是靠导入这个tlb才搞定的
正在狂看msxml的sdk中
 
一个好消息和一个坏消息:
好消息:
花了整天,搞定了个大概,基本上能运转了 但未做整体测试。
坏消息:
刚刚接到电话,接下来会很忙,估计有一段时间不能整这个东西。
总体测试还没做,更没有达到我满意的地步,还是发了它的源码
谁有空谁改进吧。
发货了,谁要谁来DOWN哦
 
你把xml都搞定了,我却在跟ADO和Interbase打架
看这里:http://www.delphibbs.com/delphibbs/DispQ.asp?LID=511458
 
一个好消息和一个坏消息:
好消息:
花了整天,搞定了个大概,基本上能运转了 但未做整体测试。
坏消息:
刚刚接到电话,接下来会很忙,估计有一段时间不能整这个东西。
总体测试还没做,更没有达到我满意的地步,还是发了它的源码
谁有空谁改进吧。
目前已经能成功获得新问题列表,更新帖子的函数也已经完成,
发货了,谁要谁来DOWN哦
 

CJ,源码在哪里啊?上哪DOWN啊?
你的CJ Software上面没有
 
老板:4月20-21的问题列表怎么会这样?哎,你能不能减掉那些捣乱的HTML代码?
还有,论坛的速度经常造成程序错误。唉,会漏更新帖子的。
- <HEADER>
<DATEFROM>04/20/2001</DATEFROM>
<DATETO>04/21/2001</DATETO>
<RecCount>1691</RecCount>
</HEADER
...
+ <Q ID="511027"
The XML page cannot be displayed
Cannot view XML input using XSL style sheet. Please correct the error and then
click the Refresh button, or try again later.

--------------------------------------------------------------------------------
Missing equals sign between attribute and attribute value. Line 83, Position 8
<Q ID <Q ID="511012"><from>lmf888</from><datetime>01-4-20 16:57:54</datetime><parent>508999</parent></Q>
-------^
左:我记得我发上去了啊?我看看先
 
CJ,你的这个东西根本就不能用呀,
我下载了哪个最大的数据库,
可你的程序非说哪不是个数据库。
 
CJ,直接把url给出来好了,免得东查西找的
 
各个高手:
chm好,直接支持全文检索,速度也快,又可以什么都不做!
以后大富翁上提供的离线浏览数据是html格式,拿回来连接好
旧的数据,编译成chm就搞定了。
 
htw:双手赞成,呵呵,不过,什么叫:“
以后大富翁上提供的离线浏览数据是html格式”?
而且,有没有数据库TO CHM的程序啊?以前有过一个,用不了,没办法...
如果你有能用的,麻烦把源码和可执行文件(不要有run time package)寄我一份
谢谢:cjcjc@online.sh.cn
不是只提供数据库和XML(自己下载)的吗?
老板:那个问题可能是我用了Node.Parent.RemoveChild(Node)造成的
不过程序照走啊,呵呵...
左:哦,页面没有改:
http://chsoftware.126.com/download/EasyRichUpdate.rar
http://www.ue100.com/grzy/chsoftware/download/EasyRichUpdate.rar
Update的时候,真有点收股票的感觉。

程云:改过了的不能用?可能是DAO版本的问题,转ACCESS2000看看?
不过那东西,真不怎么样,写的时候主要是为了多关键字和自定义
SELECT用的。
 
CJ:
你的两个url进得去吗?
我这有改自Energy (http://lgc.delphibbs.com/ 2000-09-19 05:43:46)的mdb转chm程序(BCB)
 
cj:
你的链接里把cj都打成ch了:-(
键盘坏了?嘿嘿
 
cj,当下来没有源码,而且在我的机器上出错,无法关闭:-(
你的源码在哪里?页面上没有看到连接
 
少了一个Settings.xml文件,呵呵,可执行文件最后修订版(最终功能未测试):
http://cJsoftware.126.com/download/EasyRichUpdate.rar
http://www.ue100.com/grzy/cJsoftware/download/EasyRichUpdate.rar
源码比较乱,未整理,才写了两天多嘛,能这样,就不错了:
http://cJsoftware.126.com/download/easyrichupdatesrc.zip
http://www.ue100.com/grzy/cJsoftware/download/easyrichupdatesrc.zip
 

Similar threads

回复
0
查看
1K
不得闲
D
回复
0
查看
924
DelphiTeacher的专栏
D
D
回复
0
查看
879
DelphiTeacher的专栏
D
后退
顶部