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

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

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

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

Ответ
 
Опции темы
Старый 24.09.2019, 16:25   #1
Cepguo
Пользователь
 
Регистрация: 03.04.2015
Сообщений: 17
По умолчанию 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 в 16:34.
Cepguo вне форума   Ответить с цитированием
Старый 24.09.2019, 16:46   #2
Alex11223
Модератор
Заслуженный модератор
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,452
По умолчанию

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


04:33.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.