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

← →
Furkan ( 2001-11-26 17:58 ) [1]
При создании формы создаешь *.HTML, и загружаешь в TWebBrowser.

← →
Dimonf ( 2001-11-26 18:17 ) [2]
Где создовать *.HTML, в памяти или на диске? И какой командой идет загрузка в TWebBrowser?

← →
Dimonf ( 2001-11-26 22:33 ) [3]
Народ, нет никаких мыслей. :(((

← →
Donal ( 2001-11-27 10:51 ) [4]
Html — на диске, а потом
TWebBrowser.Navigate (PathToYourHTML);

← →
Sir Alex ( 2001-11-27 17:04 ) [5]
Посмотри на www.euromind.com/iedelphi в разделе APP/namespace — там показан пример загрузки страниц из баз данных, но HTML можно брать откуда угодно.

← →
nikkie ( 2001-11-27 18:57 ) [6]
на самом деле вариантов много. можно через namespace, но во многих случаях сгодится вариант через dhtml.
procedure TForm1.Button1Click(Sender: TObject);
var
Doc : Variant;
begin
Doc := WebBrowser1.Document;
Doc.body.innerHTML := "Hello, Web";
// или так
Doc.write(" Hello, Web ");
end;

← →
Sir Alex ( 2001-11-28 14:16 ) [7]
А можно через DHTML, к уже отображенному тексту добавить еще что-нибудь без передергивания экрана?

← →
nikkie ( 2001-11-29 10:39 ) [8]
я попробовал — вроде не дергается. мне кажется, что если добавленный html не изменяет layout всей страницы, то и не должно дергаться. если проблемы все-таки есть, то пришли пример — какая страница, что и как добавляешь.

← →
дикое Кенгуру ( 2002-02-09 02:21 ) [9]
Что делать если
TWebBrowser.Navigate (PathToYourHTML);
не работает? Пишет что какойто класс не правильный.
Как должен выглядить PathToYourHTML ?
А код
————-
procedure TForm1.Button1Click(Sender: TObject);
var
Doc : Variant;
begin
Doc := WebBrowser1.Document;
Doc.body.innerHTML := "Hello, Web";
// или так
Doc.write(" Hello, Web ");
end;
————-
Вызывает какую то там ошибку по какому то адресу.
Что можно сделать с этим ?

← →
Dimk ( 2002-02-09 02:36 ) [10]
Наверное дело в том что TWebBrowser это еще и оле объект и может у тебя CLSID класса который скрывается за TWebBrowser не зарегистрирован? В священном писании написано :o)
TWebBrowser wraps the IWebBrowser2 interface from Microsoft’s Shell Doc Object and Control Library (SHDOCVW.DLL) to allow you to create a customized Web browsing application or to add Internet, file and network browsing, document viewing, and data downloading capabilities to your Delphi applications.
Note: Because TWebBrowser wraps the SHDOCVW.DLL, you must have SHDOCVW.DLL installed to use this component. This DLL ships with InternetExplorer 4 and later.

← →
дикое Кенгуру ( 2002-02-11 04:06 ) [11]
А где скачать этот CLSID класс ?
И где его надо регистрировать ?
У меня стандартное Дельфи 5.
Файл SHDOCVW.DLL у меня в папке C:WINDOWSSYSTEM находится.
Как его использовать ?
Это значит, что все кто будет пользоваться моей программой, должны будут тоже устанавливать и регистрировать этот файл ?

← →
дикое Кенгуру ( 2002-02-11 04:22 ) [12]
Во чего пишет :
[Error] Unit1.pas(207): This form of method call only allowed for class methods
На сточку :
TWebBrowser.Navigate ("file.txt");
Что же я не так делаю ?
Может кроме TWebBrowser нужно ещё что то важное на форму поместить ?

← →
Лёша ( 2002-02-11 14:16 ) [13]
TWebBrowser.Navigate ("file.txt");
И не будет работать. Надо писать:
WebBrowser1.Navigate ("file.txt");
Чтобы работал код:
procedure TForm1.Button1Click(Sender: TObject);
var
Doc : Variant;
begin
Doc := WebBrowser1.Document;
Doc.body.innerHTML := "Hello, Web";
// или так
Doc.write(" Hello, Web ");
end;
нужно предварительно загрузить в WebBrowser1 какой-нибудь документ. Например:
WebBrowser1.Navigate ("about:blank");
Команда Doc.body.innerHTML := "Hello, Web" заменяет текст расположенный между . . Поэтому, если во всех последующих вставках будите использовать общие скрипты, стили, метатеги и.т.д., рекомендуется предзагрузить их в одном файле. Т.е. не "about:blank", а "шапка.htm".

← →
RainMan ( 2002-02-20 07:27 ) [14]
не "about:blank", а "шапка.htm".
т.е. если испоьзуется style jscript то это нужно загрузить в файл "шапка.htm"? и какой должен быть фоомат в этом файле? Полностью хтмл или только до тегов BODY?

← →
дикое Кенгуру ( 2002-02-22 06:32 ) [15]
Лёша
Спасибо за помощь ! Чего то я тормознул чуток.
Использование TWebBrowser (статья)
- размер шрифта уменьшить размер шрифта
увеличить размер шрифта 
- Печать
Использование TWebBrowser (статья)
Во многих современных программах требуется работа с данными в формате HTML. В качестве средства для просмотра таких данных в Delphi используется ActiveX компонент TWebBrowser, который использует компонент WebBrowser, входящий в состав Microsoft Internet Explorer. Таким образом, он имеется на любом компьютере, на котором установлен Internet Explorer. Все последние версии Windows включают этот компонент в стандартной поставке и, более того, практически неработоспособны без него.
Для того, чтобы использовать TWebBrowser в своей программе необходимо разместить на форме соответствующий компонент, размещенный на закладке Internet. После этого, чтобы отобразить в нем страницу HTML, необходимо вызвать его метод Navigate
Рассмотрим подробнее параметры, передаваемые в метод Navigate.
Первым параметром передается строка с URL, указывающим адрес, из которого должна осуществляться загрузка. Поддерживаются все протоколы, доступные в IE, например file:// — загрузка файла, res:// — загрузка из ресурса.
Остальные параметры не являются обязательными и служат для передачи дополнительной информации.
Flags Целое число, представляющее из себя битовую маску из следующих флагов: 1 Открыть ресурс в новом окне 2 Не добавлять страницу в историю просмотренных 4 Не загружать страницу из кэша 8 Не сохранять страницу в кэше
TargetFrameName Задает имя фрейма, в который будет загружена страница
PostData Задает данные для запроса с сервера методом HTTP POST. Если этот параметр пустой – используется метод GET
Headers Задает дополнительные заголовки HTTP
Наиболее интересным является параметр PostData, позволяющий передать на Web-Server данные, полученные в результате заполнения формы, если этот сервер требует HTTP – транзакции POST. Например, следующий фрагмент кода передает на сервер имя пользователя и пароль, заполненные в форме Delphi.
На Web-сервере этот запрос может быть обработан, например, следующим ASP – скриптом:
После того как данные получены, необходимо дать пользователю возможность для работы с ними. Многие функции TWebBrowser доступны через метод ExecWB, предоставляющий простой способ обращения к интерфейсу IOleCommandTarget.
Этот метод имеет вид:
CmdID может быть одной из констант OLECMDID, определенных в файле ShDocVw.pas.
Параметр cmdexecopt может принимать одно из следующих четырех значений:
· OLECMDEXECOPT_DODEFAULT — Выполнить команду с настройками «по умолчанию»
· OLECMDEXECOPT_PROMPTUSER — Запросить у пользователя настройки для выполнения команды (например, при печати – вывести диалог Print Setup)
· OLECMDEXECOPT_DONTPROMPTUSER — Выполнить команду не запрашивая пользователя
· OLECMDEXECOPT_SHOWHELP — Вывести справку о команде
Параметры pvaIn и pvaOut – дополнительные и зависят от конкретной команды.
Имеется возможность запросить у TWebBrowser доступность той или иной команды при помощи функции:
cmdID: OLECMDID // идентификатор команды
Функция возвращает битовую маску из следующих значений:
OLECMDF_SUPPORTED Команда поддерживается
OLECMDF_ENABLED Команда поддерживается и разрешена
OLECMDF_LATCHED Команда – переключатель и сейчас включена
Таким образом, можно настраивать интерфейс, в зависимости от поддерживаемых текущей версией TWebBrowser возможностей:
Для печати содержимого TWebBrowser служит команда OLECMDID _ PRINT . Метод печати, может выглядеть, например, следующим образом:
Блок try … except … end необходим, поскольку TWebBrowser при выполнении любой команды при помощи ExecWB генерирует исключение EOleException с кодом:
-2147221248 ($80040100) Trying to revoke a drop target that has not been registered.
Начиная с Internet Explorer 5 документированы дополнительные команды, поддерживаемые через интерфейс IOleCommandTarget. Они существенно расширяют возможности по управлению компонентом, однако недоступны, либо не документированы в версии 4. Это создает определенные сложности при программировании. Например, чтобы организовать поиск внутри загруженной страницы необходим следующий код:
Использование недокументированного вызова в данном случае оправдано, т.к. в версии 4 этот вызов уже не будет изменяться, а в версию 5 мы обнаруживаем и используем документированный метод. В то же время IE4 еще достаточно распространен и совсем лишать программу возможности поиска на таких компьютерах не оправдано.
Если необходима более тонкая настройка компонента – необходимо реализовать интерфейс IDocHostUIHandler, позволяющий программисту взять под контроль поведение TWebBrowser.
Интерфейс объявлен как :
Наследник TWebBrowser, реализующий этот интерфейс должен быть объявлен как
Код такого компонента, реализующего минимальную функциональность приведен на CD — ROM . Вы можете использовать его как основу для создания своих расширенных наследников TWebBrowser .
Рассмотрим наиболее интересные с точки зрения программиста методы интерфейса IDocHostUIHandler .
Эта функция вызывается, когда TWebBrowser должен показать контекстное меню. Если Вы отображаете собственное меню, либо хотите подавить меню – функция должна вернуть S _ OK , если меню должен показать TWebBrowser – S _ FALSE .
В неё передаются следующие параметры:
DwID – идентификатор меню, который может принимать одно из следующих значений:
в зависимости от значения идентификатора Вы можете вывести подходящее меню
ppt – координаты, в которых должно быть показано меню
pcmdtReserved – интерфейс IOleCommandTarget , позволяющий запросить состояние команд и их выполнение
pdispReserved – интерфейс IDispatch объекта, для которого вызывается меню
Простейшая реализация этого метода может выглядеть следующим образом:
Для полного запрета контекстного меню метод должен всегда возвращать S_OK.
Приложение может заполнить структуру pInfo, определенную как:
dwFlags – битовая маска из следующих флагов:
Запрещает выделение текста в форме
Запрещает контекстное меню
Подавляет вывод 3-мерной рамки вокруг компонента
Отключает полосы прокрутки
Запрещает исполнение скриптов
Открывает ссылки в новых окнах
Использует плоский стиль для полос прокрутки
При вводе возврата каретки в режиме редактирования будет использоваться тег
Компонент получает фокус только при щелчке мышью в клиентской области окна. При щелчке в не клиентской области (например на полосе прокрутке) компонент фокуса не получает.
dwDoubleClick задает реакцию на двойной щелчок мышью и может принимать одно из следующих значений:
Выполнять действие «по умолчанию»
Показывать окно свойств страницы
Показывать HTML-код страницы
Метод должен вернуть S_OK или код ошибки OLE
Например, чтобы создать окно с плоскими полосами прокрутки и без 3-мерной рамки необходимо реализовать этот метод следующим образом:
Позволяет перехватить исполнение команд и обработку «горячих» клавиш и заменить её на свою.
Позволяет задать путь в реестре, который TWebBrowser будет использовать для хранения настроек. Это дает возможность, например, сделать используемый в программе компонент независимым от текущих настроек Internet Explorer`а.
Путь должен находится под ключом HKEY_CURRENT_USER.
Метод должен выделить память под строку функцией CoTackMemAlloc. Даже в случае ошибки параметр pchKey должен быть инициализирован значением NIL или адресом строки. Метод возвращает S_OK в случае успеха или S_FALSE в противном случае.
Типичная реализация этого метода может выглядеть следующим образом:
Существует ряд настроек, которые, несмотря на наличие обработчика GetOptionKeyPath в любом случае берутся из стандартных параметров Internet Explorer. Наиболее важными из них являются колонтитулы, используемые при печати. В версиях Internet Explorer до 5.5 включительно единственным способом изменить (или подавить) колонтитулы является запись новых значений в ключ реестра:
перед печатью и восстановление их после печати.
Позволяет вернуть указатель на реализованный в Вашем приложении интерфейс IDispatch, который будет доступен для скриптов в TWebBrowser. Если Вы не реализуете этого интерфейса – параметр ppDispatch должен быть инициализирован в NIL. Метод возвращает S_OK в случае успеха или код ошибки OLE в случае ошибки.
Методы этого интерфейса доступны из скриптов, выполняющихся в TWebBrowser следующим образом:
Реализовать IDispatch можно, например, при помощи класса TAutoObject.
Позволяет изменить URL по которому осуществляется загрузка страницы.
pchURLIn указывает на строку, содержащую исходный URL. Если Ваше приложение осуществляет трансляцию, оно должно выделить память под новое значение используя функцию CoTaskMemAlloc, заполнить буфер новым значением URL и вернуть S_OK.
В противном случае Вы должны присвоить ppchURLOut значение NIL и вернуть S_FALSE. В случае возникновения ошибки метод должен вернуть OLE-код ошибки.
Обработчик вызывается только при интерактивном переходе по ссылке из TWebBrowser и не вызывается при переходе при помощи метода Navigate.
Доступ к документной модели TWebBrowser
В Internet Explorer реализовано расширение HTML, под названием Dynamic HTML (DHTML). Эта модель представляет все элементы HTML-документа в виде набора коллекций объектов, доступных для изменения. Скрипты, встроенные в страницы и приложения, имеющие доступ к этим коллекциям могут находить и изменять их элементы, добавлять новые, причем изменения будут немедленно отражены в окне TWebBrowser. Иерархическое объектное представление HTML объектов называется DOM (Document Object Model) .
DOM в IE ActiveX доступна программисту в виде набора COM интерфейсов. Отправной точкой для доступа к ней служит свойство
Это свойство обеспечивает доступ к интерфейсу, IHtmlDocument2 позволяющему работать с содержимым документа. Для получения интерфейса необходимо запросить его при помощи оператора
Документ в DOM представляет из себя набор коллекций элементов. Для доступа к коллекции служит интерфейс IHtmlElementCollection, а к элементу коллекции – IHtmlElement. Следующий пример выводит все тэги, имеющиеся в текущем документе и текст внутри тэгов.
Возможно динамическое создание документов в памяти, без необходимости записи их на диск и вызова метода Navigate с протоколом ‘file://’
Проиллюстрируем работу с документной модели TWebBrowser на примере. Расположим на форме компоненты TWebBrowser, TMemo и три TButton, и создадим следующие обработчики событий:
В Memo1.Lines в дизайнере запишем следующий текст:
Таким образом, мы получили возможность динамически создавать HTML документы и предоставлять их пользователю.
Довольно часто при разработке программ для Веб используется компонент WebBrowser, расположенный на странице палитры компонентов Internet. Этот компонент помогает легко встроить веб-браузер в Ваше приложение и использовать все функциональные возможности IE в своих приложениях.
При этом может возникнуть необходимость обратить внимание пользователя на какой-либо элемент, загруженной в WebBrowser страницы, например на ссылку или изображение. Выводить все ссылки в отдельный список? Не эффективно и может потребовать лишнего места на форме для расположения визуальных компонентов. Более эффективно каким-либо образом изменить html-код страницы, например выделить ссылки полужирным шрифтом или вставить рядом со ссылкой небольшое изображение. Как это делается — рассмотрим на небольшом примере.
1. Теория
В статье «Что можно «вытащить» из DOMа» мы немного касались таких свойств объекта Document как innerText и outerText. Аналогично этим, есть ещё два свойства: innerHTML и outerHTML. Чтобы понять какую информацию несут в себе эти свойства посмотрите на следующий рисунок:
В представленном на рисунке фрагменте кода рассмотрены свойства innerHTML/innerText и outerHTML/outerText для элемента страницы «параграф».
Теперь, используя эти свойства Вы сможете всегда найти на странице необходимый элемент и работать с ним.
Что касается вставки своего кода в загруженную страницу, то для этого можно использовать два метода:
- insertAdjacentText(where, text: string);
- insertAdjacentHTML(where, html: string).
Эти методы очень похожи друг на друга. Единственное различие в них состоит в том, что insertAdjacentHTML позволяет вставить в страницу текст, содержащий html-теги и эти теги будут правильно интерпретированы браузером.
Для того, чтобы воспользоваться этими методами необходимо задать два параметра: where — строка, указывающая в каком месе следует вставить элемент text/html. При этом where может принимать следующие значения:
afterBegin — вставляет строку text/html после открывающего тега элемента;
beforeBegin — вставляет строку text/html перед открывающим тегом элемента;
afterEnd — вставляет строку text/html после закрывающего тега элемента;
beforeEnd — вставляет строку text/html перед закрывающим тегом элемента;
Теперь рассмотрим все вышесказанное на небольшом примере.
2. Практическая часть
Давайте напишем небольшое приложение, которое будет каким-либо образом отмечать на загруженной странице все ссылки.
Открываем Delphi, создаем новый проект и в главном модуле не забываем подключить в uses модуль MSHTML.
Я не стал сильно «выделываться» в плане интерфейса и сделал вот такую форму приложения:
В верхнее поле вводим адрес сайта, жмем «Перейти» и после загрузки страницы начинаем «колдовать» над кодом страницы.
При этом с помощью двух ComboBox’ов я регулирую что и куда вставлять. Первый ComboBox указывает, каким методом пользоваться, а второй — куда вставлять новый элемент/текст.
Теперь обратимся непосредственно к листингам программы. Во-первых, напомню тем кто забыл и сообщу тем кто ещё не знает, что переход на URL в WebBrowser’е осуществляется вызовом метода Navigate:
После того, как страница будет загружена, достаточно выполнить следующую процедуру:
Здесь, как вы можете заметить, я снова обратился к DOM, а именно — получил коллекцию всех ссылок на странице и поработал с каждой ссылкой в отдельности через переменную Element, вставив рядом с ней необходимый текст. Работающая программа выглядит вот так:
Аналогичным образом можно вставлять в код страницы, например, небольшие изображения или вообще полностью изменить все рисунки на страницы — никто Вас не ограничивает 🙂




увеличить размер шрифта 



