Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C++ > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 24.09.2019, 15:25   #1
Cepguo
Пользователь
 
Регистрация: 03.04.2015
Сообщений: 24
По умолчанию Application.ProcessMessages() в собственных компонентах

Написал потомка от TWebBrowser а как при ожидании навигации выполнить Application.ProcessMessages() не знаю (TApplication не видим).
Конечно извратился через поиск:
Код:
__fastcall TWebrowser::TWebrowser(TComponent* Owner): TWebBrowser(Owner)
{ if(Owner)
  { TWinControl *WinControl = dynamic_cast<TWinControl *>(Owner);
    if(WinControl)
    { TWinControl *ParentControl = WinControl;
        while(1)
        { if(ParentControl->Parent)
          { ParentControl = ParentControl->Parent;
          }
          else break;
        }
        TComponent *Component = ParentControl->Owner;
        if(Component)
        { TApplication *Application = dynamic_cast<TApplication *>(Component);
          if(Application)
          {
но это не правильно, как вызвать диспетчера сообщений из собственных компонентов не используя TApplication ?
______________________
Используйте тег [CODE] (кнопка [CODE] в форме сообщения) при вставке кода на форум. Подробнее в FAQ

Последний раз редактировалось Alex11223; 24.09.2019 в 15:34.
Cepguo вне форума Ответить с цитированием
Старый 24.09.2019, 15:46   #2
Alex11223
Заблокирован
 
Регистрация: 12.01.2011
Сообщений: 19,504
По умолчанию

Цитата:
Сообщение от Cepguo Посмотреть сообщение
а как при ожидании навигации выполнить Application.ProcessMessages()
это так себе идея. Надо нормально использовать события.

Что вы сделать пытаетесь?
Если это какая-то автоматизация типа бота, то для такого проще всего взять Selenium на любом ЯП где он доступен. (зачем вам вообще Билдер в 2019 году? взяли б хоть Qt раз С++)

И TWebBrowser это IE. Его уже давно не обновляют, многие сайты перестают его поддерживать, и даже Майкрософт не считает его браузером.
А на некоторых сайтах по умолчанию вообще может включиться режим IE 7.

ЗЫ у вас странный стиль отступов.

Последний раз редактировалось Alex11223; 24.09.2019 в 15:53.
Alex11223 вне форума Ответить с цитированием
Старый 24.09.2019, 16:48   #3
Cepguo
Пользователь
 
Регистрация: 03.04.2015
Сообщений: 24
По умолчанию

Код:
TWebBrowser::Navigate(Addr);
while(Busy||ReadyState<READYSTATE_COMPLETE)
{ Application->HandleMessage();
}
Хочу дождаться READYSTATE_COMPLETE в своём компоненте, где TApplication не доступен,
т.е. вызвать диспетчер очередей без применения TApplication.
Cepguo вне форума Ответить с цитированием
Старый 24.09.2019, 17:04   #4
Alex11223
Заблокирован
 
Регистрация: 12.01.2011
Сообщений: 19,504
По умолчанию

я про исходную задачу спрашивал, зачем вам браузер в билдере.

а так такие ожидания не стоит использовать, просто обрабатывайте события.
Alex11223 вне форума Ответить с цитированием
Старый 24.09.2019, 17:42   #5
Cepguo
Пользователь
 
Регистрация: 03.04.2015
Сообщений: 24
По умолчанию

Поясните, пожалуйста, как организовать обработку события от браузера, подтверждающего его READYSTATE_COMPLETE ?
Cepguo вне форума Ответить с цитированием
Старый 24.09.2019, 17:57   #6
Alex11223
Заблокирован
 
Регистрация: 12.01.2011
Сообщений: 19,504
По умолчанию

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

Если загружать надо много раз, то будет callback hell ))

Но Application.ProcessMessages() не особо лучше если нормально делать и с ним легко сделать фигню если тупо использовать как обычную синхронную функцию и не блокировать UI и т.д. А если вы еще и спрятали это внутрь компонента, то легко забыть где что.

Ну и вообще с TWebBrowser куча проблем, лучше понять как можно раньше, что вы выбрали неправильный инструмент, и взять что-то нормальное.
Alex11223 вне форума Ответить с цитированием
Старый 25.09.2019, 10:31   #7
Cepguo
Пользователь
 
Регистрация: 03.04.2015
Сообщений: 24
По умолчанию

Да, всё там ... написано, сколько будет редиректов, столько и OnDocumentComplete.
Задача по отслеживанию истории вакансий на одном сайте (получится, то и многих),
парсинг приходится делать только после полной загрузки страниц и выполнения на них
всех скриптов. Ну и что же вместо TWebBrowser ?
Cepguo вне форума Ответить с цитированием
Старый 25.09.2019, 10:40   #8
Alex11223
Заблокирован
 
Регистрация: 12.01.2011
Сообщений: 19,504
По умолчанию

я же сказал, для такой автоматизации самый простой вариант — Selenium, на любом ЯП где он доступен.

И С++ вообще плохой выбор для такой задачи, он тут не даст никаких преимуществ (производительность зависит в основном от сети и сервера) и только замедлит разработку.
Для такого берут что-то высокоуровневое типа Питона.
И GUI обычно не нужен для такого, часто хватает консоли, файлов и т.д.

Последний раз редактировалось Alex11223; 25.09.2019 в 10:44.
Alex11223 вне форума Ответить с цитированием
Старый 25.09.2019, 11:46   #9
Cepguo
Пользователь
 
Регистрация: 03.04.2015
Сообщений: 24
По умолчанию

Пока я прочитал только про Selenium, GUI только для Firefox (ведь на эти вакансии надо ещё поглядеть),
а историю вместо БД я куда положу ?
Cepguo вне форума Ответить с цитированием
Старый 25.09.2019, 12:07   #10
Alex11223
Заблокирован
 
Регистрация: 12.01.2011
Сообщений: 19,504
По умолчанию

Selenium это библиотека для автоматизации браузеров. Там есть простая GUI версия для ФФ с записью действий, но это не нужно в данном случае.
Цитата:
Сообщение от Cepguo Посмотреть сообщение
а историю вместо БД я куда положу ?
в БД. В чем проблема с этим?

Последний раз редактировалось Alex11223; 25.09.2019 в 12:09.
Alex11223 вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Timer и Application.ProcessMessages Zerofill Общие вопросы Delphi 5 21.11.2009 13:29
application.ProcessMessages; UROKSAN Общие вопросы Delphi 2 10.04.2008 12:32
Аналог Application.ProcessMessages() Alter Общие вопросы Delphi 10 10.02.2008 00:58
Application.ProcessMessages =LeonZone= Общие вопросы Delphi 11 27.01.2008 21:31
Application.ProcessMessages KAMASUTR Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 11.08.2007 22:38


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS