Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Вниз

Как создать TWebBrowser в ран-тайм?   Найти похожие ветки 

 
bloodman ©   (2004-11-14 17:58) [0]

Мне нужно в отдельном потоке создать экземпляр TWebBrowser , Делаю так :
TMyThread = class(TThread)
   protected
     procedure Execute; override;

    private
       State : integer;
       WBS : array[0..255] of TWebBrowser;
       URL : String;
       ProgBar : TProgressBar;
       Constructor Create(CreateSuspennded: Boolean;URL1 : String;Pb:TProgressBar);
       procedure OnNav(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
       procedure OnNav2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
  end;

....

procedure TMyThread.Execute;
var
 wb : TWebBrowser;
begin
 wb:=nil;
 wb:=TWebBrowser.Create(nil);  вот на этой строчке вылетает ошибка : CoInitialize has not been called.
 wb.OnNavigateComplete2:=OnNav;
end;

Как с ней справиться?  Вставлял CoInitialize(wb) говорит Undeclared Identifier ...


 
Anatoly Podgoretsky ©   (2004-11-14 18:17) [1]

Ну так как и написано, то есть call
А uses правильно оформил?


 
Sergey_Masloff   (2004-11-14 18:46) [2]

CoInitialize нужно вызывать в каждом потоке (кроме главного потока VCL приложения в котором есть uses ComObj).
Так что CoInitialize(nil) в начало треда и все. Ну и CoUnitialize в конце не забыть


 
bloodman ©   (2004-11-14 20:44) [3]

Anatoly Podgoretsky ©   (14.11.04 18:17) [1]
описание типа потока у меня в главном юните у него uses такой :
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, OleCtrls, SHDocVw, StdCtrls, ComCtrls, Grids, swStringGrid,ComObj;

Sergey_Masloff   (14.11.04 18:46) [2]
У меня Компилятор на эту строчку ругается что Undeclared Identifier  CoInitialize ..


 
Shaman_Naydak   (2004-11-14 22:19) [4]

Подключи ActiveX,  чтобы не ругался


 
Ihor Osov'yak ©   (2004-11-14 23:46) [5]

в отдельном потоке  TWebBrowser - есть несколько моментов.
Часть уже упомянули -  CoInitialize/CoInitialize..

Вторая - для нормальной работы соотв. активХ (а TWebBrowser всего лишь оболочка над єтим активХ) - нужен цыкл выборки сообщений в потоке. В принцыпе, это легко реализуемо. Но, кажется, есть более существенная проблема. Это TOleControl - наследником которого есть TWebBrowser. TOleControl как большинство визуальных vcl-компонентов не расчитан на работу в потоках, отличніх от главного потока приложения. Подозреваю, что в связи с єтим будет очень много ньюансов, которіе решаются нетривиально, если вообще решаются. Тем более, что, по моему скромному мнению - использовать TWebBrowser в дополнительных потоках нет абсолютно никакого смысла.  Это связано с тем - что TWebBrowser по существу своему вещь, работаюшая ассинхронно - то есть мы можем создать несколько соотв.понент, дать им задания, и они будут "паралельно"  выполнять свою работу.. Понятно, они созадут несколько своих, и не подочетных нам потоков, но с нашей точки зрения TWebBrowser будет работать асинхронно. Естественно, если мы им не помешаем.  Условие "не мешания" довольно простое - не останавливать главный поток приложения. Поэтому всякие sleep для ожидания и "синхронизаций" в главном vcl-потоке категорично неприветсвуются, и рано или позно приводят к тем или иным проблемам в функционировании TWebBrowser

Конечно, может быть у Вас ситуация, когда нужно максимальная производительность с целью обеспечения какой-то функциональности. Тогда есть смысл проработать вариант работы с mshtml напрямую, совсем без визуализации. Сам mshtml прекоасно работает в потоках, и обеспечивает практиіески всю функциональность TWebBrowser, а также ряд дополнительных моментов, недоступных при работе на более высоком уровне (TWeBBrowser).
Конечно, вариант "mshtml + UI-less" несколько более трудоемок, но я подозреваю, что это все-же будет не так сложно, чем пропихивание не рекомендуемого к пропихиванию (TWebBrowser в отдельном потоке). Ну, и само-собою, намного менее требовательнее к ресурсам и значительно производительное решение по сравнению с несколькими TWebBrowser  асинхронно, либо в потоках (последнее - я все же придерживаюсь мнения, что стабильного и качественого решения не существует)


 
Ihor Osov'yak ©   (2004-11-14 23:50) [6]

прошу извинить за опечатки.. что-то торопился не по делу..


 
Defunct ©   (2004-11-15 00:12) [7]

> CoInitialize/CoInitialize..
> соотв.понент
> (последнее - я все же придерживаюсь мнения, что стабильного и качественого решения не существует)

> прошу извинить за опечатки..

мягко сказано.
это уже не опечатки, а просто бессмыслица.

(не подумайте, что это из-за личной неприязни. Вначале вы советуете перенести все в основной поток, потом говорите надо работать без визуализации и в конце пишете, что стабильного решения нет).


 
Ihor Osov'yak ©   (2004-11-15 00:19) [8]

Я уже одному человеку советовал учиться внимательно читать.
Для не умеющих внимательно читать - повторяю медленно - рассматривалось три варианта. Первый  WB в основном потоке и работают, как по уставу положено - в асинхронном режиме. Второй вариант - если на первом месте производительность и визуализация не нужна - ui-less mshtml в многопотчном варианте. Третий вариант - крайне нежелетельный - попітка заставить работать TWB в потоках, отличных от главного vcl-cкого потока.


 
Defunct ©   (2004-11-15 00:23) [9]

Ihor Osov"yak ©   (15.11.04 00:19) [8]

Спасибо, теперь все понятно.


 
Ihor Osov'yak ©   (2004-11-15 00:25) [10]

2 [9] Defunct

Я рад за вас.


 
Piter ©   (2004-11-15 00:38) [11]

Ihor Osov"yak ©   (15.11.04 0:19) [8]
Я уже одному человеку советовал учиться внимательно читать


Да я внимательно читаю...


 
Piter ©   (2004-11-15 00:39) [12]

Sergey_Masloff   (14.11.04 18:46) [2]
CoInitialize нужно вызывать в каждом потоке (кроме главного потока VCL приложения в котором есть uses ComObj).


а нафига нужен этот CoInitialize?


 
Piter ©   (2004-11-15 00:39) [13]

Ihor Osov"yak ©   (15.11.04 0:25) [10]
Я рад за вас.


сильно сомневаюсь :)


 
Ihor Osov'yak ©   (2004-11-15 00:43) [14]

2 [11] Piter ©   (15.11.04 00:38)
в контексте этого разговара я не Piter © имел ввиду. Или шапка загорелась?

> а нафига нужен этот CoInitialize?

В соответствии с парадигмой COM.

> сильно сомневаюсь :)

если кажется - крестится нужно. Довольно часто помогает.


 
Defunct ©   (2004-11-15 00:54) [15]

2 Piter

Зачем наколять обстановку, тем более Игорь извинился за опечатки и доступно все пояснил в [8]. Причем, большое спасибо ему, за то он поделился опытом, и я например, теперь не буду тратить лишнее время на реализацию TWB в отдельных потоках, если вдруг когда-нибудь столкнусь с подобной задачей.

То что он там написал про умение читать, относилось только ко мне, и я нисколько не обижаюсь.


 
Defunct ©   (2004-11-15 01:05) [16]

2 Игорь

Давайте будем более вежливыми друг к другу и ко всем остальным.

Вежливость - это язык, который слышит глухой и видит слепой (C)

Жестокие слова не ломают кости, но ранят сердце (C)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.037 c
1-1100255352
П7
2004-11-12 13:29
2004.11.28
Помогите портировать с С++ на Delphi


4-1096624185
MadSliMX
2004-10-01 13:49
2004.11.28
Как определить заголовок активного окна


14-1100268960
Kerk
2004-11-12 17:16
2004.11.28
каллосокер go home!


3-1099310895
Артем К.
2004-11-01 15:08
2004.11.28
Проблемы с вычисляемым полем


3-1098244796
ИМХО
2004-10-20 07:59
2004.11.28
Отчеты и Access





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский