• 0
afors

WebBrowser + ComboBox = ошибка ?

Вопрос

Заметил странное поведение приложения при наличии обоих компонентов (WebBrowser1 и ComboBox1)

1. При раскрытии и закрытии списка ComboBox, браузер обновляет страницу. Причем не важно, перекрывает ли список браузер или нет.

2. Если список хоть раз раскрыли и СВЕРНУЛИ(!), то при закрытии программы вылетает ошибка, которая решается освобождением браузера (WebBrowser1.Free)

Второй вопрос не так важен, но хотелось бы знать причину такого поведения, если кто знает...

Но вопрос №1: очень прошу помощи - как сделать, чтобы при раскрытии ComboBox браузер не обновлял страницу?

Прилагаю пример проекта.

WB_CB_Err.zip

PS: Delphi 10.1 Berlin (UPD1 и UPD2)

Изменено пользователем afors
уточнение

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

15 ответов на этот вопрос

  • 0
2 часа назад, Равиль Зарипов (ZuBy) сказал:

на винде только такое поведение?

попробуй так

WB_CB_Err.rar

На Android нет проблем.

У меня нет доступа к странице по ссылке)

Изменено пользователем afors

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
22 минуты назад, afors сказал:

У меня нет доступа к странице по ссылке)

не понял почему, но перезалил

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Вот что пишет:

Страница недоступна.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Спасибо Равиль, теперь все работает!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

В другом проекте браузер не отображает ни одну страницу. По твоему примеру закомментировал только одну строчку. Пока вроде все хорошо и раскрытие списка не перезагружает браузер.

procedure TCustomWebBrowser.FormHandleCreated(const Sender: TObject; const Msg: TMessage);
var
  WBService : IFMXWBService;
begin
  if not (csDesigning in ComponentState) and TPlatformServices.Current.SupportsPlatformService(IFMXWBService, WBService) then
  begin
    FWeb := WBService.CreateWebBrowser;
    FWeb.SetWebBrowserControl(Self);
//    FWeb.UpdateContentFromControl;
    FWeb.URL := FURL;
    FWeb.Navigate;
  end;
end;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
4 часа назад, Равиль Зарипов (ZuBy) сказал:

вот залил

просто закомментировать пересоздание нативного браузера - не самая хорошая идея. Иногда оно действительно необходимо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
Только что, kami сказал:

просто закомментировать пересоздание нативного браузера - не самая хорошая идея. Иногда оно действительно необходимо.

Тестирую на разных машинах, пока все ок!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 минуту назад, afors сказал:

Тестирую на разных машинах, пока все ок!

А оно и будет хорошо до тех пор, пока хендл формы не пересоздастся.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
7 часов назад, kami сказал:

А оно и будет хорошо до тех пор, пока хендл формы не пересоздастся.

Если мне память не изменяет, хендл пересоздается при изменении стиля (sizeble, single, none...)

Но какого черта Комбобокс отсылает подобное сообщение я не смотрел

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
2 часа назад, Равиль Зарипов (ZuBy) сказал:

Но какого черта Комбобокс отсылает подобное сообщение я не смотрел

Комбобокс отсылает сообщение о создании своего окна выпадающего списка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
2 часа назад, kami сказал:

Комбобокс отсылает сообщение о создании своего окна выпадающего списка.

ага, посмотрел логом, думаю правильней будет так

// ZuBy ***
procedure TCustomWebBrowser.FormHandleCreated(const Sender: TObject; const Msg: TMessage);
var
  WBService: IFMXWBService;
begin
  if not(Sender.ClassNameIs('TCustomPopupForm')) then
    if not(csDesigning in ComponentState) and TPlatformServices.Current.SupportsPlatformService(IFMXWBService, WBService)
    then
    begin
      FWeb := WBService.CreateWebBrowser;
      FWeb.SetWebBrowserControl(Self);
      FWeb.UpdateContentFromControl;
      FWeb.URL := FURL;
      FWeb.Navigate;
    end;
end;
// *** ZuBy

не реагировать на создание Попап окон, на формы это не влияет. Сильно не тестил, так что хз.

Rusland и Евгений Корепов понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Равиль, твой последний вариант работает, спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
10 часов назад, afors сказал:

Равиль, твой последний вариант работает, спасибо!

обращайтесь)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу