Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Chromium запуск при открытии формы  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14193
Хочу сделать так, чтобы при старте формы, загружался URL.
Проблема в том, что URL загружается как бы три раза. Точнее, событие OnAddressChange срабатывает 3 раза. Т.е. два лишних раза. Соответственно другие события тоже срабатывают два "лишних" раза.

Хотелось бы, чтобы страничка загружалась 1 раз и, соответственно, события тоже срабатывали по одному разу.
В частности, есть событие OnLoadingStateChange, которое срабатывает 2 раза вместо одного.
Т.е. в событии есть
if not isLoading then - и это срабатывает 2 раза. А нужно, чтобы один раз.


procedure CefOpenUrl2(const url: string);
begin

  if not Assigned(fmBrowser2) then
    fmBrowser2 := TfmBrowser2.Create(Application);

  //fmBrowser2.Chromium2.DefaultURL := url;
  //fmBrowser2.Memo1.Lines.Add('fmBrowser2.Chromium2.DefaultURL = ' + url);
  fmBrowser2.edUrl.Text := url;
  fmBrowser2.Show;

  if fmBrowser2.Chromium2.Initialized then
  begin
    fmBrowser2.Chromium2.LoadURL(url);
    fmBrowser2.Memo1.Lines.Add('Initialized, URL = ' + url);
  end
  else
  begin

    fmBrowser2.Chromium2.CreateBrowser(fmBrowser2.CEFWindowParent1);
    Sleep(500);
    Application.ProcessMessages;
    fmBrowser2.Chromium2.LoadURL(url);
    fmBrowser2.Memo1.Lines.Add('not Initialized, URL = ' + url);
  end;

end;


procedure TfmBrowser2.Chromium2AddressChange(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const url: ustring);
begin
  edUrl.Text := url;
  Memo1.Lines.Add('AddressChange: ' + url);
end;


в такой лог выводится в мемо:

автор
not Initialized, URL = https://www.......
AddressChange: about:blank
AddressChange: https://www......
AddressChange: https://www......
AddressChange: https://www......
17 июн 20, 11:22    [22152218]     Ответить | Цитировать Сообщить модератору
 Re: Chromium запуск при открытии формы  [new]
Vizit0r
Member

Откуда: Одесса
Сообщений: 781
сделать переменную, в первый взводить ее, а потом проверять - не?
17 июн 20, 11:24    [22152219]     Ответить | Цитировать Сообщить модератору
 Re: Chromium запуск при открытии формы  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14193
костыль?
по идее ж не должно так работать?

Я про то, что может это я что-то делаю не так?

Сообщение было отредактировано: 17 июн 20, 11:23
17 июн 20, 11:25    [22152222]     Ответить | Цитировать Сообщить модератору
 Re: Chromium запуск при открытии формы  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4594
X11
Хочу сделать так, чтобы при старте формы, загружался URL.
Проблема в том, что URL загружается как бы три раза. Точнее, событие OnAddressChange срабатывает 3 раза. Т.е. два лишних раза. Соответственно другие события тоже срабатывают два "лишних" раза.

Хотелось бы, чтобы страничка загружалась 1 раз и, соответственно, события тоже срабатывали по одному разу.
В частности, есть событие OnLoadingStateChange, которое срабатывает 2 раза вместо одного.
Т.е. в событии есть
if not isLoading then - и это срабатывает 2 раза. А нужно, чтобы один раз.


procedure CefOpenUrl2(const url: string);
begin

  if not Assigned(fmBrowser2) then
    fmBrowser2 := TfmBrowser2.Create(Application);

  //fmBrowser2.Chromium2.DefaultURL := url;
  //fmBrowser2.Memo1.Lines.Add('fmBrowser2.Chromium2.DefaultURL = ' + url);
  fmBrowser2.edUrl.Text := url;
  fmBrowser2.Show;

  if fmBrowser2.Chromium2.Initialized then
  begin
    fmBrowser2.Chromium2.LoadURL(url);
    fmBrowser2.Memo1.Lines.Add('Initialized, URL = ' + url);
  end
  else
  begin

    fmBrowser2.Chromium2.CreateBrowser(fmBrowser2.CEFWindowParent1);
    Sleep(500);
    Application.ProcessMessages;
    fmBrowser2.Chromium2.LoadURL(url);
    fmBrowser2.Memo1.Lines.Add('not Initialized, URL = ' + url);
  end;

end;


procedure TfmBrowser2.Chromium2AddressChange(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const url: ustring);
begin
  edUrl.Text := url;
  Memo1.Lines.Add('AddressChange: ' + url);
end;


в такой лог выводится в мемо:

автор
not Initialized, URL = https://www.......
AddressChange: about:blank
AddressChange: https://www......
AddressChange: https://www......
AddressChange: https://www......
if fmBrowser2.Tag = 0 then... else...
17 июн 20, 11:27    [22152225]     Ответить | Цитировать Сообщить модератору
 Re: Chromium запуск при открытии формы  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4594
X11
костыль?
по идее ж не должно так работать?

Я про то, что может это я что-то делаю не так?
А на какие события повешены CefOpenUrl2 ?
17 июн 20, 11:37    [22152234]     Ответить | Цитировать Сообщить модератору
 Re: Chromium запуск при открытии формы  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14193
на кнопку на основной форме приложения
Есть таблица с URL и рядом кнопка
17 июн 20, 11:43    [22152237]     Ответить | Цитировать Сообщить модератору
 Re: Chromium запуск при открытии формы  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4594
X11
на кнопку на основной форме приложения
Есть таблица с URL и рядом кнопка
Не очень согласуется с желанием
автор
Хочу сделать так, чтобы при старте формы, загружался URL.
17 июн 20, 11:44    [22152238]     Ответить | Цитировать Сообщить модератору
 Re: Chromium запуск при открытии формы  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14193
Gerasimenko,
что именно не понятно?

Есть 2 формы: одна с таблицей URL и кнопкой, другая - с браузером.
17 июн 20, 11:46    [22152239]     Ответить | Цитировать Сообщить модератору
 Re: Chromium запуск при открытии формы  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4594
X11
Gerasimenko,
что именно не понятно?

Есть 2 формы: одна с таблицей URL и кнопкой, другая - с браузером.
не понят, в какой момент происходит первый вызов. По нажатию кнопки или все же при "старте формы"
17 июн 20, 11:48    [22152242]     Ответить | Цитировать Сообщить модератору
 Re: Chromium запуск при открытии формы  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14193
по нажатию кнопки вызывается процедура

CefOpenUrl2(....);
17 июн 20, 11:56    [22152248]     Ответить | Цитировать Сообщить модератору
 Re: Chromium запуск при открытии формы  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4594
X11
по нажатию кнопки вызывается процедура

CefOpenUrl2(....);
Теперь понятно:
1) есть форма 1: в ней табличка адресов и кнопка.
2) по нажатию кнопки создаётся fmBrowser2
3) в fmBrowser2 загружается URL из таблички с первой формы.
17 июн 20, 12:04    [22152252]     Ответить | Цитировать Сообщить модератору
 Re: Chromium запуск при открытии формы  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14193
Да.
Извиняюсь, что сразу не описал более подробно.

Добавлю, что в событиях OnCreate/onShow формы fmBrowser2 нет кода для старта загрузки URL.

Ещё добавлю, что на fmBrowser2 есть TEdit, куда можно ввести URL и нажать кнопку Старт. При этом событие OnAddressChange тоже три раза срабатывает вместо одного раза.

Поясню ещё вот что.
В событии OnAddressChange есть строка (как видно из кода в первом сообщении)
edUrl.Text := url;
для того, чтобы в edUrl менялся адрес, если пользователь ходит по ссылкам в браузере.

edUrl - это строка адреса браузера

Сообщение было отредактировано: 17 июн 20, 12:12
17 июн 20, 12:13    [22152255]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить