delfis
asked on
hide TWebBrowser
I need to make TWebBrowser not visible but operate same like visible?
Let say put on hiden form but stil load pages normaly. is it posible?
Let say put on hiden form but stil load pages normaly. is it posible?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
or put a TPanel over it.
just create it dynamincally, so that it is not visible
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, OleCtrls, SHDocVw_TLB;
type
TForm1 = class(TForm)
Memo1: TMemo;
bgo: TButton;
procedure bgoClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
HiddenWebBrowser: TWebBrowser;
procedure HiddenWebBrowser_BeforeNav igate2(Sen der: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
procedure HiddenWebBrowser_NavigateC omplete2(S ender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure HiddenWebBrowser_NavigateE rror(Sende r: TObject;
const pDisp: IDispatch; var URL, Frame, StatusCode: OleVariant;
var Cancel: WordBool);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
// create our hidden webbrowser
HiddenWebBrowser := TWebBrowser.Create(nil);
HiddenWebBrowser.OnBeforeN avigate2 := HiddenWebBrowser_BeforeNav igate2;
HiddenWebBrowser.OnNavigat eComplete2 := HiddenWebBrowser_NavigateC omplete2;
HiddenWebBrowser.OnNavigat eError := HiddenWebBrowser_NavigateE rror;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if assigned(HiddenWebBrowser) then
FreeAndNil(HiddenWebBrowse r);
end;
procedure TForm1.HiddenWebBrowser_Be foreNaviga te2(Sender : TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
memo1.lines.add('before navigate: ' + url);
end;
procedure TForm1.HiddenWebBrowser_Na vigateComp lete2(Send er: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
memo1.lines.add('navigate complete: ' + url);
end;
procedure TForm1.HiddenWebBrowser_Na vigateErro r(Sender: TObject;
const pDisp: IDispatch; var URL, Frame, StatusCode: OleVariant;
var Cancel: WordBool);
begin
memo1.lines.add('navigate error: ' + url + #13#10 + statuscode);
end;
procedure TForm1.bgoClick(Sender: TObject);
begin
HiddenWebBrowser.Navigate( 'http://yahoo.com');
end;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, OleCtrls, SHDocVw_TLB;
type
TForm1 = class(TForm)
Memo1: TMemo;
bgo: TButton;
procedure bgoClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
HiddenWebBrowser: TWebBrowser;
procedure HiddenWebBrowser_BeforeNav
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
procedure HiddenWebBrowser_NavigateC
const pDisp: IDispatch; var URL: OleVariant);
procedure HiddenWebBrowser_NavigateE
const pDisp: IDispatch; var URL, Frame, StatusCode: OleVariant;
var Cancel: WordBool);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
// create our hidden webbrowser
HiddenWebBrowser := TWebBrowser.Create(nil);
HiddenWebBrowser.OnBeforeN
HiddenWebBrowser.OnNavigat
HiddenWebBrowser.OnNavigat
end;
procedure TForm1.FormDestroy(Sender:
begin
if assigned(HiddenWebBrowser)
FreeAndNil(HiddenWebBrowse
end;
procedure TForm1.HiddenWebBrowser_Be
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
memo1.lines.add('before navigate: ' + url);
end;
procedure TForm1.HiddenWebBrowser_Na
const pDisp: IDispatch; var URL: OleVariant);
begin
memo1.lines.add('navigate complete: ' + url);
end;
procedure TForm1.HiddenWebBrowser_Na
const pDisp: IDispatch; var URL, Frame, StatusCode: OleVariant;
var Cancel: WordBool);
begin
memo1.lines.add('navigate error: ' + url + #13#10 + statuscode);
end;
procedure TForm1.bgoClick(Sender: TObject);
begin
HiddenWebBrowser.Navigate(
end;
end.
Thats fine as long as you aware of the limitations. If you keep the browser control hidden, the DocumentComplete event will NOT fire. This is documented by MS and can be verified with the code below:
Russell
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, OleCtrls, SHDocVw;
type
TForm1 = class(TForm)
Memo1: TMemo;
bgo: TButton;
procedure bgoClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
HiddenWebBrowser: TWebBrowser;
procedure HiddenWebBrowser_BeforeNav
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
procedure HiddenWebBrowser_NavigateC
const pDisp: IDispatch; var URL: OleVariant);
procedure HiddenWebBrowser_DocumentC
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
// create our hidden webbrowser
HiddenWebBrowser := TWebBrowser.Create(nil);
HiddenWebBrowser.OnBeforeN
HiddenWebBrowser.OnNavigat
HiddenWebBrowser.OnDocumen
end;
procedure TForm1.FormDestroy(Sender:
begin
if assigned(HiddenWebBrowser)
FreeAndNil(HiddenWebBrowse
end;
procedure TForm1.HiddenWebBrowser_Do
begin
memo1.lines.add('document complete: ' + url);
end;
procedure TForm1.HiddenWebBrowser_Be
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
memo1.lines.add('before navigate: ' + url);
end;
procedure TForm1.HiddenWebBrowser_Na
const pDisp: IDispatch; var URL: OleVariant);
begin
memo1.lines.add('navigate complete: ' + url);
end;
procedure TForm1.bgoClick(Sender: TObject);
begin
HiddenWebBrowser.Navigate(
end;
end.
a very simple way ( I use it ) is to put the browser somewhere outside your screen. To say Browser.Top := - (Browser.Height +10 );
>> The simplest way is to set the width and or height to zero, which allows it operate normally and still fire the events correctly.
Set width to zero, set height to zero, move it off the display coords of the form, cover it with another contol, place it in panel and hide the panel, it all comes down to one point. The control itself should not be hidden in order for all events to fire correctly, but it does not have to appear visually on the screen
ah thanks for that Russel, you learn something new every day :-)
Its something I had to learn the HARD way :-%
<g>
Russell
<g>
Russell
If you set the width and height to zero you can't get a snap of browser image for example. OK I can now :) but I talk using the codes found usualy on net.
What I don't understand whay you can't navigate with hidden browsers? I use in my brower app TEmbeddedWB, better than TWebBrowser. I create a new panel with an EmbeddedWB inside it for each session. I set all panels to Visible:=False and just keep visible the selected browser. When wish to change set the curent to not visible and true to new browser.
I can navigate to any webpage with browser set to visible:=false.
I can navigate to any webpage with browser set to visible:=false.
with an invisible twebbrowser, you can navigate, and it works fine, but you do not get the "DocumentComplete" event, which is the most reliable way of knowing the page has finished loading... probably not a big deal if you have another way of knowing, or just wait a large amount of time