Форум: "Сети";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];
ВнизВывод HTML + обработка событий Найти похожие ветки
← →
ZA (2003-10-17 09:02) [0]Мне нужна, на мой взгляд простая вещь:
1. Выдергиваем кусок исходного HTML текста из БД.
2. Выводим этот форматированный текст на экран.
3. При нажатии на какой либо элемент управления HTML, например, на <a href=1> программа должна перехватить управления и произвести соответствующие действия (например получить переменную href:=1);
Неужели для этого необходимо городить веб-сервер? Может есть компонент, который просто выводит HTML?
Прошу совета в каком направлении начинать копать. Я не работал с Delphi начиная с версии 3-4. Сейчас поставил семерку и офигел 8-)...
← →
Yurr (2003-10-17 09:23) [1]См. http://www.pbear.com/
← →
алекс (2003-10-19 14:53) [2]может, тебе лучше перехватить нажатие на хреф1 через встроенный компонент хтмл(его внутренние объекты). на королевстве делфи есть примеры, по крайней мере вся необходимая информация
← →
AAZ72 (2003-10-19 15:31) [3]To ZA
Может подскажешь - как ты выводишь на экран этот форматированный текст? Наверное с помощью WebBrowser? Если можно -код...
Заранее благодарю
← →
Ihor Osov'yak (2003-10-20 00:43) [4]2 ZA © (17.10.03 09:02)
TWebBrowser
2.
---
1 вариант
procedure ShowHTML(aText: string);
var
v: Variant;
HTMLDocument: IHTMLDocument2;
begin
if not assigned(WebBrowser.DefaultInterface.Document) then exit;
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
if not assigned(WebBrowser1.DefaultInterface.Document) then exit;
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;
3.
----
Если нужно ловить клик только на тегах, которые вызывают навигацию (тот же a), то перехватываем WebBrowser.OnBeforeNavigate2 с простеньким парсингом URL и, возможно, установкой Cancel в True с целью предовратить эту навигацию..
Если нужно ловить клик по любому тегу - то это несколько сложнее, придется самостоятельно подписываться на нотификацию либо от IHTMLWindow или от IHTMLDocument2 (уже не помню, кто из них делает нотификацию о клике, а в документацию смотреть лень), а потом по координате клика запрашивать тег (это просто), либо подписыватся на нотификацию к любому тегу.. Но это уже на грани маразма..
.. Есть еще вариант - можно в принцыпе назначать делфийские обработчики для событий тегов, тех, что нужно.. Но это также несколько трудоемко..
Так что может все же лучше огранитчится вариантом с тегами, которые вызывают навигацию с последующим контролем OnBeforeNavigate.. Остальные способа - на порядок сложнее..
← →
ZA (2003-10-20 15:10) [5]> См. http://www.pbear.com/
To Yurr:
Спасибо, кажется это то что мне нужно. HtmlLite волне подходит для моих целей. Спасибо.
To AAZ72:
Вот через этот htmlLite и буду выводить - htmlLite.LoadStrings и т.д. Особенно хорошо, что у него есть поддержка форм и значение переменных можно получить в программу!!!
To Ihor Osov"yak ©:
Спасибо, TWebBrowser и перехват его событий мне кажется слишком сложной процедурой. Цель то у меня проста, а вот реализация оказывается сложной из за применения навороченных компонентов.
С уважением, Алексей.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c