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

Вниз

Нужно отобразить HTML   Найти похожие ветки 

 
BPK   (2004-09-09 11:52) [0]

Задача:
ВНУТРИ программы (в константе типа string), а не в виде отдельного файла имеется текст справки в виде кода HTML. Нужно отобразить по нажатию кнопки.
Код содержит таблицы.
Я пробовал преобразовать MSWord"ом в RTF и использовать TRichEdit, но последний ругается о невозможности интерпретировать такой код. Он ведь понимает только RTF версии 1.

Как отобразить?
Обязательное условие: справка должна представлять собой единое целое с программой.


 
TUser ©   (2004-09-09 11:59) [1]

WebBrowser1.Navigate2("about:"+YourString);


 
Ihor Osov'yak ©   (2004-09-09 12:05) [2]

1 вариант

procedure ShowHTML(aText: string);
var
v: Variant;
HTMLDocument: IHTMLDocument2;
begin
HTMLDocument := WebBrowser.DefaultInterface.Document as IHTMLDocument2;
v := VarArrayCreate([0, 0], varVariant);
v[0] := aText; // Here"s your HTML string
HTMLDocument.Write(PSafeArray(TVarData(v).VArray));
HTMLDocument.Close;
end;


2 вариант


function TForm1.LoadFromStream(const AStream: TStream): HRESULT;
begin
AStream.seek(0, 0);
Result := (WebBrowser1..DefaultInterface.Document as IPersistStreamInit).Load
(TStreamAdapter.Create(AStream));
end;


3 вариант (nikkie)

var
Doc: Variant;
begin
Doc := WebBrowser1.DefaultInterface.Document;
Doc.write(aText);
end;


во всех вариантах какой-нибудь документ предварительно должен
быть уже загружен, например, через WebBrowser1.Navigate("about:blank") - с целью инициализации WebBrowser1.DefaultInterface.Document ;


 
BPK   (2004-09-09 13:00) [3]

Ihor Osov"yak, я попробовал третий вариант. Работает.
TUser, твой вариант тоже работает, но страдает ограничением на длину String.
Всем спасибо.


 
BPK   (2004-09-10 15:44) [4]

Дополнение:
Третий вариант от Ihor Osov"yak работает с MSIE версии 5.50.4134.0600IC и выше, а с 5.00.3502.1000 выдаёт ошибку защиты.


 
Ihor Osov'yak ©   (2004-09-11 00:41) [5]

2 [4] BPK   (10.09.04 15:44)

Дополнение некоректно. Вывод сделан из Вашего мыла, сваливщегося мне на голову несколько минут назад (благо Вы гуглем пользоватся умеете.).

Разьяснение причины вашего заблуждения ушло мылом. Ключевые моменты дублирую сюда...

Итак. Вы именили мой код. Проигнорировав "во всех вариантах какой-нибудь документ предварительно должен быть уже загружен"

Итак ВАш код:

>Я попробовал два варианта загрузки html-кода из string:

 TFrmHtmlHelp = class(TForm)
   WB: TWebBrowser;
 end;

>================== Первый вариант ============================

procedure ShowHtmlHelp(Title,HelpStr:string);
var Frm:TFrmHtmlHelp;
   v:Variant;
   HTMLDocument: IHTMLDocument2;
begin
 Frm:=TFrmHtmlHelp.Create(Application);
 Frm.Caption:=Title;
 Frm.WB.Navigate("about:blank");
 HTMLDocument:=Frm.WB.DefaultInterface.Document as IHTMLDocument2;
 v:=VarArrayCreate([0,0],varVariant);
 v[0]:=HelpStr;
 HTMLDocument.Write(PSafeArray(TVarData(v).VArray));
 HTMLDocument.Close;
 Frm.ShowModal;
 Frm.Release;
end;</CODE
>================== Второй вариант ============================

procedure ShowHtmlHelp(Title,HelpStr:string);
var Frm:TFrmHtmlHelp;
   Doc:Variant;
begin
 Frm:=TFrmHtmlHelp.Create(Application);
 Frm.Caption:=Title;
 Frm.WB.Navigate("about:blank");
 Doc:=Frm.WB.DefaultInterface.Document;
 Doc.Write(HelpStr);
 Frm.ShowModal;
 Frm.Release;
end;


>==============================================================

>Оба варианта работают одинаково, а именно:
>работают нормально с MSIE версии 5.50.4134.0600IC и выше, а у тех, у кого
>стоит MSIE 5.00.3502.1000 выдают ошибку защиты.

Мой комментарий:

Вероятно, проблема связана с тем, что более старые ИЕ  выполняют
Frm.WB.Navigate("about:blank");  асинхронно,
а более новые - синхронно (есть такая особенность).  Сдедовательно - старые
ИЕ не успевают сделать навигацию, и как следствие - инициализацию
Frm.WB.DefaultInterface.Document  - и мы при первой же попытке запроса
интерфейса от Frm.WB.DefaultInterface.Document (посредством as) получаем
исключителльную ситуацию.

Для учета этого момента измените свой код так -

 Frm.WB.Navigate("about:blank");
 while Frm.WB.ReadyState < 4 do Application.ProcessMessages;

 на более новых  ИЕ навигация будет выполнятся синхронно, и цыкл ожидания
не будет крутиться, так как  Frm.WB.ReadyState на момент проверки условия
цыкла будет уже 4,  на более старых - немного поработает, пока не произойдет инициализация документа.

Удачи.


 
Ihor Osov'yak ©   (2004-09-13 12:09) [6]

> Попробовал. При таком подходе цикл вообще никогда не заканчивается.

>IE сначала проходит фазу READYSTATE_LOADING, а затем постоянно пребывает в READYSTATE_INTERACTIVE

Это значит, что вы делаете что о не так, причем это "что-то" мешает выполнению загрузки about:blank (достижению 4 для readyState).

Этим "что-то" может быть и тот факт, что Вы  навигацию делаете до визуализации вебброузера. Иногда я наблюдал такое поведение, его особо не исследовал.  Попытайтесь либо визуализировать форму перед Navigate("about:blank"), либо измените условие цыкла на while Frm.WB.ReadyState < 3 do Application.ProcessMessages;
так как достижение 3 (READYSTATE_INTERACTIVE) - достоточное условие для инициализации документа.



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

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

Наверх





Память: 0.48 MB
Время: 0.033 c
3-1093424056
IGray
2004-08-25 12:54
2004.09.26
Посоветуйте плиз DBGrid с мультиселектом и сортировкой


3-1093463113
S@shka
2004-08-25 23:45
2004.09.26
Объсните разницу триггеров Before и After


14-1094640803
Димитрий
2004-09-08 14:53
2004.09.26
Библиотеки компонентов параллельного программирования


11-1080481100
zoom
2004-03-28 17:38
2004.09.26
Как сохранить из editbox в файл через диалог


1-1095010381
QuasiLamo
2004-09-12 21:33
2004.09.26
Передача фокуса элементу управления модального окна





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский