Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Chromium запуск при открытии формы / 12 сообщений из 12, страница 1 из 1
17.06.2020, 11:22
    #39970091
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Chromium запуск при открытии формы
Хочу сделать так, чтобы при старте формы, загружался URL.
Проблема в том, что URL загружается как бы три раза. Точнее, событие OnAddressChange срабатывает 3 раза. Т.е. два лишних раза. Соответственно другие события тоже срабатывают два "лишних" раза.

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


Код: 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.
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......
...
Рейтинг: 0 / 0
17.06.2020, 11:24
    #39970092
Vizit0r
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Chromium запуск при открытии формы
сделать переменную, в первый взводить ее, а потом проверять - не?
...
Рейтинг: 0 / 0
17.06.2020, 11:25
    #39970094
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Chromium запуск при открытии формы
костыль?
по идее ж не должно так работать?

Я про то, что может это я что-то делаю не так?
...
Рейтинг: 0 / 0
17.06.2020, 11:27
    #39970097
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Chromium запуск при открытии формы
X11
Хочу сделать так, чтобы при старте формы, загружался URL.
Проблема в том, что URL загружается как бы три раза. Точнее, событие OnAddressChange срабатывает 3 раза. Т.е. два лишних раза. Соответственно другие события тоже срабатывают два "лишних" раза.

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


Код: 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.
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...
...
Рейтинг: 0 / 0
17.06.2020, 11:37
    #39970102
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Chromium запуск при открытии формы
X11
костыль?
по идее ж не должно так работать?

Я про то, что может это я что-то делаю не так?
А на какие события повешены CefOpenUrl2 ?
...
Рейтинг: 0 / 0
17.06.2020, 11:43
    #39970105
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Chromium запуск при открытии формы
на кнопку на основной форме приложения
Есть таблица с URL и рядом кнопка
...
Рейтинг: 0 / 0
17.06.2020, 11:44
    #39970106
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Chromium запуск при открытии формы
X11
на кнопку на основной форме приложения
Есть таблица с URL и рядом кнопка
Не очень согласуется с желанием
авторХочу сделать так, чтобы при старте формы , загружался URL.
...
Рейтинг: 0 / 0
17.06.2020, 11:46
    #39970107
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Chromium запуск при открытии формы
Gerasimenko,
что именно не понятно?

Есть 2 формы: одна с таблицей URL и кнопкой, другая - с браузером.
...
Рейтинг: 0 / 0
17.06.2020, 11:48
    #39970108
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Chromium запуск при открытии формы
X11
Gerasimenko,
что именно не понятно?

Есть 2 формы: одна с таблицей URL и кнопкой, другая - с браузером.
не понят, в какой момент происходит первый вызов. По нажатию кнопки или все же при "старте формы"
...
Рейтинг: 0 / 0
17.06.2020, 11:56
    #39970112
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Chromium запуск при открытии формы
по нажатию кнопки вызывается процедура

CefOpenUrl2(....);
...
Рейтинг: 0 / 0
17.06.2020, 12:04
    #39970116
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Chromium запуск при открытии формы
X11
по нажатию кнопки вызывается процедура

CefOpenUrl2(....);
Теперь понятно:
1) есть форма 1: в ней табличка адресов и кнопка.
2) по нажатию кнопки создаётся fmBrowser2
3) в fmBrowser2 загружается URL из таблички с первой формы.
...
Рейтинг: 0 / 0
17.06.2020, 12:13
    #39970118
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Chromium запуск при открытии формы
Да.
Извиняюсь, что сразу не описал более подробно.

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

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

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

edUrl - это строка адреса браузера
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Chromium запуск при открытии формы / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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