×

delphi webbrowser webbrowser delphi

delphi webbrowser(delphi webbrowser 内存释放问题 100分)

admin admin 发表于2023-10-12 23:19:24 浏览25 评论0

抢沙发发表评论

本文目录

delphi webbrowser 内存释放问题 100分

大概是频刷网页的原因,不好解决.1、动态创建它 WebBrowser1:= TWebBrowser.Create(Self); WebBrowser1.Parent:= TWinControl(Self);每次都把它释放掉,重建以清理内存。还不行就下杀手了。2、过一段时间自动重启程序。就是再加一个小程序来控制一段时间重启你的程序。ShellExecute(this-》m_hWnd,“open“,“calc.exe“,““,““, SW_SHOW ); 启动方法关闭的方法大概是,findwindow来获取你的程序的主窗口,然后向它发送一个退出消息。上面方法我曾用过,可行。具体使用语法什么的不会就百度一下,相信你能搞定了,不多说。

delphi 怎么判断webbrowser打开网页成功

在同一个WebBrowser里显示,可以这样:再放一个小的WebBrowser2,设置它在WebBrowser1下面(设置Visible为False好象无效),// 在WebBrowser1的OnNewWindow2事件中:procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;var ppDisp: IDispatch; var Cancel: WordBool);beginppDisp := WebBrowser2.Application; // 新的窗口先指向WebBrowser2end;// 在WebBrowser2的OnBeforeNavigate2事件中:procedure TForm1.WebBrowser2BeforeNavigate2(Sender: TObject;const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,Headers: OleVariant; var Cancel: WordBool);beginWebBrowser1.Navigate(string(URL)); // 再指回WebBrowser1Cancel := True;end;可以这样,窗体中放置两个PANEL,其中PANEL1中放WebBrowser1,PANEL2中放WebBrowser2,PANEL1和PANEL2、WebBrowser1和WebBrowser2的LEFT,TOP等所有属性设为一样。PANEL2的VISIBLE设为FALSE。然后添加代码如下即可:procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;var ppDisp: IDispatch; var Cancel: WordBool);beginppDisp:=WebBrowser2.Application;panel1.Visible:=false;panel2.Visible:=true;end;procedure TForm1.WebBrowser2NewWindow2(Sender: TObject;var ppDisp: IDispatch; var Cancel: WordBool);beginppDisp:=WebBrowser1.Application;panel2.Visible:=false;panel1.Visible:=true我只回答第一个问题,看你给多少分:1 NewWindow2的在接口中定义的原形:procedure NewWindow2(Sender: TObject; var ppDisp: IDispatch;var Cancel: WordBool);2 通过传递一个WebBrowser的控制借口给ppDisp可以让新网页在指定的Wb中浏览ppDisp:=WebBrowser1.Browser.ControlInterface;3 在刚才传递的WebBrowser的OnBeforeNavigate2事件中就可以获得将要打开的URL了!function SaveToStream(AStream: TStream): HRESULT;varIpStream: IPersistStreamInit;beginwith browser1 dobeginwhile ReadyState 《》 READYSTATE_COMPLETE doForms.Application.ProcessMessages;if Assigned(Document) thenbeginIpStream := Document as IPersistStreamInit;Result := IpStream.save(TStreamAdapter.Create(AStream), TRUE);end else Result := S_FALSE;end;end;function Loadfromstream(AStream:TStream):hresult;beginwith browser1 dobeginif not Assigned(Document) thenbeginnavigate2(’about:blank’,0,0,0,0);while readystate 《》 READYSTATE_COMPLETE do Forms.Application.ProcessMessages;end;AStream.seek(0, 0);Result := (Document as IPersistStreamInit).Load(TStreamadapter.Create(AStream));end;end;

delphi webbrowser webBrowser可以获取ajax生成的内容吗

WebBrowser 调用的是 windows 系统提供的 OLE 控件,基于 IE 浏览器。通常如果不特别指定 TWebBrowser 版本的话,Webbrowser 控件会使用 IE7 兼容模式来显示网页内容。一般来说,WebBrowser 的浏览效果与在 IE 里浏览的效果是一样的,因此,ajax 也能获取内容。由于 ajax 是异步通讯,其实际来说,其获取的数据,都是向服务器发送请求,再更新网页局部页面,因此,如果只是想获取 ajax 的数据,可以直接找到 ajax 的 post/get 的 url,直接访问即可,通常获取数据可能的格式是 json,解析一下就可以了。

delphi中的webbrowser ,如何获取网站返回状态码

继承TWebbrowser类,网上去找 DWebBrowserEvents2 的接口声明。重写Invoke函数,在里面添加对NavigateError事件的处理。。。就能得到这个状态码了。

delphi webbrowser浏览器控件;里面打开的网页,网页任意一点的坐标怎么获取

这个需要js或者swf的配合或者是写BHO--------------随你怎么想 我用的js 记录点击信息 然后用swf做的点击报表BHO需要安装,在本机上测试可以用,其他用户需要安装,所以不现实webbrowser是一个activex控件,也就是说在webbrowser区域内是不属于vcl管辖的只能是ax返回消息给vcl,这就是我说的js点击节点的时候webbrowser会响应给vcl,但是如果在空白处或者非链接,按钮等元素是没有响应的,用js监听鼠标按下事件,然后回调给vclswf的绘图相对简单,加载页面之后,再根据点击点阵绘制点击热区,可以有效反映页面内的点击情况

请教:如何在Delphi 的 Webbrowser 里 调用或执行 JS 带参 函数或过程

在 delphi 里,使用 WebBrowser 执行 js 代码,参阅以下示例:

procedure TForm1.btn1Click(Sender: TObject);  var    doc:olevariant;    str:string;  begin      doc:=wb1.Document;      //执行js      wb1.OleObject.document.parentWindow.execScript(’zbxxcx(“50E13DA0-728B-455E-89EC-18B71477C47E“)’,’JavaScript’);  end;

delphi里如何动态创建WebBrowser控件,并通过其navigate()属性调出需要显示的地址

从代码看,少了一句给 WebBrowser 指定显示的容器(窗体或面板的 句柄):

procedure TForm1.Button1Click(Sender: TObject);var wb:Twebbrowser;begin  wb:=Twebbrowser.Create(self);  wb.ParentWindow := Handle; //新增  wb.Left:=208;  wb.Top:=32;  wb.Height:=300;  wb.Width:=500;  wb.Navigate(’D:\123’);end;

运行测试代码截图:

delphi 怎么在WebBrowser控件里获得光标的位置

网上借鉴的,思路如下WebBrowser没有mouseMove事件,但它还是由WinControl继承下来的,所以有窗体handle,自定义一个win消息捕获来自此handle的鼠标移动use MSHTML; private { Private declarations } FLoaded: Boolean; procedure AppMsg(var Msg: TagMsg; var Handled: Boolean); procedure GetContronl; end;procedure TForm1.FormShow(Sender: TObject);begin FLoaded:=False; Application.OnMessage := AppMsg; wb1.Navigate(’about:《head》《title》标题》《/title》《body》页面内容《/body》’); end;procedure TForm1.wb1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);begin FLoaded:=True;end;procedure TForm1.AppMsg(var Msg: TagMsg; var Handled: Boolean);var mPoint : TPoint;begin if IsChild(wb1.Handle, Msg.Hwnd) and (Msg.Message = WM_MOUSEMOVE) and FLoaded then begin GetCursorPos(mPoint); Caption:=IntToStr(mPoint.X); GetContronl; Handled:=True; end;end;procedure TForm1.GetContronl;var myPoint: TPoint;begin //myPoint := Mouse.CursorPos; myPoint := wb1.ScreenToClient(myPoint); Caption := IntToStr(myPoint.X)+’+’+IntToStr(myPoint.Y);end;