小
小雨哥
Unregistered / Unconfirmed
GUEST, unregistred user!
那天看到有人说大富翁界面不好看,这里给些直接获取和处理XML数据、直接存取WebBrowser控件的片断代码,从而可以自己重新定义和显示自己想要的论坛显示风格--只要你愿意。(100分)<br />因为没什么时间,那天看到了,但没时间回复,我这里提供一个代码片断,是直接获取大
富翁论坛的html页面中的XML数据岛的。大富翁论坛的脚本实际上也是利用这个数据岛再
格式化为现在大家看到的效果的。
我们知道,如果获得了标准的XML数据,那么我们可以使用XSL来将它格式化为任意华丽的
显示布局。我下面的代码直接利用TWebBrowser控件+HTMLDocument,这不是个好方法,但
作为演示应该也可以了。
1)在 WebBrowser 的 OnDocumentComplet 中写:
procedure TForm1.WebBrowserDocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
if Pos('delphibbs.com',lowercase(URL))>0 then
GetXML_DataIsland(Sender);
end;
2)写 GetXML_DataIsland 方法:
procedure TForm1.GetXML_DataIsland (Sender: TObject);
var
WB : TWebBrowser;
HTMLDocument2:IHTMLDocument2;
HTMLDocument3:IHTMLDocument3;
XMLElement:IHTMLElement;
sL:TStringList;
begin
WB := TWebBrowser( Sender );
if WB.Document.QueryInterface(IHTMLDocument2,HTMLDocument2)=S_OK then
begin
if (Pos('delphibbs.com',lowercase(HTMLDocument2.url))>0)and(lowercase(HTMLDocument2.mimeType)='html document') then
begin
if HTMLDocument2.QueryInterface(IHTMLDocument3,HTMLDocument3)=S_OK then
begin
XMLElement:=HTMLDocument3.getElementById('mainxml');
if XMLElement<>nil then
begin
sL:=TStringList.Create;
sL.Add(XMLElement.innerHTML);
// 如果你已经有了一个漂亮的XSL,在这里插入到XML数据岛去:<?xml-stylesheet type="text/xsl" href="dfwXsl.xsl"?>
// 如果你没有自己设计出漂亮的XSL,那只能看到XML数据了
// ......
sL.SaveToFile(ExtractFilePath(Application.ExeName)+'dfwXml.xml');
WB.Navigate(ExtractFilePath(Application.ExeName)+'dfwXml.xml');
sL.Free;
end;
end;
end;
end;
end;
这里用到的TWebBrowser在控件板Internet页,IHTMLDocument接口,需要自己利用IDE导入
C:/WINDOWS/system32/MSHTML.TLB类型库。这样的做法有二个缺点,一是必须在Browser加
载完成后才能提取,二是没有减少大富翁服务器的实际流量,所以只是一个演示,供参考。
富翁论坛的html页面中的XML数据岛的。大富翁论坛的脚本实际上也是利用这个数据岛再
格式化为现在大家看到的效果的。
我们知道,如果获得了标准的XML数据,那么我们可以使用XSL来将它格式化为任意华丽的
显示布局。我下面的代码直接利用TWebBrowser控件+HTMLDocument,这不是个好方法,但
作为演示应该也可以了。
1)在 WebBrowser 的 OnDocumentComplet 中写:
procedure TForm1.WebBrowserDocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
if Pos('delphibbs.com',lowercase(URL))>0 then
GetXML_DataIsland(Sender);
end;
2)写 GetXML_DataIsland 方法:
procedure TForm1.GetXML_DataIsland (Sender: TObject);
var
WB : TWebBrowser;
HTMLDocument2:IHTMLDocument2;
HTMLDocument3:IHTMLDocument3;
XMLElement:IHTMLElement;
sL:TStringList;
begin
WB := TWebBrowser( Sender );
if WB.Document.QueryInterface(IHTMLDocument2,HTMLDocument2)=S_OK then
begin
if (Pos('delphibbs.com',lowercase(HTMLDocument2.url))>0)and(lowercase(HTMLDocument2.mimeType)='html document') then
begin
if HTMLDocument2.QueryInterface(IHTMLDocument3,HTMLDocument3)=S_OK then
begin
XMLElement:=HTMLDocument3.getElementById('mainxml');
if XMLElement<>nil then
begin
sL:=TStringList.Create;
sL.Add(XMLElement.innerHTML);
// 如果你已经有了一个漂亮的XSL,在这里插入到XML数据岛去:<?xml-stylesheet type="text/xsl" href="dfwXsl.xsl"?>
// 如果你没有自己设计出漂亮的XSL,那只能看到XML数据了
// ......
sL.SaveToFile(ExtractFilePath(Application.ExeName)+'dfwXml.xml');
WB.Navigate(ExtractFilePath(Application.ExeName)+'dfwXml.xml');
sL.Free;
end;
end;
end;
end;
end;
这里用到的TWebBrowser在控件板Internet页,IHTMLDocument接口,需要自己利用IDE导入
C:/WINDOWS/system32/MSHTML.TLB类型库。这样的做法有二个缺点,一是必须在Browser加
载完成后才能提取,二是没有减少大富翁服务器的实际流量,所以只是一个演示,供参考。