Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TWebBrowser не создается в потоке, но без потока все ок 
V
    Опции темы
Ibragim
Дата 9.12.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 28.9.2004
Где: Киев

Репутация: нет
Всего: нет



День добрый. Вот такой вопрос
Если создавать объект TWebBrowser в процедуре обработки формы - все ок

Так все ок
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  x: TWebBrowser;
begin
  x := TWebBrowser.Create(nil);
  x.Navigate('www.ya.ru');
  x.ParentWindow := Form1.Handle;
end;


А вот если из потока - не работает, поток "зависает" на строке   x := TWebBrowser.Create(nil);
Где баг? Спасибо за внимание.

Так не работает
Код

TTestThread = class(TThread)
  procedure Execute; override;
end;

procedure TTestThread.Execute;
var
  x: TWebBrowser;
begin
  x := TWebBrowser.Create(nil);
  x.Navigate('www.ya.ru');
  x.ParentWindow := Form1.Handle;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  x: TTestThread;
begin
  x := TTestThread.Create(false);
end;

PM MAIL   Вверх
Snowy
Дата 9.12.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Ну кто ж создаёт контролы в потоке?
Зависание в таких случаях не самый страшный глюк smile
Да и смысл здесь использовать поток?
PM MAIL   Вверх
Ibragim
Дата 9.12.2006, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 28.9.2004
Где: Киев

Репутация: нет
Всего: нет



Без потока никак по смыслу задачи.
У меня "ускоритель просмотра сайтов" smile 
То есть задача такая: Заранее известно, какие сайты будут просматриваться оператором. Я в куче потоков закачиваю сайты, и те что закачались показываю оператору, он нажимает "Дальше", а следующий сайт (не по очередности в списке, а тот что уже загрузился) тут как тут - осталось только показать, уже все скачано. 

Счас работает так: гружу с помощью TIdHttp, и когда оператор нажал "Дальше" быстенько сохраняю в файл и говорю единственному контролу TWebBrowser на форме Navigate этот файл. То что нет картинок - не страшно. Но многие сайты таким образом не грузятся - просто белое окошко WebBrowser'a, другие глюки... Причем даже просто експлорером открыая этот сохраненный файл - все равно глюки, не умеет нормально експлорер с локально сохраненным файлом работать. Опера - все ок, да где ж контрол оперовский возьмеш. Ну и тормоза на больших сайтах - просто пока WebBrowser их загрузит даже локально. Вот думаю как модернизировать.
PM MAIL   Вверх
Snowy
Дата 9.12.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Создавай кучу веббраузеров.
Загружай в них страницы.
А, когда будет нужно, делай их видимыми.
PM MAIL   Вверх
W4FhLF
Дата 9.12.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: нет
Всего: 121



Т.е. создать визуальный контрол в потоке и работать с его свойствами нереал?


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Snowy
Дата 9.12.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Он не будет работать в потоке smile
Все контролы завязаны на TApplication и выполняются только в основном потоке.
Так устроена VCL.
PM MAIL   Вверх
Ibragim
Дата 9.12.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 28.9.2004
Где: Киев

Репутация: нет
Всего: нет



Спасибо, вопрос понятен. Будем делать так как советует Snowy
PM MAIL   Вверх
W4FhLF
Дата 10.12.2006, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: нет
Всего: 121



Цитата

Он не будет работать в потоке 


Но может быть можно как-нибудь из потоков отправлять сообщению контролу на форме? 
Просто я в своё время долго пытался сделать многопоточный клиент для RDP, тоже, как только не извращался... 
Может быть гуру всё-таки подскажет какой-нибудь извращённый способ? На войне, как говорится, все методыsmile


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Snowy
Дата 10.12.2006, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(W4FhLF @  10.12.2006,  08:41 Найти цитируемый пост)
Но может быть можно как-нибудь из потоков отправлять сообщению контролу на форме? 
Можно. Но для какой цели? Это уже другая тема.
В данном случае это ничего не даёт.
PM MAIL   Вверх
x77
Дата 13.12.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 1
Всего: 22



TWebBrowser - сам по себе работает асинхронно smile если ты скажешь

Код

for i := 0 to 1000
  WebBrowsers [i].Navigate ('...');


у тебя этот цикл отработает мгновенно. и управление сразу вернётся основному процессу. а вот уже по мере загрузки будут срабатывать события этого стада Ослов, типа OnNavigationComplete или как оно там, не помню. т.е. десяток браузеров - они уже сами по себе "многопоточные", и в потоки их засовывать не надо, ведь ничего не изменится.

второй момент. куча TWebBrowser'ов - это может серьёзно притормозить программу. открой 100 экспловеров и посмотри, что будет с машиной. может быть, есть смысл подумать над тем, чтобы качать сайты через TIdHttp.Get, к примеру, в некий буфер (тот же TStrings), а при просмотре загружать этот буфер в один единственный TWebBrowser.

з.ы. индекс забыл, сорри.

Это сообщение отредактировал(а) x77 - 13.12.2006, 14:23


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1904 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.