Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 16.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.35 Mб
Скачать

3. Компоненты генерации html-страниц

Для эффективной работы с HTML-страницами в Delphi имеются специаль­ные компоненты: PageProducer, DataSetPageProducer, DataSetTableProducer и QueryTableProducer.

3.1. Компонент PageProducer

Компонент PageProducer генерирует HTML-страницы на основе специального HTML-шаблона, связанного с этим компонентом. HTML-шаблон представляет собой последовательность HTML-команд и специальных тегов-транспарантов, имеющих следующий формат:

<#TagName Paraml=Valuel Param2=Value2 ...>

Содержимое шаблона может формироваться заранее (на этапе проектирования) или динамически — перед генерацией HTML-страницы.

Для доступа к шаблону используются свойства htmldoc типа TStrings или HTMLFile типа TFiieName. Свойства htmldoc и HTMLFile являются взаимоисклю­чающими — при выборе одного из них другое свойство обнуляется.

При вызове метода content производится синтаксический анализ HTML-строк. При обработке подлежащих замене тегов возникает событие опнтмътад типа THTMLTagEvent. в обработчике которого производится замена всех тегов-транспарантов на необходимые текстовые значения. Кроме того, метод content возвращает указатель на буфер, в котором находится сформированный доку­мент. Например,

Memol.Text := PageProducerI.Content;

СВОЙСТВО Dispatcher типа TCustomWebDispatcher компонента PageProducer СЛу-жит для связи с Web-сервером. Оно содержит ссылку на Web-модуль WebModuie или webDispatcher, в функции которых входит обслуживание текущего запроса. Особенности работы с этим свойством рассматриваются ниже.

3.2. Компонент DataSetPageProducer

Компонент DataSetPageProducer аналогичен предыдущему компоненту, но до­полнительно содержит свойство DataSet типа TdataSet, в котором указывается используемый набор данных. При применении этого компонента можно в тегах-транспарантах HTML-шаблона (связанного с компонентом DataSetPageProducer через свойство htmldoc или HTMLFile) в качестве имени тега (TagName) указывать имена полей в записи БД. Тем самым обеспечивается отображение значений полей текущей записи в определяемом свойством DataSet наборе данных. На­пример:

Имя: <#name> <br>

Размер: <#size> <br>

Вес: <#weight> <br>

Место: <#area> <br>

Здесь name, size, weight, area — Имена полей в записи БД.

Следующий фрагмент кода формирует в редакторе Memol HTML-документ по данным первой записи из БД:

Tablel.First ;

Memol.Clear;

Memol.Text := DataSetPageProducerl.Content;

Оператор Tablel.First устанавливает указатель текущей записи на первую запись набора данных, оператор Memol.Clear очищает все строки редактора Memol, после чего он заполняется содержимым сформированного HTML-доку­мента С ПОМОЩЬЮ метода Content объекта DataSetPageProducerl.

3.3. Компонент DataSetTableProducer

Компонент DataSetTableProducer позволяет выводить содержимое БД в таблич­ном виде. Рассмотрим наиболее часто используемые свойства и методы этого компонента (рис. 16.3).

Рис. 16.3. Свойства компонента DataSetTableProducer

Свойство Header типа TStrings использует-ся для задания заголовочной части HTML-документа, а СВОЙСТВО Footer типа TStrings служит для задания строк, заканчивающих HTML-документ.

Свойство DataSet определяет набор данных, на основании которого формирует­ся HTML-документ.

Свойство RowAttributes типа THTMLTabieRowAttributes позволяет отдельно фор­матировать строки таблицы, а свойство TableAttributes Типа THTMLTableAttributes служит для форматирования всей таблицы.

Метод Content компонента DataSetTableProducer, как и одноименный метод перечисленных выше компонентов, предназначен для генерации документа. Од­нако в отличие от предыдущих компонентов событие опнтмьтад в компоненте DataSetTabieProducer не генерируется. Кроме того, при форматировании ячейки таблицы возникает событие OnFormatCell типа THTMLFormatCellEvent, обработчик которого позволяет индивидуально форматировать каждую ячейку. Тип события описан следующим образом:

type THTMLFormatCellEvent =

procedure THTMLForm.DataSetTableProducerlFormatCell(Sender: TObject;

CellRow, CellColumn: Integer; var BgColor: THTMLBgColor;