Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];




Вниз

ТВебБраузер 


Snake2000   (2001-12-13 15:15) [0]

Как в TWebBrowser загрузиь html динамически (т.е. не считывая из файла на диске, а генерируя на лету)?



ValeraVV   (2001-12-14 17:39) [1]

IHTMLDocument2.write или writeln (WebBrowser1.Document as IHTMLDocumet2, импортируй в Delphi MSHTML)
либо
IHTMLDocument2.createElement
{In Microsoft® Internet Explorer 4.0, the only new elements you can create are img, area, and option. As of Internet Explorer 5, you can create all elements programmatically, except for frame and iframe.}
либо
все-таки создать временный htm файл
либо
написать свой обработчик протокола (реализовать интерфейс ), регистрировать его во время исполнения программы (например myreports:) и уже в нем генерировать страницы, а обращаться и браузера, типа myreports://template.htm?param1=1 или
myreports://currentreport
(<a ref=" http://www.euromind.com/iedelphi/app/pluggableprotocol.htm"> http://www.euromind.com/iedelphi/app/pluggableprotocol.htm</a>)



Snake2000   (2001-12-15 12:13) [2]

Помещать в Браузер хтмл-код получается, но при этом он требует, чтобы туда уже что-то было загружено... А как первый раз туда загрузить - неясно...



dimonf   (2001-12-15 14:55) [3]

Посмотри может поможет!!!

Как программно запихивать в TWebBrowser свой HTML код чтобы он сразу исполнял его.

Dimonf (26.11.01 08:56)
Народ, как програмно запихивать свой HTML код в TWebBrowser, чтобы он сразуже выполнялся. Может есть другие компаненты или сылки на готовые примеры. Буду рад всему.


--------------------------------------------------------------------------------
Furkan c (26.11.01 17:58)
При создании формы создаешь *.HTML, и загружаешь в TWebBrowser.


--------------------------------------------------------------------------------
Dimonf (26.11.01 18:17)
Где создовать *.HTML, в памяти или на диске? И какой командой идет загрузка в TWebBrowser?


--------------------------------------------------------------------------------
Dimonf (26.11.01 22:33)
Народ, нет никаких мыслей??? :(((


--------------------------------------------------------------------------------
Donal c (27.11.01 10:51)
Html - на диске, а потом
TWebBrowser.Navigate (PathToYourHTML);


--------------------------------------------------------------------------------
Sir Alex c (27.11.01 17:04)
Посмотри на www.euromind.com/iedelphi в разделе APP/namespace - там показан пример загрузки страниц из баз данных, но HTML можно брать откуда угодно.


--------------------------------------------------------------------------------
nikkie c (27.11.01 18:57)
на самом деле вариантов много. можно через namespace, но во многих случаях сгодится вариант через dhtml.


procedure TForm1.Button1Click(Sender: TObject);
var
Doc : Variant;
begin
Doc := WebBrowser1.Document;
Doc.body.innerHTML := "Hello, Web";
// или так
Doc.write("<HTML><BODY>Hello, Web</BODY></HTML>");
end;
---------------------------------------------------------------------
Donal c (07.12.01 12:58)
вот такой метод у меня в Дельфи 5 сработал :
сперва делаешь
WebBrowser1.Navigate ("about:blank");
а после того, как загрузка закончится можешь уже выполнять те функции, что были рекомендованы раньше


--------------------------------------------------------------------------------
nikkie c (07.12.01 13:06)
IHTMLDocument2 объявлен в mshtml.pas
только то, что ты пытаешься сделать можно сделать попроще
var
doc : Variant;
begin
doc := WebBrowser.Document;
doc.write("<HTML><BODY><H1>hello, web</H1></BODY></HTML>");
// или так
doc.body.innerHTML := "hello, web";
end;




--------------------------------------------------------------------------------
Вячеслав c (07.12.01 14:31)
Если еще точнее, то IHTMLDocument2 это интерфейс объекта WebBrowser object
А модуль mshtml.pas получается путем импорта одноименной(mshtml) библиотеки типов.
Про WebBrowser object прочитай в MSDN.


--------------------------------------------------------------
Здравствуйте.
Как в WEBBROWSER""е перезагрузить уже загруженную картинку? Следующий
пример показывает значение свойства SRC у всех загруженных картинок.

var Doc: IHTMLDocument2;
i: Integer;
v: OleVariant;
S: String;
begin
Doc := WEBBROWSER1.Document as IHTMLDocument2;
for i := 0 to Doc.images.length - 1 do
begin
v := Doc.images.item(i, """");
S := v.Src; //
end;
end;

В принципе, решением должно являться следующая конструкция, но я пока не
нашел решения (загрузка должна осуществляться не на прямую с диска, а
например из Stream""а).
for i := 0 to Doc.images.length - 1 do
(Doc.images.item(i, """") as IHTMLImgElement). <-и чего-то еще в этом
месте надо дописать ;-).
Буду благодарен за любую помощь.



dimonf   (2001-12-15 14:56) [4]

------------------------------------------------------------------------------
sorry задаю вопросы за которые через недельку самому стыдно.. Но влез в не совсем знакомую область.
Итак: планируется использовать Doc1:IHTMLDocument2 чисто функционально (без связи с визуальными компонентами). В тестовом приложении делаю

procedure TForm1.FormCreate(Sender: TObject);
begin
Doc1:=CoHTMLDocument.Create;
end;

и ес-но
procedure TForm1.FormClose(Sender: TObject; var Action:
TCloseAction);
begin
Doc1._Release;
end;
C Doc1 пока никаких операций не делаю. Когда закрываю
приложение -
exception
..
Если Doc1._Release закоментировать - все Ok ;

Так вопрос - надо ли освобождать интерфейсы или приложение сделает это само (есть подозрение.. ).
И если не надоел - два маленьких вопроса на перспективу:
1. как более рационально содержимое Doc1 (планирую модифицировать в рантайме) в случае необходимости впихнуть в TWebBrowser (от IE4 через activeX) для визуализации того, что навоял;
2. что нужно помещать в начале PSafeArray^ перед юзанием IHTMLDocument2.write(psarray: PSafeArray); l - что то чтение msdn не очень то помогло ...;

Ответить на вопрос по почте.


Ответы:


--------------------------------------------------------------------------------
6/21/2000 11:56:26 PM | Дополнение или отзывы на ответы от автора вопроса

Спасибо за желание помочь. Но за єти две недели я основательно разобрался
с IHTMLDocument2 - действительно дивные вещи делать можно.
Насчет PSafeArray люди (Tolik Tentser из fido7/ru/delphi)
посоветовали так:


var
Document: IHtmlDocument2;
V: Variant;
begin
Document := WebBrowser.Document as IHtmlDocument2;
V := VarArrayCreate([0, 0], varVariant);
V[0] := "<HTML><HEAD><TITLE>Hello World</TITLE>" +
"</HEAD><BODY>Hello again !</BODY></HTML>";
Document.Write(PSafeArray(TVarData(v).VArray));
Document.Close;
end;

Может еще кому пригодится. Только вначале я делаю
WebBrowser.Navigate("about:blank",ov1,ov2...); - а эту идейку
подсмотрел в Королевы.

Os Ig


--------------------------------------------------------------------------------
6/21/2000 7:33:42 PM

Насчет второго вопроса:
У TWebBrowser"а есть свойство Document, оно как раз реализует
интерфейс IHTMLDocument2. Очень удобно доступаться к любым
"внутренностям" html-документа.
И перезаписывать его полностью или изменять по месту.

Насчет PSafeArray не могу сказать, еще не разбиралась. А это
академический интерес или без него Вам никак не обойтись ?

Лена Филиппова


--------------------------------------------------------------------------------
5/29/2000 6:10:08 PM

По первому вопросу.
Вы догадываетесь абсолютно правильно. Doc1._Release вызывается
автоматически. Мало того, вместо Doc1.Relese можно написать
Doc1 := nil; При этом автоматически вызовется Doc1._Release и
ошибок при закрытии формы не будет. Можно вообще ничего не писать,
тогда объект прибьется автоматически. Если же нужно точно указать,
когда интерфейс должен быть освобожден, тогда пишите Doc1 := nil;

Ссылки на интерфейсы автоматически обнуляются при разрушении
экземпляра объекта, в котором она (ссылка) объявлена или при выходе
из процедуры (если ссылка на интерфейс объявлена как переменная в
процедуре).

В принципе, при работе с интерфейсами, вызывать метод _Release не
рекомендуется, т.к. это может привести к тому, что объект,
реализующий интерфейс будет освобожден, а ссылка на него еще
останется. Это и произошло в Вашем случае.

По остальным вопросам - сори, не в курсе (не ковырял я это).
----------------------------------------------------------------------



dimonf   (2001-12-15 14:57) [5]


Delphi5. В компонент TWebBrowser получаю Web страничку. Вопрос: Как загрузить ее исходный текст (*.htm) в TMemo. Спасибо.

Ответить на вопрос по почте.


Ответы:


--------------------------------------------------------------------------------
5/12/2000 12:25:26 PM

Поищите файл mshtml.tlb , скорее всего Windows\system
И сделайте из него mshtml.pas



Лена Филиппова


--------------------------------------------------------------------------------
5/4/2000 3:55:28 PM

uses MSHTML - говорит нет файла MSHTML.dcu!? Его на компе нет.... Может что-то другое?
vlad


--------------------------------------------------------------------------------
4/29/2000 5:07:54 PM

uses MSHTML ....

kig


--------------------------------------------------------------------------------
4/29/2000 1:41:21 PM

Почему-то ругается на строку ih: IHTMLDocument2; - говорит неизвестный индификатор. Может нужно что-то подключить?
vlad


--------------------------------------------------------------------------------
4/27/2000 6:59:24 PM

procedure TForm1.Button2Click(Sender: TObject);
var
ih: IHTMLDocument2;
i: Integer;
v: OleVariant;
begin
Memo1.Lines.Clear;
ih := IUnknown(WebBrowser1.Document) as IHTMLDocument2;
for i := 0 to ih.all.length - 1 do
begin
v := ih.all.item(i, "");
if v.tagName = "HTML" then
begin
Memo1.Lines.Add(" " + v.outerHTML);
Break;
end;
end;
end;


--------------------------------------------------------
1. На форме находится компонент TWebBrowser. Как можно распечатать html- файл, открытый в нём?
2. Как сделать, чтобы содержимое TWebBrowser нельзя было выделить мышкой?
3. Как можно связать какой-нибудь процесс (например распаковку ОДНОГО большого файла) с TProgressBar?

Ответить на вопрос по почте.


Ответы:


--------------------------------------------------------------------------------
4/28/2000 11:29:41 AM

Ссылка, которую открыл Kig.
www.euromind.com/iedelphi/index.html
Среди прочего, http://www.euromind.com/iedelphi/SetPrintHeader.htm

Спасибо, Kig! :-)

JINX


--------------------------------------------------------------------------------
4/4/2000 9:50:55 AM

У меня на этом компьютере IE 4 - я полазил по его настройкам и не смог
найти, где можно отключить печать этой строки "ручками". Подозреваю, что
нельзя это сделать и программно. Надеюсь, что я не прав.

Кстати - на Ваш третий вопрос - встречный вопрос -этот процесс "распаковки" - делает код,
написанный Вами?
Тогда внутри цикла распаковки (или чего-то там еще) вызывайте ProgressBar.StepIt
и Application.ProcessMessages.


JINX


--------------------------------------------------------------------------------
4/3/2000 12:29:25 PM

Спасибо за ответ на мой предыдущий вопрос, но я хотел бы уточнить:
Если отправлять документ на печать, используя
WebBrowser.ExecWB(OLECMDID_PRINT,0), на листе кроме текста документа
печатается системное
время с датой а также путь к файлу. Можно ли избавиться от этого, так
как местоположение файла на диске указывать нежелательно?

Atom





dimonf   (2001-12-15 14:58) [6]

--------------------------------------------------------------------------------
3/30/2000 4:47:55 PM

Посмотрите метод TWebBrowser.ExecWB
Должно быть что-то вроде
WebBrowser1.ExecWB(OLECMDID_PRINT,0);

--------------------------------------------------------------------
Задача: отображать в окне HTML текст, который не существует как файл или URL, то есть текст генерится в run-time и записывать его не нужно, только отображать.
Проблема: Использую TWebBrowser для отображения текста в окне и IHTMLDocument2 для перезаписи текста , все замечательно и быстро, но есть одно НО. Доступ к TWebBrowser.Document возможен только тогда, когда какой-нибудь документ уже загружен! Иначе он Nil. То есть приходится делать :
WebBrowser.Navigate(NameTmpFile);
Body:=IHTMLDocument2(WebBrowser.Document);
...

Никак не могу найти возможность обратиться к "внутренностям" IHTMLDocument2 без предварительного Navigate. Может есть какие идеи, как можно инициализировать объект документа?
Советы записывать его куда-нибудь в temp не принимаются. Страница должна отображаться при передвижении по записям в таблице, поэтому постоянное записывание и считывание с диска очень заметны а таком режиме.
Спасибо за любые идеи и намеки.

Ответить на вопрос по почте.


Ответы:


--------------------------------------------------------------------------------
2/24/2000 2:21:50 PM

Задавала вопрос я, решение найдено, всем спасибо.
Способ, предложенный Ильей рабочий, но есть способ лучше :о)

1)И все же инициализировать TWebBrower.Document можно только
загрузив в него страницу. Правда, как оказалось, это можно
сделать без пустого Html, а с помощью служебного Url"а "about:blank".
Я создала компонент, унаследовав его от TWebBrowser и перед
использованием Document проверяю инициализирован ли он.
То есть
IF Document = Nil Then InitDocument;
....
Function TShowHtml.InitDocument;
Begin
IF Document = nil Then Navigate("about:blank");
while ReadyState < READYSTATE_INTERACTIVE
do Forms.Application.ProcessMessages;
End;

2)Насчет использования IHTMLDocument2 - с помощью этого
интерфейса довольно легко перезаписывать HTML-страницу, причем
именно как часть html-кода, без полного форматирования.
Более того, теги <HTML>, <HEAD> и <BODY> будут проигнорированы.


Елена Филиппова


--------------------------------------------------------------------------------
2/24/2000 11:18:16 AM

Столкнулся с той же проблемой. Решил ее путем при загрузке формы, содержащей
TWebBrowser, инициализацией TWebBrowser пустой html (кроме пустого body
ничего нет). Затем получаю интерфейс Document и использую его для
динамического отображения страниц через
doc.open("text/html", "replace");
doc.write(Value);
doc.close();
естественно ничего не записывая на диск.

В принципе можно использовать и IHTMLDocument2, но IE умеет отображать куски
страниц без полного ее оформления - например в Value можно подсунуть только
таблицу без тегов body и html - и он ее отобразит

-------------------------------------------------------------------------------
у компонента TWebBrowser существует property Document: IDispatch которое представляет Веб страничку отображаемую в браузере. Мне необходимо сохранить эту страничку в файл или в базу данных а затем считать обратно. Подскажите как решать эту проблему, или где узнать какие функции доступны для данного документа через IDispatch ?

Ответить на вопрос по почте.


Ответы:


--------------------------------------------------------------------------------
1/25/2000 1:52:15 PM

Сохранить в файл можно след. образом:

IECommand := IUnknown(WebBrowser1.Document) as IOleCommandTarget;
IECommand.Exec(nil, OLECMDID_SAVE[или OLECMDID_SAVEAS],
OLECMDEXECOPT_PROMPTUSER [OLECMDEXECOPT_DONTPROMPTUSER], nil, nil);

TWebBrowser.Document возвращает ссылку на тот интерфейс, который описан в
Dynamic HTML как объект document. Соответственно, через него Вам доступна
вся объектная модель данной страницы. Вы можете через document.all получить
теги в виде объектов и получить их содержимое через св-во outerHTML,
outerTEXT .... - в общем поинтересуйтесь объектной моделью IE (MSDN Platform
SDK\Internet/Intranet/Extarnet Services\Dynamic HTML\Document Object Model).

Записать в document можно след. методами
open, write, writln, close. (см. там же в MSDN)

При этом надо заметить, что получать TWebBrowser.Document необходимо
получать после полной загрузки страницы (DocumentComplete Event)


Извените!!! :)))




Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.79 MB
Время: 0.057 c
4-9349            Inquisitor            2001-12-31 19:39  2002.03.04  
HELP!!! PLZ... DOC FILES


1-9145            ДмитрийВ              2002-02-17 19:27  2002.03.04  
в буфер кусок изображения на форме сохранить


1-9124            IIL                   2002-02-08 08:51  2002.03.04  
макроподстановки


3-9083            IronHawk              2002-02-06 18:44  2002.03.04  
Данные из QuickReport.Preview сохранять в *.dbf или *.db файл !!!


1-9223            макар                 2002-02-15 13:03  2002.03.04  
Help