Интернет решения от доктора Боба | страница 24



>if (keys >= 0) then

>begin

>  writeln(g,'');

>  write(g,'');

>  writeln(g,RecNr:3,'')

>end;

>  { print fields }

>writeln(f,'

');

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

>begin

>  writeln(f,'

');

>  write(f,'

');

if (keys >= i) then

>    writeln(g,'

')

>end;

>if (keys >= 0) then writeln(g,'

');

>writeln(f,'

',FieldDefs[i].Name,'');

if FieldTypes[i] = sf_Memo then

>    writeMemo(f,Fields[i])

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

>  writeln(f,'

',Fields[i].AsString,'
');

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

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

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

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

program BDE2HTML;

{$IFDEF WIN32}

{$APPTYPE CONSOLE}

uses

{$ELSE}

uses WinCrt,

{$ENDIF}

>      Convert, HTables;

begin

>   case ParamCount of

>       0: writeln('Usage: BDE2HTML tablename');

>       1: Convert.DatabaseHTML('',ParamStr(1));

>     else HTables.DatabaseHTML('',ParamStr(1))

>   end

end.

2.1.10. Линейка прогресса

Конвертирование маленьких таблиц в небольшое количество страниц не занимает много времени, не более нескольких секунд. Но конвертирование больших таблиц в сотни или тысячи страниц может занять несколько минут. По этой причине я сделал небольшой прогресс индикатор к конвертору. Простая форма с компонентом TGauge. Мы устанавливаем MinValue и Value в 0, а MaxValue в количество записей в таблице, и после генерации страницы мы увеличиваем значение Value на единицу. Небольшие часики в левом верхнем углу показываю количество пройденного времени: