Компонент TPageProducer
? property HTMLDoc: TStrings — содержит код шаблона HTML-документа;
? property HTMLFile: TFileName — задает имя файла, в котором содержится шаблон HTML-документа.
Указанные свойства являются взаимоисключающими, поэтому можно задать только одно из них.
Компонент TPageProducer обрабатывает документ с помощью метода Content:
function Content: string: override:
Этот метод выполняет обработку шаблона и возвращает результат обработки в виде HTML-документа.
Шаблон представляет собой обычный HTML-документ, в который, помимо обычных HTML-тегов, могут включаться специальные теги, имеющие следующий формат:
Когда при обработке шаблона TPageProducer встречается с такими тегами, возникает событие OnHTMLTag (единственное событие TPageProducer). В обработчике этого события можно определить, какой тег обрабатывается и чем его следует заменить.
Обработчик события OnHTMLTag имеет следующий формат: type
TTag - (tgCustom. tgLink, tglmage, tgTable. tglmageMap. tgObject, tgEmbed):
THTMLTagEvent - procedure (Sender: TObject: Tag: TTag: const TagString: string: TagParams: TStrings: var ReplaceText: string) of object;
Здесь параметр Tag определяет тип тега и может принимать одно из семи значений, в зависимости от имени тега:
? tgLink — тег LINK (гипертекстовая ссылка);
? tglmage — тег IMAGE (изображение);
? tgTable — тег TABLE (таблица);
? tglmageMap — тег IMAGEMAP (изображение с областями срабатывания);
? tgObject — тег OBJECT (объект ActiveX);
? tgEmbed — тег EMBED (встраиваемая библиотека);
? tgCustom — тег, определяемый пользователем (имя этого тега не совпадает ни с одним из предопределенных).
Имя тега содержится в аргументе TagString. Параметры тега передаются через аргумент TagParams в виде строк вида имя=значение. Через аргумент ReplaceText возвращается строка, на которую должен быть заменен обрабатываемый тег. Модифицируем предыдущий пример, используя компонент TPageProducer. В ответе дополнительно выведем информацию об IP-адресе клиента, пославшем запрос, а также отобразим имя, которое ввел пользователь. Для этого потребуется внести в проект некоторые изменения.
1. Поместите на форму компонента TWebModule компонент TPageProducer.
2. В свойстве HTMLDoc компонента TPageProducer задайте следующий шаблон:
Результат проверки
Адрес:
Имя:
3. В разделе private описания класса TWebModulel задайте две строковые переменные: ResultStr и LoginStr.
4. Измените обработчик события OnAction и задайте обработчик события On HTMLTag так, как показано в приведенном ниже коде:
unit test_unit: i nterface uses
Windows. Messages. SysUtils. Classes. HTTPApp; type
TWebModulel = class(TWebModule)
PageProducerl: TPageProducer: procedure WebModulelWebActionItemlAction(
Sender: TObject: Request: TWebRequest:
Response: TWebResponse: var Handled: Boolean): procedure PageProducerlHTMLTag(Sender: TObject:
Tag: TTag; const Tagstring:
String: TagParams: TStrings: var ReplaceText: String): private
{ Private declarations }
ResultStr: string:
LoginStr: string: public
{ Public declarations } end:
var
WebModulel: TWebModulel; implementation {$R *.DFM)
procedure TWebModulel.WebModulelWebActionItemlAction( Sender: TObject; Request: TWebRequest:
Response: TWebResponse: var Handled: Boolean); const
login: String =■ 'test'; password: String = '123': var
validate: Boolean; begin
validate:»false: if Request.Method“'GET' then begin
LoginStr: “Request. QueryF i el ds. Va 1 ues ['. 1 ogi n' ]; validate:=(LoginStr=login) and (Request.QueryFi elds.Values['password']=password):
end:
if Request.Method“'POST' then begin
Logi nStr:“Request.ContentFi elds.Values['1ogi n']; validate:=(LoginStr=login) and (Request .ContentFi el ds.
Val ues[' password' >password):end:
if validate
then ResultStr:='HMs/naponb введены правильно' else ResultStr:=’HMB/naponb введены неверно';
Response.Content:=PageProducerl.Content: end;
procedure TWebModulel.PageProducerlHTMLTag(
Sender: TObject; Tag; TTag; const TagString: String;
TagParams: TStrings; var ReplaceText: String); begi n
if TagString='RESULT' then ReplaceText:=ResultStr: if TagString='HOST' then ReplaceText:=(Sender as TCustomContentProducer).Di spatcher.Request.RemoteHost: if TagString='NAME' then ReplaceText:=LoginStr: end;
end.
Чтобы протестировать полученное приложение, нет необходимости вносить изменения в код HTML-документа, из которого производится вызов сценария.
ПРИМЕЧАНИЕ------------------------------------------------------------------------------
Приведенный пример достаточно прост, поэтому с'его помощью трудно оцёнить достоинства компонента TPageProducer. Тем не менее, он дает представление об особенностях использования этого компонента и интерпретации управляющих тегов.
Еще по теме Компонент TPageProducer:
- Функциональные компоненты правового сознания.
- § 3.1. Основные структурные компоненты организации
- Участие образных компонентов в мышлении следователя
- Основные компоненты.
- 54. Основные компоненты социального контроля
- Дополнительные компоненты (общие).
- Дополнительные компоненты (специальные)
- Дополнительные компоненты общие.
- Дополнительные компоненты (общие).
- Дополнительные компоненты (специальные)
- Модуляционные компоненты психологии личности
- Модуляционные компоненты психологии личности
- Кроме содержания, преступное действие имеет внутреннюю структуру, главными компонентами которой являются:
- Цель как компонент преступного действия
- 3. 3. ЭМОЦИОНАЛЬНЫЕ КОМПОНЕНТЫ ТЕРАПЕВТИЧЕСКОГО КЛИМАТА. СОЗДАНИЕ ОБОЮДНОГО ДОВЕРИЯ
- 4.2. Научная эрудиция, ценностные ориентации как компоненты педагогической культуры
- Алистэр Коуберн. Люди как нелинейные и наиболее важные компоненты в создании программного обеспечения, 1999
- Риторические вопросы не содержат необходимого вопросительного компонента и тем самым вызывают у собеседника пассивную реакцию.
- 3. 2. ТЕРАПЕВТИЧЕСКИЙ КЛИМАТ. ФИЗИЧЕСКИЕ КОМПОНЕНТЫ ТЕРАПЕВТИЧЕСКОГО КЛИМАТА
- ПОДБЕРИТЕ КЛЮЧ К СЕБЕ. «ТРЕНИРОВКА С КЛЮЧОМ».