[Back to FILES SWAG index] [Back to Main SWAG index] [Original]

    {
     ms> Does anybody have a database scroling rutine. When I say a database
     ms> scroling rutine I mean that you have som records which is longer than the
     ms> screen and then you need to scroll up or down to view the rest of it.

     ms> In the rutine you should could scroll up and down.

      Here is a copy of a sort of generic viewing routine incorporating most of
    the VT100 keyboard commands, including home/end and pgup/pgdn.
    }

    Procedure PrintScr;

    Type
       GenFile : String[80];

    Var
       QuitBrowse : Boolean;
       BalString  : String[80];
       M, Lin, Top : Integer;
       Com, Key : Char;
       DtaLen   : Word;
       ViewFile : File of GenFile;

    Begin
       ClrScr;
       QuitBrowse := False;
       Top := 0;

       Assign(ViewFile,'yourfile.txt');
       Reset(ViewFile);
       DtaLen := Filesize(ViewFile) -1;

       While Not QuitBrowse Do
         Begin
           For Lin := Top to (Top+24) Do
             Begin
               Seek(ViewFile,Lin);
               Read(ViewFile,LineData);
               RetrLine(DtaHandle,Lin);
               BalString[0] := #80;
               For M := 1 to 80 Do
                 BalString[M] := LineData[M];
               QWrite((Lin-Top)+1,1,CfgData.IFo+CfgData.IBa,BalString);
             End;
           Com := ReadKey;
           Case Com Of
             #0:
                Begin
                  Key := ReadKey;
                  Case Key Of
                    #73 : { PgUp }
                         Begin
                           Top := Top -24;
                           If Top < 0 Then Top := 0;
                         End;
                    #81 : { PgDn }
                         Begin
                           Top := Top +24;
                           If Top > DtaLen Then
                              Top := DtaLen;
                         End;
                    #72 : { Up Arrow }
                         Begin
                           Dec(Top);
                           If Top < 0 Then Top := 0;
                         End;
                    #80 : { Dn Arrow }
                         Begin
                           Inc(Top);
                           If Top > DtaLen Then
                              Top := DtaLen;
                         End;
                    #119,#132 : { ^Home / ^PgUp }
                          Top := 0;
                    #117,#118 : { ^End / ^PgDn }
                          Begin
                            Top := DtaLen -5;
                            If Top < 0 Then Top := 0;
                          End;
                  End; { Case Key }
                End; { Case #0 }

             #27: { ESC }
                 QuitBrowse := True;

           End; { Case Com }
         End;

    End; { Procedure PrintScr }

      You will, of course, need to modify the parameters and such to fit your own
    needs. As a rule, I use this as a pattern for viewing routines, adjusting as
    required for the type of material being displayed.

      Good luck,

    RB

[Back to FILES SWAG index] [Back to Main SWAG index] [Original]