afors Опубликовано 19 апреля, 2017 Поделиться Опубликовано 19 апреля, 2017 (изменено) Заметил странное поведение приложения при наличии обоих компонентов (WebBrowser1 и ComboBox1) 1. При раскрытии и закрытии списка ComboBox, браузер обновляет страницу. Причем не важно, перекрывает ли список браузер или нет. 2. Если список хоть раз раскрыли и СВЕРНУЛИ(!), то при закрытии программы вылетает ошибка, которая решается освобождением браузера (WebBrowser1.Free) Второй вопрос не так важен, но хотелось бы знать причину такого поведения, если кто знает... Но вопрос №1: очень прошу помощи - как сделать, чтобы при раскрытии ComboBox браузер не обновлял страницу? Прилагаю пример проекта. WB_CB_Err.zip PS: Delphi 10.1 Berlin (UPD1 и UPD2) Изменено 19 апреля, 2017 пользователем afors уточнение Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 19 апреля, 2017 Модераторы Поделиться Опубликовано 19 апреля, 2017 на винде только такое поведение? попробуй так WB_CB_Err.rar Цитата Ссылка на комментарий
0 afors Опубликовано 19 апреля, 2017 Автор Поделиться Опубликовано 19 апреля, 2017 (изменено) 2 часа назад, Равиль Зарипов (ZuBy) сказал: на винде только такое поведение? попробуй так WB_CB_Err.rar На Android нет проблем. У меня нет доступа к странице по ссылке) Изменено 19 апреля, 2017 пользователем afors Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 19 апреля, 2017 Модераторы Поделиться Опубликовано 19 апреля, 2017 22 минуты назад, afors сказал: У меня нет доступа к странице по ссылке) не понял почему, но перезалил Цитата Ссылка на комментарий
0 afors Опубликовано 19 апреля, 2017 Автор Поделиться Опубликовано 19 апреля, 2017 Вот что пишет: Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 19 апреля, 2017 Модераторы Поделиться Опубликовано 19 апреля, 2017 вот залил https://yadi.sk/d/bLqs3l1V3H962e Цитата Ссылка на комментарий
0 afors Опубликовано 19 апреля, 2017 Автор Поделиться Опубликовано 19 апреля, 2017 Спасибо Равиль, теперь все работает! Цитата Ссылка на комментарий
0 afors Опубликовано 19 апреля, 2017 Автор Поделиться Опубликовано 19 апреля, 2017 В другом проекте браузер не отображает ни одну страницу. По твоему примеру закомментировал только одну строчку. Пока вроде все хорошо и раскрытие списка не перезагружает браузер. 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 kami Опубликовано 19 апреля, 2017 Поделиться Опубликовано 19 апреля, 2017 4 часа назад, Равиль Зарипов (ZuBy) сказал: вот залил просто закомментировать пересоздание нативного браузера - не самая хорошая идея. Иногда оно действительно необходимо. Цитата Ссылка на комментарий
0 afors Опубликовано 19 апреля, 2017 Автор Поделиться Опубликовано 19 апреля, 2017 Только что, kami сказал: просто закомментировать пересоздание нативного браузера - не самая хорошая идея. Иногда оно действительно необходимо. Тестирую на разных машинах, пока все ок! Цитата Ссылка на комментарий
0 kami Опубликовано 19 апреля, 2017 Поделиться Опубликовано 19 апреля, 2017 1 минуту назад, afors сказал: Тестирую на разных машинах, пока все ок! А оно и будет хорошо до тех пор, пока хендл формы не пересоздастся. Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 20 апреля, 2017 Модераторы Поделиться Опубликовано 20 апреля, 2017 7 часов назад, kami сказал: А оно и будет хорошо до тех пор, пока хендл формы не пересоздастся. Если мне память не изменяет, хендл пересоздается при изменении стиля (sizeble, single, none...) Но какого черта Комбобокс отсылает подобное сообщение я не смотрел Цитата Ссылка на комментарий
0 kami Опубликовано 20 апреля, 2017 Поделиться Опубликовано 20 апреля, 2017 2 часа назад, Равиль Зарипов (ZuBy) сказал: Но какого черта Комбобокс отсылает подобное сообщение я не смотрел Комбобокс отсылает сообщение о создании своего окна выпадающего списка. Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 20 апреля, 2017 Модераторы Поделиться Опубликовано 20 апреля, 2017 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 2 Цитата Ссылка на комментарий
0 afors Опубликовано 23 апреля, 2017 Автор Поделиться Опубликовано 23 апреля, 2017 Равиль, твой последний вариант работает, спасибо! Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 24 апреля, 2017 Модераторы Поделиться Опубликовано 24 апреля, 2017 10 часов назад, afors сказал: Равиль, твой последний вариант работает, спасибо! обращайтесь) Цитата Ссылка на комментарий
0 POV Опубликовано 27 декабря, 2017 Поделиться Опубликовано 27 декабря, 2017 Да, для комбобокса помогло. Спасибо. Но от модельных окошек с BorderStyle=None - нет. Так откуда ноги косяка? Может компонента совсем стала негодная? Или же так же что-то куда-то сообщения ненужные посылает? Цитата Ссылка на комментарий
1 Freezer_86 Опубликовано 28 декабря, 2017 Поделиться Опубликовано 28 декабря, 2017 Натыкался на такую проблему, смог обойти написанием своей копией TWebBrowser. Основное изменение для обхода именно ошибки с CoboBox'ом это в начале процедуры TCustomWebBrowser.FormHandleCreated вставкой кода: {$IFDEF MSWINDOWS} exit; {$ENDIF} После этого никаких проблем с пересозданием. Правда у меня все браузера создаются в Runtime. Не знаю или это подойдет для нормальной работы с загрузкой из DFM. POV 1 Цитата Ссылка на комментарий
0 POV Опубликовано 28 декабря, 2017 Поделиться Опубликовано 28 декабря, 2017 (изменено) 3 часа назад, Freezer_86 сказал: {$IFDEF MSWINDOWS} exit; {$ENDIF} таки да!. и модальные окошки уже не проблема! Изменено 28 декабря, 2017 пользователем POV Цитата Ссылка на комментарий
0 Freezer_86 Опубликовано 28 декабря, 2017 Поделиться Опубликовано 28 декабря, 2017 Это не очень относиться к теме но оставлю это здесь, вдруг кому пригодиться. В моей задаче нужно было еще отслеживать на какой странице находиться пользователь, а как оказалось свойство 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; Как результат - корректная работа панели навигации. #WAMACO 1 Цитата Ссылка на комментарий
Вопрос
afors
Заметил странное поведение приложения при наличии обоих компонентов (WebBrowser1 и ComboBox1)
1. При раскрытии и закрытии списка ComboBox, браузер обновляет страницу. Причем не важно, перекрывает ли список браузер или нет.
2. Если список хоть раз раскрыли и СВЕРНУЛИ(!), то при закрытии программы вылетает ошибка, которая решается освобождением браузера (WebBrowser1.Free)
Второй вопрос не так важен, но хотелось бы знать причину такого поведения, если кто знает...
Но вопрос №1: очень прошу помощи - как сделать, чтобы при раскрытии ComboBox браузер не обновлял страницу?
Прилагаю пример проекта.
WB_CB_Err.zip
PS: Delphi 10.1 Berlin (UPD1 и UPD2)
Изменено пользователем aforsуточнение
Ссылка на комментарий
19 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.