Чтение онлайн

на главную - закладки

Жанры

Интернет решения от доктора Боба

Swart Bob

Шрифт:

 procedure WriteStream(var f: Text; var Stream: TMemoryStream);

 const

LF = #10;

BufSize = 8192; { bigger memos are chopped off!! }

 var

Buffer: Array[0..Pred(BufSize)] of Char;

i: Integer;

 begin

Stream.Seek(0,0);

if Stream.Size > 0 then

begin

Stream.Read(Buffer,Stream.Size);

for i:=0 to Pred(Pred(Stream.Size)) do

begin

{ empty line converted to break }

if (Buffer[i] = LF) and (Buffer[i+1] = LF) then writeln(f,'');

{ strip multiple spaces (are ignored anyway) }

if not ((Buffer[i] = ' ') and (Buffer[i+1] = ' ')) then write(f,Buffer[i]);

{ start new sentence on a new line (but only in HTML doc itself }

if (Buffer[i] = '.') and (Buffer[i+1] = ' ') then writeln(f)

end;

writeln(f,Buffer[Pred(Stream.Size)])

end

else writeln(f,' ') { empty memo }

 end {WriteStream};

 procedure WriteMemo(var f: Text; Field: TField);

 var Stream: TMemoryStream;

 begin

Stream := TMemoryStream.Create;

(Field AS TMemoField).SaveToStream(Stream);

WriteStream(f,Stream);

Stream.Free

 end {WriteMemo};

2.1.5.

Страницы

Теперь у нас есть метод преобразования записей в HTML страницы, нам также нужен путь уникальной идентификации каждой записи. Допустим, что база данных не не содержит более 100,000 записей (Если таблица содержит свыше 100,000 записей, то конвертирование их в HTML страницы наверно не очень хорошая идея), Я думаю что подойдет схема где каждая запись помещается в файл с именем "pag#####.htm", где ##### номер записи в базе данных. Для уменьшения конфликта имен, каждая таблица должна размещаться в своем собственном каталоге (например, BIOLIFE.HTM каталог для BIOLIFE.DB таблиц, так что мы будем иметь BIOLIFE.HTM/PAG00001.HTM для первой записи из BIOLIFE.DB таблицы).

 const

FirstPage = 'pag00001.htm';

LastPage: TPageName = 'pag%.5d.htm'; { format }

function PageNr(Nr: Word): TPageName;

begin

Result := Format('pag%.5d.htm',[Nr])

end {PageNr};

Кроме

первой страницы PAG00001.HTM, нам также необходимо знать имя последней страницы, и функцию, которая нам даст номер текущей страницы для номера записи.

2.1.6. HTML "Живые" клавиши

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

<IMG SRC="image.gif">

где image.gif это файл типа .GIF или .JPEG. Мы можем вставить опцию USEMAP в тег, для указания имени карты образа, например:

<IMG SRC="image.gif" USEMAP="#map">

Внутри страницы мы можем ссылаться на "#map", а в действительности на картинку. Image map ничего более чем список координат и ссылок. Переход на ссылку произойдет, мы щелкнем мышкой в указанных координатах. HTML-синтаксис карты образа, the image map выглядит как навигационная панель размером 25x125 пикселей:

<MAP NAME="map">

<AREA SHAPE="rect" COORDS="51,0,75,25" href="#">

<AREA SHAPE="rect" COORDS="76,0,100,25" href="#">

<AREA SHAPE="rect" COORDS="101,0,125,25"href="#">

</MAP>

Таким образом, мы можем свой навигатор по базе данных. Для этого нам необходимо иметь три картинки: одна для первой записи (клавиши первая и предыдущая запрещены), одна для последней записи (клавиши следующая и последняя запись запрещены) и одна для записей в середине таблицы (все клавиши разрешены). В каждой ситуации я назначаю ссылку для одной из клавиш на другую страницу. Это обеспечивает сильную обратную связь между нажатиями на клавиши. Конечно, клавиши не могут быть надавлены, но мы имеем очень быстрый ответ по сравнению с Java или CGI-приложениями (все что происходит это только прыжок на другую страницу).

NAVIGATL.GIF:

NAVIGAT.GIF:

NAVIGATR.GIF:

Вот код на Дельфи, который генерирует корректный образ и карту для каждой записи:

if (RecNr = 1) then { first record }

begin

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

Поделиться:
Популярные книги

Темный Лекарь

Токсик Саша
1. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь

6 Секретов мисс Недотроги

Суббота Светлана
2. Мисс Недотрога
Любовные романы:
любовно-фантастические романы
эро литература
7.34
рейтинг книги
6 Секретов мисс Недотроги

Planescape: Torment: "Пытка Вечностью"

Хесс Рисс
Фантастика:
фэнтези
5.00
рейтинг книги
Planescape: Torment: Пытка Вечностью

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

От океана до степи

Стариков Антон
3. Игра в жизнь
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
От океана до степи

Возвышение Меркурия. Книга 15

Кронос Александр
15. Меркурий
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 15

Предложение джентльмена

Куин Джулия
3. Бриджертоны
Любовные романы:
исторические любовные романы
8.90
рейтинг книги
Предложение джентльмена

Хуррит

Рави Ивар
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Хуррит

Конунг Туманного острова

Чайка Дмитрий
12. Третий Рим
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Конунг Туманного острова

Черный Маг Императора 12

Герда Александр
12. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 12

Сделай это со мной снова

Рам Янка
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сделай это со мной снова

На границе империй. Том 9. Часть 5

INDIGO
18. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 5

Выбор варианта

Ром Полина
Фантастика:
фэнтези
5.50
рейтинг книги
Выбор варианта

Свет во мраке

Михайлов Дем Алексеевич
8. Изгой
Фантастика:
фэнтези
7.30
рейтинг книги
Свет во мраке