Выбрать главу

  end

  else { middle record }

  begin

    writeln(f,'<IMG SRC="../images/navigat.gif" '+

              'ALIGN=RIGHT USEMAP="#map" BORDER="0">');

    writeln(f,'<MAP NAME="map">');

    writeln(f,'<AREA SHAPE="rect" COORDS="0,0,25,25"   HREF="'+

                FirstPage+'">');

    writeln(f,'<AREA SHAPE="rect" COORDS="26,0,50,25"  HREF="'+

                PageNr(RecNr-1)+'">');

    writeln(f,'<AREA SHAPE="rect" COORDS="51,0,75,25"  HREF="'+

                PageNr(RecNr+1)+'">');

    writeln(f,'<AREA SHAPE="rect" COORDS="76,0,100,25" HREF="'+

                LastPage+'">');

    writeln(f,'<AREA SHAPE="rect" COORDS="101,0,125,25"HREF="'+

                PageNr(RecNr)+'">');

  end;

  writeln(f,'</MAP>');

Все три образа панели навигации хранятся в общем каталоге "../images" и дают мне шанс конвертировать множество таблиц в одно и тоже время для всех точек только с помощью этих трех образов. В действительности, в нашей локальной интрасети мы имеем порядка 23 таблиц преобразованных в 200 HTML страниц, и все они используют эти самые три образа.

2.1.7. Первый результат

После конвертирования базы BIOLIFE.DB, которая содержит много текстовых данных в мемо поле и одно поле, которое мы игнорируем (image field), мы получили следующий результат (обратите внимание на заголовок, который показывает запись 1 из 28):

2.1.8. Расширенный HTML

Конечно, не всегда таблица содержит только текстовые поля. Иногда данные из таблице удобнее представлять в виде таблицы (grid или таблице подобной структуре). Для этого я должен ввести вас в расширенные HTML свойства: фреймы и таблицы.

2.1.8.1. Фреймы

Фреймы это в действительности расширение HTML+, которое не поддерживается некоторыми web браузерами. Фреймы это свойство разделения вашей web страницы на две или более страниц. Основное свойство фреймом то, что каждый фрейм может иметь свое собственное имя и может переходить в другое местонахождение. Так, вы можете иметь индекс или таблицу оглавления с левой стороны, и например действительное содержимое с правой стороны. Для таблицы со многими записями вы можете иметь список ключей слева (главный индекс) и одну индивидуальную запись справа. Ключевое значение слева конечно ссылка на актуальную страницу с данными в правом фрейме. Как только мы щелкнем по ссылке в главном индексе (левый фрейм) в правом фрейме появятся данные относящиеся к этому ключу. Дополнительно к двум фреймам мы должны иметь главную специальную страницу, в которой определяем количество и относительные позиции (и размер) этих фреймов. Я использую для левого фрейма имя "Menu" и размер 32% от текущей ширины экрана, для правого фрейма имя "Main" и остаток ширины экрана. В HTML коде это выглядит следующим образом:

<HTML>

<FRAMESET COLS="32%,*">

<FRAME SRC="pag00000.htm" NAME="Menu">

<FRAME SRC="pag00001.htm" NAME="Main">

</FRAMESET>

</HTML>

Конечно, вы можете иметь более значимые имена для фреймов (например имена таблиц), но я оставлю это на совести читателя.

2.1.8.2. Таблицы

Использование фреймов для показа содержимого индекса и одной записи это одна из возможностей. Но имеется возможность отображать это и как таблицу. HTML 3.0 поддерживает ТАБЛИЦЫ, которое является одним из наиболее используемых свойств наших дней. Таблицы с рамками и без могут использоваться для всего, что вы не можете сделать нормальным путем (например, нет метода иметь множественные колонки в HTML странице, без использования таблиц). В нашем случае это может быть двух колоночная таблица с рамкой. В левой колонке мы просто отображаем название каждого поля, а правой колонке – значение этого поля. Подобно предыдущему текстовому решению, единственная вещь которую нужно изменить это коды заголовков в коды таблицы. <TR> начинает новую строку таблицы, заканчивая ее тегом </TR>. Тег <TD> открывает новое поле , закачивающее тегом </TD>. Для окончательно преобразования, мы должны написать специальную индексную HTML страницу как файл (файл g в нашем случае). Преобразованный листинг выглядит следующим образом:

if (keys >= 0) then

begin

  writeln(g,'<TR>');

  write(g,'<TD><A HREF="../',FileName,'/',PageNr(RecNr), '"TARGET="Main">');

  writeln(g,RecNr:3,'</A></TD>')

end;

  { print fields }

writeln(f,'<TABLE BORDER>');

for i:=0 to Pred(FieldCount) do if FieldTypes[i] > sf_UnKnown then

begin

  writeln(f,'<TR>');

  write(f,'<TD><B>',FieldDefs[i].Name,'</B></TD><TD>');

  if FieldTypes[i] = sf_Memo then

    writeMemo(f,Fields[i])

  else writeln(f,Fields[i].AsString);

  writeln(f,'</TD></TR>');

  if (keys >= i) then

    writeln(g,'<TD>',Fields[i].AsString,'</TD>')

end;

if (keys >= 0) then writeln(g,'</TR>');

writeln(f,'</TABLE>');

2.1.9. Последний вариант конвертора

Имея объединенные фреймы и таблицы в нашем конверторе, мы можем переходить от простой BIOLIFE.DB таблицы к более реалистичной таблицы продуктов, например PARTS.DB. Данная таблица имеет больше цифровых и меньше "memo" (или тестовых) данных, и поэтому выглядит лучше когда данные отображаются в табличном виде с простыми заголовками.

"Живые" HTML кнопки работают также как и ранее, и мы можем выбирать любую запись из фрейма с индексом. Заметим, что содержимое правого фрейма также содержит текущую позицию (и общее количество записей) в таблице, так как это тоже генерируется на лету.

В данный момент мы уже имеем два пути для преобразования таблицы в HTML страницу, или с помощью простого текстового конвертора или с помощью более сложного конвертора фрейм /таблица, Я написал маленькую программу, которая использует оба метода. Это простое консольное приложение, которое нуждается только в имени таблицы как аргумент командной строки (таблица должна находиться в текущем каталоге). По умолчанию используется нормальный метод преобразования, тем не менее, если ввести более одного параметра, то будет использоваться метод преобразования во фреймы с таблицами (сам дополнительный параметр игнорируется).

 program BDE2HTML;

 {$IFDEF WIN32}

 {$APPTYPE CONSOLE}