
- •1. Компоненты, используемые при разработке Web-приложений
- •2. Статическая публикация
- •3. Компоненты генерации html-страниц
- •3.1. Компонент PageProducer
- •3.2. Компонент DataSetPageProducer
- •3.3. Компонент DataSetTableProducer
- •Var Align: thtmlAlign; var vAlign: thtmlvAlign; var CustomAttrs,
- •3.4. Компонент QueryTableProducer
- •3.5. Пример генератора html-страниц
- •Var ReplaceText; String); procedure PageProducerlHtmlTag(Sender: tObject; Tag: tTag;
- •Var ReplaceText: String); procedure DataSetTableProducerlFormatCell(Sender: tObject; CellRow,
- •Var Align: thtmlAlign; var vAlign: thtmlvAlign; var CustomAttrs, f
- •Var Align: thtmlAlign; var vAlign: thtmlvAlign; var CustomAttrs,
- •4. Динамическая публикация
- •4.1. Создание модуля cgi
- •II:integer;
- •Var I: integer;
- •Var I: integer;
- •Var I: integer;
- •4.2. Создание isapi-модуля расширения сервера
- •4.3. Обработка ввода пользователя в модуле isapi
- •5. Публикация графики
- •Interface
- •Var Align: thtmlAlign; var vAlign: thtmlvAlign; var CustomAttrs,
- •6. Использование интерфейса ado
5. Публикация графики
Рассмотрим применение стандартных средств Delphi для динамической публикации графической информации из БД на следующем примере.
Разрабатываемый модуль реализуем в виде ISAPI-библиотеки, использующей таблицу из файла animals.dbf. Для запуска данного приложения нужно создать ISAPI-модуль, как описано выше, для которого потребуются 2 объекта WebActionitem. Свойствам Pathinfo этих объектов действия устанавливаются значения text и image, кроме того, подготавливаются обработчики для события OnAction. В модуле необходимо также разместить объекты DataSetTableProducer и Table.
В примере предварительно созданы три HTML-файла, текст которых приводится ниже. Управляющий файл proton.html содержит следующий код:
<HTML>
<HEAD>
<TITLE> Демонстрация работы с графикой </TITLE>
</HEAD>
<FRAMESET COLS="70%,30%">
<FRAME SRC="main.html" .name=main>
<FRAME SRC="image.html" name=image>
</FRAMESET>
</HTML>
Совместное отображение графики и текста в HTML-документе удобно реализо-■вать с помощью фреймов. Тег <feameset cols="7Q%,30%"> задает набор фреймов. Параметр cols используется для разбивки рабочей области браузера на две колонки шириной 70 и 30%, соответственно.
Тег <frame SRC="main.html" name=main> определяет параметры фрейма: параметр src задает отображаемый в фрейме файл, а параметр name служит для доступа к созданным в этом фрейме объектам.
Файл первого фрейма (с именем main.html) содержит следующий код:
<HTML>
<BODY>
<script>
location="http://igin/scripts/isag.dll/tezt"
</script>
</BODY>
</HTML>
В теге <script> для передачи упра&тения модулю расширения isag.dll используется СВОЙСТВО location объекта windows.
Файл второго фрейма (с именем image.html) содержит код:
<HTML>
<HEAD>
<Т1ТЬЕ>Демонстрация работы с графикой</Т1ТЪЕ>
</HEAD>
<body>
<script>
location="http://igin/scripts/isag.dll/image?O"
</script>
</BODY>
</HTML>
Исходный текст программы isag (табличное отображение отчета из БД) содержит следующий код:
unit isag;
Interface
uses
Windows, Messages, SysUtils, Classes, HTTPApp, DBWeb, Db, DBTables; type
TWebModulel = class(TWebModule) Table1: TTable;
DataSetTableProducerl: TDataSetTableProducer;
procedure DataSetTableProducerlFormatCell(Sender: TObject; CellRow, CellColumn: Integer; var BgColor: THTMLBgColor; var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustornAttrs, CellData: String); procedure WebModuleAfterDispatch(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
procedure WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure WebModulelWebActionltemlAction(Sender: TObject; Request:
TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure WebModulelWebActionItem2Action(Sender: TObject; Request:
TWebRequest; Response: TWebResponse; var Handled: Boolean); private
ScriptName: string; end;
var
WebModulel: TWebModulel;
implementation f$R *.DEM)
uses
Graphics, Jpeg, ExtCtrls,dbctrls;
// Обработчик события OnFormatCell
// Параметр Target указывает на соседний фрейм
procedure TWebModulel.DataSetTableProducerlFormatCell(Sender: TObject;
CellRow, CellColumn: Integer; var BgColor: THTMLBgColor;