powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / webbrowser, программа автоматом закрывается
8 сообщений из 8, страница 1 из 1
webbrowser, программа автоматом закрывается
    #40004560
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пытаюсь сделать хранитель ссылок, со скриншотами страниц, на подобии экспресс панели в опера..
создаю twebbrowser, проверяю загрузилась ли страница, делаю скриншот, и за ненадобностью веббраузера я его освобождаю... И вместе с ним закрывается и сама программа..
пробовал как .free, так и freeandnil. Помогите разобраться
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
  public
    procedure WebBrowserScreenShot(const wb: TsWebBrowser; const fileName: TFileName);
    procedure Bro_comp(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant);{OnDocumentComplete}
    procedure Bro_nav(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant);{OnNavigateComplete2}
    { Public declarations }
  end;

var
  Form3: TForm3;
  BroWser: TsWebBrowser;
  CurDispatch: IDispatch; { save the interface globally }

implementation

{$R *.dfm}

procedure TForm3.Bro_comp(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant);{OnDocumentComplete}
begin
  if (pDisp = CurDispatch) then
  begin
    WebBrowserScreenShot(BroWser, ExtractFilePath(ParamStr(0)) + 'screen.jpg');
    sImage1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'screen.jpg');
     BroWser.Free; { ПОСЛЕ СОХРАНЕНИЯ СКРИНШОТА, И ЗАГРУЗКИ ЕГО В IMAGE1 
                           ПЫТАЮСЬ ФРИШНУТЬ БРАУЗЕР, И ТУТ ПРОГРАММА ЗАКРЫВАЕТСЯ }
    CurDispatch := nil; { clear the global variable }
  end;
end;

procedure TForm3.Bro_nav(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant);{OnNavigateComplete2}
begin
  if CurDispatch = nil then
    CurDispatch := pDisp; { save for comparison }
end;

procedure TForm3.sSpeedButton1Click(Sender: TObject);
var
  URL: OleVariant;
begin
  { создаю браузер }
  URL := 'www.google.ru';
  BroWser := TsWebBrowser.Create(nil);
  TWinControl(BroWser).Parent := Form3;
  BroWser.Silent := True;
  BroWser.Left := 0;
  BroWser.Top := 0;
  BroWser.Width := 500;
  BroWser.Height := 350;
  BroWser.OnDocumentComplete := Bro_comp;
  BroWser.OnNavigateComplete2 := Bro_nav;
  BroWser.Navigate(URL);
  { ===================================== }
end;

procedure TForm3.WebBrowserScreenShot(const wb: TsWebBrowser; const fileName: TFileName);{Скриншот}
var
  viewObject: IViewObject;
  r: TRect;
  bitmap: TBitmap;
begin
  if wb.Document <> nil then
  begin
    wb.Document.QueryInterface(IViewObject, viewObject);
    if Assigned(viewObject) then
      try
        bitmap := TBitmap.Create;
        try
          r := Rect(0, 0, wb.Width, wb.Height);
          bitmap.Height := wb.Height;
          bitmap.Width := wb.Width;
          viewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Application.Handle, bitmap.Canvas.Handle, @r, nil, nil, 0);
          with TJPEGImage.Create do
            try
              Assign(bitmap);
              SaveToFile(fileName);
            finally
              Free;
            end;
        finally
          bitmap.Free;
        end;
      finally
        viewObject._Release;
      end;
  end;
end;

...
Рейтинг: 0 / 0
webbrowser, программа автоматом закрывается
    #40004563
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем же обманывать в открытую ?
авторсоздаю twebbrowser
Код: pascal
1.
BroWser := TsWebBrowser.Create(nil);
...
Рейтинг: 0 / 0
webbrowser, программа автоматом закрывается
    #40004565
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,
извиняюсь.. браузер из набора alphacontrols.
тем не менее, проблема остается
...
Рейтинг: 0 / 0
webbrowser, программа автоматом закрывается
    #40004586
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tech N9ne,

наверное нехорошо удалять BroWser из его обработчика, пошли сообщение или хотя бы через таймер
...
Рейтинг: 0 / 0
webbrowser, программа автоматом закрывается
    #40004589
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tech N9ne,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure TForm3.Bro_comp(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant);{OnDocumentComplete}
begin
  if (pDisp = CurDispatch) then
  begin
    WebBrowserScreenShot(BroWser, ExtractFilePath(ParamStr(0)) + 'screen.jpg');
    sImage1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'screen.jpg');
    CurDispatch := nil; { clear the global variable }
    FreeBrowserTimer.Enabled := True;
  end;
end;

procedure TForm3.FreeBrowserTimerTimer
begin
    FreeBrowserTimer.Enabled := False;
     FreeAndNil(BroWser);
end;
...
Рейтинг: 0 / 0
webbrowser, программа автоматом закрывается
    #40004595
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius,
да, спасибо, помогло.
Но теперь новая проблема))
видимо процедура OnDocumentComplete срабатывает несколько раз..
сначала прогружается страничка, делается скриншот, грузится в image, затем срабатывает таймер и освобождает браузер, в этот момент опять делается скриншот и загружается в image.
В итоге браузер успешно освободился, а в image белый лист.

Попробовал в название скриншота вставить переменную, которая увеличивается +1 при срабатывании процедуры OnDocumentComplete .

в папке появляются сразу по два скрина, один нормальный, а вот второй чистый, просто белое полотно..

Можно конечно загружать правильный скрин, а второй удалять, но не по феншую как-то )
...
Рейтинг: 0 / 0
webbrowser, программа автоматом закрывается
    #40004612
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tech N9ne,

может фреймы есть?
...
Рейтинг: 0 / 0
webbrowser, программа автоматом закрывается
    #40004615
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius,
сделал проверку по циклу, без ondocumentcomplete вроде работает как надо. Спасибо большое!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / webbrowser, программа автоматом закрывается
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]