Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Смерть WebBrowser-a при изменении TForm.FormStyle [D7, WinXP]


Мастерок ©   (2007-01-28 15:43:00) 

WebBrowser окрашивается полностью в белый цвет. Как его оживить?

Далее код примера:

Unit1.pas

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw, MSHTML;

type
 TForm1 = class(TForm)
   WebBrowser1: TWebBrowser;
   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;
IHTMLViewer: IHTMLDocument2disp;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('about:blank');
IHTMLViewer:=IHTMLDocument2disp(Webbrowser1.Document);
IHTMLViewer.writeln('При изменении FormStyle вместо WebBrowser-a остаётся белый прямоугольник - возмутительно!!!');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
FormStyle:=fsNormal;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
FormStyle:=fsStayOnTop;
end;

end.

Unit1.dfm

object Form1: TForm1
 Left = 248
 Top = 199
 Width = 570
 Height = 484
 Caption = 'Form1'
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'MS Sans Serif'
 Font.Style = []
 OldCreateOrder = False
 OnCreate = FormCreate
 PixelsPerInch = 96
 TextHeight = 13
 object WebBrowser1: TWebBrowser
   Left = 8
   Top = 8
   Width = 545
   Height = 377
   TabOrder = 0
   ControlData = {
4C00000054380000F72600000000000000000000000000000000000000000000
000000004C000000000000000000000001000000E0D057007335CF11AE690800
2B2E126208000000000000004C0000000114020000000000C000000000000046
8000000000000000000000000000000000000000000000000000000000000000
00000000000000000100000000000000000000000000000000000000}
 end
 object Button1: TButton
   Left = 232
   Top = 392
   Width = 75
   Height = 25
   Caption = 'fsNormal'
   TabOrder = 1
   OnClick = Button1Click
 end
 object Button2: TButton
   Left = 232
   Top = 424
   Width = 75
   Height = 25
   Caption = 'fsStayOnTop'
   TabOrder = 2
   OnClick = Button2Click
 end
end

Project1.dpr

program Project1;

uses
 Forms,
 Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.


umbra   (2007-01-29 16:37:00) [1]

WebBrowser.Application.Visible?


TIF   (2007-01-29 16:03:00) [2]

Люди, может чуть не в тему, но как сделать Web Browser  невидимым? А то у него свойства visible нет...


umbra   (2007-01-29 13:43:00) [3]


> WebBrowser окрашивается полностью в белый цвет

при изменении FormStyleменяется хендл формы. Поскольку   TWebBrowser- однопоточный СОМ-сервер, то его работа держится на сообщениях, которые посылаются окну-контейнеру (форме). Если хендл формы изменился, а веб-броузер не получает сообщений и, соответственно не знает, что делать.
 Попробуйте после изменения FormStyleприсвоить значение хендла формы св-ву WebBrowser1.ParentWindow


DrPass   (2007-01-29 12:13:00) [4]

Цитата из справки Delphi:
"Note: It is not advisable to change FormStyle at runtime."

Чисто умозрительно - попробуй это
WebBrowser1.Navigate('about:blank');
IHTMLViewer:=IHTMLDocument2disp(Webbrowser1.Document);
IHTMLViewer.writeln('При изменении FormStyle вместо WebBrowser-a остаётся белый прямоугольник - возмутительно!!!');

делать и после изменения стиля


Мастерок   (2007-01-29 05:14:00) [5]

Вот блин - не действует
Пробовал оба варианта.


Olivetti   (2007-01-29 02:28:00) [6]

Ну, для начала, вот это как-то нехорошо:

var
 Form1: TForm1;
 IHTMLViewer: IHTMLDocument2disp;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 WebBrowser1.Navigate('about:blank');
 IHTMLViewer:=IHTMLDocument2disp(Webbrowser1.Document);
 IHTMLViewer.writeln('При изменении FormStyle вместо WebBrowser-a остаётся белый прямоугольник - возмутительно!!!');
end;


Сделай или:

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
 IHTMLViewer: IHTMLDocument2disp;
begin
 WebBrowser1.Navigate('about:blank');
 IHTMLViewer:=IHTMLDocument2disp(Webbrowser1.Document);
 IHTMLViewer.writeln('При изменении FormStyle вместо WebBrowser-a остаётся белый прямоугольник - возмутительно!!!');
end;


или (нелогичный вариант):

var
 Form1: TForm1;
 IHTMLViewer: IHTMLDocument2disp;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 WebBrowser1.Navigate('about:blank');
 IHTMLViewer:=IHTMLDocument2disp(Webbrowser1.Document);
 IHTMLViewer.writeln('При изменении FormStyle вместо WebBrowser-a остаётся белый прямоугольник - возмутительно!!!');
 IHTMLViewer := nil;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо