Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / webbrowser, программа автоматом закрывается / 8 сообщений из 8, страница 1 из 1
01.10.2020, 14:39
    #40004560
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webbrowser, программа автоматом закрывается
пытаюсь сделать хранитель ссылок, со скриншотами страниц, на подобии экспресс панели в опера..
создаю 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
01.10.2020, 14:55
    #40004563
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webbrowser, программа автоматом закрывается
Зачем же обманывать в открытую ?
авторсоздаю twebbrowser
Код: pascal
1.
BroWser := TsWebBrowser.Create(nil);
...
Рейтинг: 0 / 0
01.10.2020, 14:57
    #40004565
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webbrowser, программа автоматом закрывается
DimaBr,
извиняюсь.. браузер из набора alphacontrols.
тем не менее, проблема остается
...
Рейтинг: 0 / 0
01.10.2020, 16:06
    #40004586
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webbrowser, программа автоматом закрывается
Tech N9ne,

наверное нехорошо удалять BroWser из его обработчика, пошли сообщение или хотя бы через таймер
...
Рейтинг: 0 / 0
01.10.2020, 16:19
    #40004589
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webbrowser, программа автоматом закрывается
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
01.10.2020, 16:38
    #40004595
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
webbrowser, программа автоматом закрывается
Zelius,
да, спасибо, помогло.
Но теперь новая проблема))
видимо процедура OnDocumentComplete срабатывает несколько раз..
сначала прогружается страничка, делается скриншот, грузится в image, затем срабатывает таймер и освобождает браузер, в этот момент опять делается скриншот и загружается в image.
В итоге браузер успешно освободился, а в image белый лист.

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

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

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

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


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