Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΡ‚ Π΄ΠΎΠΊΡ‚ΠΎΡ€Π° Π‘ΠΎΠ±Π°Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 8

Автор Bob Swart

          (FieldDefs[i].FieldClass = TVarBytesField) then

         FieldTypes[i] := sf_UnKnown { ignore }

   end

 finally

   Free

 end;

2.1.4. Записи

ПослС Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠΎΠ»Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ всСй Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ значСния ΠΏΠΎΠ»Π΅ΠΉ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΡ‹ сгСнСрируСм HTML-страницу. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»Π΅ΠΉ ΠΊΠ°ΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Π΅Π³ <H2> для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ ΠΈ Ρ‚Π΅Π³ <H3> для Π½Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ. Код просматриваСт всю Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ поля Π² тСкст ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΡ… Π² HTML-Ρ„Π°ΠΉΠ»:

while not Eof do

begin

  Inc(RecNr);

  System.Assign(f,FileName+'/'+PageNr(RecNr));

  System.Rewrite(f);

  writeln(f,'<HTML>');

  writeln(f,'<HEADER>');

  writeln(f,'<TITLE>');

  writeln(f,Format('%s %d/%d',[ATable,RecNr,RecordCount]));

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

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

  writeln(f,'<BODY>');

  { print fields }

  for i:=0 to Pred(FieldCount) do

    if FieldTypes[i] > sf_UnKnown then

    begin

      if (keys >= i) then writeln(f,'<H2>')

                     else writeln(f,'<H3>');

      writeln(f,FieldDefs[i].Name,':');

      if (keys >= i) then writeln(f,'</B><BR>') { </H2> }

                     else writeln(f,'</B><BR>'); { </H3> }

      if FieldTypes[i] = sf_Memo then

        writeMemo(f,Fields[i])

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

      if (keys = i) then writeln(f,'<HR>');

    end;

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

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

    System.Close(f);

    Next

  end;

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ здСсь ΠΎΠ΄Π½ΠΎ Π½Π΅Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ свойство HTML: для окончания Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ </B>, Π½ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ <BR> для Ρ€Π°Π·Ρ€Ρ‹Π²Π° строки. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΈ тСкст, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΏΡ€Π°Π²Π΅Π΅ ΠΈ Π½ΠΈΠΆΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΡƒΡ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ это Π½Π΅Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ свойство ΠΈ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ раскоммСнтировав </H2> ΠΈ </H3> Ссли Π²Ρ‹ Π½Π΅ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ ΠΆΠΈΡ‚ΡŒ Π½Π° ΡƒΠ³Π»Π΅ <ΡŽΠΌΠΎΡ€>. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ листинг ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· ΠΌΠ΅ΠΌΠΎ поля Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² тСкстовый Ρ„Π°ΠΉΠ». И Π½Π°ΠΊΠΎΠ½Π΅Ρ† послС этого ΠΌΡ‹ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, помня Ρ‡Ρ‚ΠΎ HTML ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ мноТСствСнныС ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ строки ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹.

 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 <P> break }

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

       { 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="next">

<AREA SHAPE="rect" COORDS="76,0,100,25" HREF="last">

<AREA SHAPE="rect" COORDS="101,0,125,25"HREF="this">

</MAP>

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ свой Π½Π°Π²ΠΈΠ³Π°Ρ‚ΠΎΡ€ ΠΏΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Для этого Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ: ΠΎΠ΄Π½Π° для ΠΏΠ΅Ρ€Π²ΠΎΠΉ записи (клавиши пСрвая ΠΈ прСдыдущая Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹), ΠΎΠ΄Π½Π° для послСднСй записи (клавиши ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΈ послСдняя запись Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹) ΠΈ ΠΎΠ΄Π½Π° для записСй Π² сСрСдинС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (всС клавиши Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹). Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ситуации я Π½Π°Π·Π½Π°Ρ‡Π°ΡŽ ссылку для ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· клавиш Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ страницу. Π­Ρ‚ΠΎ обСспСчиваСт ΡΠΈΠ»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ связь ΠΌΠ΅ΠΆΠ΄Ρƒ наТатиями Π½Π° клавиши. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, клавиши Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π΄Π°Π²Π»Π΅Π½Ρ‹, Π½ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ ΠΎΡ‡Π΅Π½ΡŒ быстрый ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Java ΠΈΠ»ΠΈ CGI-прилоТСниями (всС Ρ‡Ρ‚ΠΎ происходит это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Ρ‹ΠΆΠΎΠΊ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ страницу).

NAVIGATL.GIF:


NAVIGAT.GIF:


NAVIGATR.GIF:

Π’ΠΎΡ‚ ΠΊΠΎΠ΄ Π½Π° Π”Π΅Π»ΡŒΡ„ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· ΠΈ ΠΊΠ°Ρ€Ρ‚Ρƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи:

  if (RecNr = 1) then { first record }

  begin

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

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

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

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

                PageNr(2)+'">');

    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

  else

  if (RecNr = RecordCount) then { last record }

  begin

    writeln(f,'<IMG SRC="../images/navigatr.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="101,0,125,25"HREF="'+

                PageNr(RecNr)+'">');

  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="'+