关于TWebBrowser 的重画问题(100分)

  • 主题发起人 主题发起人 skyweb
  • 开始时间 开始时间
S

skyweb

Unregistered / Unconfirmed
GUEST, unregistred user!
我有两个Form, 主窗体TForm1和子窗体TForm2, TForm1上有两个按钮放在一个Panel上,TForm2上有一个TWebBrowser,我在主窗体Form1创建时把Form2设为Form1的子窗体, 我按下Button1,它调用Form2打开了一个网页.然后我按下Button2想把Form2放大到全屏时,Form2.WebBrowser1的内容不见了!!!!

分析的结果表明,设置一个WinControl的Parent属性时会导致该窗口被重建, 于是Form2.Handle变了,
导致Form2.WebBrowser1也跟着被重建,于是相应的所有数据,已装载的页面全都没了.

我现在的做法是, 在改变form2.Parent前保存Form2.WebBrowser1的浏览地址,改变后再让Form2.WebBrowser1重新浏览一次。

但是,还有没有更好的办法呢???


以下是我的两个Form的源程序:

TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Form2:=TForm2.Create(Self);
Form2.BorderStyle:=bsNone;
Form2.Parent:=Self;
Form2.align:=alClient;
Form2.visible:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.WebBrowser1.Navigate('http://www.skyweb2k.com');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
url: string;
begin
if Form2.Parent<>nil then
begin
Form2.BorderStyle:=bsSizeable;
// url:=Form2.WebBrowser1.LocationURL; // 这是我想到的补救办法
Form2.Parent:=nil;
// Form2.WebBrowser1.Navigate(url); // 这是我想到的补救办法
end
else begin
Form2.BorderStyle:=bsNone;
// url:=Form2.WebBrowser1.LocationURL; // 这是我想到的补救办法
Form2.Parent:=self;
// Form2.WebBrowser1.Navigate(url); // 这是我想到的补救办法
end;
end;

----------------------------------

TForm2 = class(TForm)
WebBrowser1: TWebBrowser;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
var
url: string;
begin
Action:=caNone;
BorderStyle:=bsNone;
// url:=Form2.WebBrowser1.LocationURL; // 这是我想到的补救办法
Parent:=Form1;
// Form2.WebBrowser1.Navigate(url); // 这是我想到的补救办法
end;
 
你的问题和我的差不多
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1354069

现在还没有好的办法
 
后退
顶部