求解关于Pos函数的奇怪问题 那个网页是不是动态生成的?如*.php.*.asp等 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在线读取HTML后,先显示一下,再用Pos, 能不能显示很关键! 本机测试的HTML能用DOWN下的肯定能用,可能你在哪里疏忽了. 可能是要完全dwon下来才能pos吧 用的HTML控件?第三方控件就是这样的啦,我前一段用NMUDP等几个控件也是被搞得焦头烂额的,最后还是不得不自已编程摆平。 实际上,从网上读来的东西只是一个串。你是不是搞错了?用document.all(0,0)得到的网页的源程序存在了一个单一的串上。 大概我还没说清楚,我用的是TWebBrowser控件。我保证,HTML文档已经下载完成。因为我验证过下载下来的文档。好吧,我写一下部分源代码。其实并不需要保存文档,保存只是为了验证文档的完整性。主程序中... WebBrowser.Navigate('www.sina.com.cn'); //以新浪为例...然后在OnDocumentComplete中触发procedure TMainForm.OnDocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);begin if FFirstDisp=pDisp then //FFirstDisp是在BeforeNavigate2取得的pDisp begin //这一段主要是为了验证全文是否已下载完成 FSuccess:=True; FHTMLStr:=GetHtml(FWBrowser); //GetHtml函数返回string类型的值 SearchResult; end;end;function TMainForm.GetHtml(const WebBrowser: TWebBrowser): string;const BufSize = $10000;var Size: Int64; Stream: IStream; hHTMLText: HGLOBAL; psi: IPersistStreamInit;begin if not Assigned(WebBrowser.Document) then Exit; OleCheck(WebBrowser.Document.QueryInterface(IPersistStreamInit, psi)); try //OleCheck(psi.GetSizeMax(Size)); hHTMLText := GlobalAlloc(GPTR, BufSize); if 0 = hHTMLText then RaiseLastWin32Error; OleCheck(CreateStreamOnHGlobal(hHTMLText,True, Stream)); try OleCheck(psi.Save(Stream, False)); Size := StrLen(PChar(hHTMLText)); SetLength(Result, Size); CopyMemory(PChar(Result), Pointer(hHTMLText),Size); finally Stream := nil; end; finally psi := nil; end;end; //这个函数也不是我写的,不过它可以正常工作procedure TMainForm.SearchResult;begin if Pos('www.sina.com',FHTMLStr)>0 then begin //对其进行处理 end;end;这段代码在本地硬盘已经能正常工作了,为了防止万一我还用了一个TStringList变量把FHTMLStr保存在硬盘上,然后再读出。我不知道问题出在哪里,还请大家不吝赐教。 字符数组的问题 GetInt64Prop返回值问题 treeview 节点数值的问 如何在paradox的数据库中保存图片类型的数据 求助!Delphi 加载窗口类的时候报错了 有关数值操作,请帮忙,thanks delphi+mapx的问题,求救!怎样在地图上根据经纬度显示点? 如何收藏我感兴趣得问题? 请问table或query的update属性的具体作用是什么? 时间查询任何做? delphi中怎样使用gif图形,用image组件好像不行? paradox的INSERT语句
再用Pos, 能不能显示很关键!
用document.all(0,0)得到的网页的源程序存在了一个单一的串上。
因为我验证过下载下来的文档。好吧,我写一下部分源代码。其实并不需要保存
文档,保存只是为了验证文档的完整性。主程序中
...
WebBrowser.Navigate('www.sina.com.cn'); //以新浪为例
...然后在OnDocumentComplete中触发procedure TMainForm.OnDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
if FFirstDisp=pDisp then //FFirstDisp是在BeforeNavigate2取得的pDisp
begin //这一段主要是为了验证全文是否已下载完成
FSuccess:=True;
FHTMLStr:=GetHtml(FWBrowser); //GetHtml函数返回string类型的值
SearchResult;
end;
end;function TMainForm.GetHtml(const WebBrowser: TWebBrowser): string;
const
BufSize = $10000;
var
Size: Int64;
Stream: IStream;
hHTMLText: HGLOBAL;
psi: IPersistStreamInit;
begin
if not Assigned(WebBrowser.Document) then Exit; OleCheck(WebBrowser.Document.QueryInterface(IPersistStreamInit, psi));
try
//OleCheck(psi.GetSizeMax(Size));
hHTMLText := GlobalAlloc(GPTR, BufSize);
if 0 = hHTMLText then RaiseLastWin32Error; OleCheck(CreateStreamOnHGlobal(hHTMLText,True, Stream));
try
OleCheck(psi.Save(Stream, False)); Size := StrLen(PChar(hHTMLText));
SetLength(Result, Size);
CopyMemory(PChar(Result), Pointer(hHTMLText),Size);
finally
Stream := nil;
end;
finally
psi := nil;
end;
end; //这个函数也不是我写的,不过它可以正常工作procedure TMainForm.SearchResult;
begin
if Pos('www.sina.com',FHTMLStr)>0 then
begin
//对其进行处理
end;
end;这段代码在本地硬盘已经能正常工作了,为了防止万一我还用了一个TStringList
变量把FHTMLStr保存在硬盘上,然后再读出。我不知道问题出在哪里,还请大家不吝赐教。