Перейти к содержанию
Fire Monkey от А до Я
  • 0

WebBrowser + ComboBox = ошибка ?


afors

Вопрос

Опубликовано (изменено)

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

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

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

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

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

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

WB_CB_Err.zip

PS: Delphi 10.1 Berlin (UPD1 и UPD2)

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

Рекомендуемые сообщения

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

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

попробуй так

WB_CB_Err.rar

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

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

Изменено пользователем afors
  • 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

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

  • 0
Опубликовано

Да, для комбобокса помогло. Спасибо.

 

Но от модельных окошек с BorderStyle=None - нет.

Так откуда ноги косяка? Может компонента совсем стала негодная? Или же так же что-то куда-то сообщения ненужные посылает?

  • 1
Опубликовано

Натыкался на такую проблему, смог обойти написанием своей копией TWebBrowser. Основное изменение для обхода именно ошибки с CoboBox'ом это в начале процедуры TCustomWebBrowser.FormHandleCreated вставкой кода:

  {$IFDEF MSWINDOWS}
   exit;
  {$ENDIF}

После этого никаких проблем с пересозданием. Правда у меня все браузера создаются в Runtime. Не знаю или это подойдет для нормальной работы с загрузкой из DFM.

  • 0
Опубликовано (изменено)
3 часа назад, Freezer_86 сказал:

 


  {$IFDEF MSWINDOWS}
   exit;
  {$ENDIF}

 

таки да!. и модальные окошки уже не проблема!

Изменено пользователем POV
  • 0
Опубликовано

Это не очень относиться к теме но оставлю это здесь, вдруг кому пригодиться. В моей задаче нужно было еще отслеживать на какой странице находиться пользователь, а как оказалось свойство URL тоже работает некорректно. Пришлось "накостылять" следующее:

В WebBrowser.Android.pas добавляем:

function TAndroidWebBrowserService.originalUrl: string;
begin
  if FJWebBrowser = nil then
    Result := FURL
  else
    Result := JStringToString(FJWebBrowser.getOriginalUrl);
end;

В WebBrowser.Win.pas добавляем:

function TWindowsWebBrowserService.LocationUrl: string;
begin
  Result := FUrl;
  if FInstance <> nil then
    Result := FInstance.LocationURL;
end;

В WebBrowser.pas изменим: 

function TKCustomWebBrowser.GetURL: string;
begin
  if (csDesigning in ComponentState) or (FWeb = nil) then
    Result := FURL
  else
    {$IFDEF MSWINDOWS}
    Result := (FWeb as TWinWBMediator).WB.LocationUrl;
    {$ELSE}
    Result := (FWeb as TAndroidWebBrowserService).originalUrl
    {$ENDIF}
end;

Как результат - корректная работа панели навигации.

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...