Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

Как прочитать текст из TWebBrowser?   Найти похожие ветки 

 
Ш-К   (2006-10-19 20:46) [0]

Следующий код нге работает:

procedure TForm1.FormCreate(Sender: TObject);
var
 WB: TWebBrowser;
begin
 WB := TWebBrowser.Create(nil);
 try
   WB.Navigate("C:\Temp\1.htm");
   while not WB.ReadyState in [READYSTATE_COMPLETE] do
     Forms.Application.ProcessMessages;
   Caption := (WB.Document as IHTMLDocument2).body.innerText; //<-- ошибка здесь
 finally
   WB.Free;
 end;
end;


 
Ш-К   (2006-10-19 20:58) [1]

А когда делаю так, то работает:

var
 WB: TWebBrowser;

procedure TForm3.Button1Click(Sender: TObject);
begin
 Caption := (WB.Document as IHTMLDocument2).body.innerText;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
 WB := TWebBrowser.Create(nil);
 WB.Navigate("C:\Temp\1.htm");
 while not WB.ReadyState in [READYSTATE_COMPLETE] do
   Forms.Application.ProcessMessages;
end;


Почему?


 
Gero ©   (2006-10-19 21:35) [2]

Потому что body на тот момент еще не существует, не используй OnCreate, используй WebBrowser.OnDocumentComplete


 
Ш-К   (2006-10-20 11:56) [3]

Причем здесь OnCreate. WB - локальный.

procedure TForm3.Button1Click(Sender: TObject);
var
 WB: TWebBrowser;
begin
 WB := TWebBrowser.Create(nil);
 try
   WB.Navigate("C:\Temp\1.htm");
   while not WB.ReadyState in [READYSTATE_COMPLETE] do
     Forms.Application.ProcessMessages;
   Caption := (WB.Document as IHTMLDocument2).body.innerText; //<--
   //ошибка здесь body = nil
 finally
   WB.Free;
 end;
end;


Тоже не работает. Я полагаю, не дожидаемся загрузки документа. Вот это не катит:
while not WB.ReadyState in [READYSTATE_COMPLETE] do
     Forms.Application.ProcessMessages;


Где? Лыжи не едут?


 
Плохиш ©   (2006-10-20 12:07) [4]


>    while not WB.ReadyState in [READYSTATE_COMPLETE] do

while WB.ReadyState < READYSTATE_COMPLETE do ?

http://www.swissdelphicenter.ch/de/showcode.php?id=1096


 
Ш-К   (2006-10-20 12:28) [5]

Охренеть. Оказывается код
while not WB.ReadyState in [READYSTATE_COMPLETE] do
и
while not (WB.ReadyState in [READYSTATE_COMPLETE]) do
по разному работает.

Проблема не в этом, а в том, что у меня WB.ReadyState никогда не становится READYSTATE_COMPLETE. И идет бесконечный ProcessMessages.
С чем это может быть связано?


 
Плохиш ©   (2006-10-20 12:39) [6]


> Ш-К   (20.10.06 12:28) [5]
> Охренеть. Оказывается код

Вообще-то в описании языка паскаль написано, что операция NOT имеет наивысший приоритет.

> Проблема не в этом, а в том, что у меня WB.ReadyState никогда
> не становится READYSTATE_COMPLETE.

В приведённой ссылке производят сравнивание с READYSTATE_INTERACTIVE, наверное не спроста.


 
Ш-К   (2006-10-20 12:52) [7]

Странно, всегда сравнивалось так:
while WebBrowser.ReadyState <> READYSTATE_COMPLETE do
По всему инету висит этот код. Даже в TEmbeddedWB.Wait.
Что случилось, что теперь так не пишут?


 
Gero ©   (2006-10-20 13:44) [8]

> [3] Ш-К   (20.10.06 11:56)


> Я полагаю, не дожидаемся загрузки документа. Вот это не
> катит:

Ты гений. Если бы еще и читать умел, было вобще супер.



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

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
15-1163660330
DelphiLexx
2006-11-16 09:58
2006.12.03
Какой метод есть у DBGridEh a аналогичный TBDGrid.CalcTitleRight?


2-1163327804
lsvit
2006-11-12 13:36
2006.12.03
Работа с exe файлами


11-1139940307
Boguslaw
2006-02-14 21:05
2006.12.03
MSEGUI


15-1163151320
HeadHunter
2006-11-10 12:35
2006.12.03
Требуется Delphi программист (Минск)


15-1163339560
TStas
2006-11-12 16:52
2006.12.03
Как делаются живые курсоры?