[Back to TEXTWNDW SWAG index] [Back to Main SWAG index] [Original]
{
I've enclosed 2 SCROLL functions....
Hope it'll help.
These source are FREEWARE. So then can only be used in a Freeware or Shareware
. ( It'll be great if you give me a copy of your freeware).
These sources can be added to SWAGS....
<==== Cut =====> }
Uses CRT,DOS ...
Procedure Cadre (X1,X2,Y1,Y2,FG,BG:Integer);
{ Trace un Cadre entre les Coordonn‚es X1,Y1 et X2,Y2
  avec FG= Couleur du Cadre , BG= Couleur du Fond }
Var
   corner1,
   corner2,
   corner3,
   corner4,
   horizline,
   vertline : String;
   a,b: integer;
   Begin
               corner1:='Ú';
               corner2:='¿';
               corner3:='À';
               corner4:='Ù';
               horizline:='Ä';
               vertline:='³';
        TextColor (FG);                  { Fixe les couleurs }
        TextBackground (BG);
        GotoXY ( X1,Y1 );                { Positionne le curseur }
      Write (Corner1);
      For a:= (X1+1) to (X2-1) do
       Begin                             { Ecrit le Cadre }
        Write (Horizline);
       end;
      Write (Corner2);
       For a:= (Y1+1) to (Y2-1) do
        Begin
         GotoXY(X1,a);
         Write (VertLine);
         For b:= (X1+1) to (X2-1) do
          Begin
           Write (' ');
          end;
         Write(Vertline);
        end;
      GotoXY(X1,Y2);
      Write (Corner3);
      For a:= (X1+1) to (X2-1) do
       Begin
        Write (Horizline);
       end;
       Write (Corner4);
end;
Procedure Explode_Cadre (X1,X2,Y1,Y2,FG,BG,Delai: Integer);
{ R‚daction: Explode_Cadre (X1,X2,Y1,Y2,FG,BG,Delai) }
  Var
         gauche,droite,MilieuX,
            a,b: Integer;
  Begin
   MilieuX:= (X1+X2) div 2;         { Calcul des paramŠtres de position }
   gauche:= (X2-X1) div 2;
   droite:= gauche;
   if ((X2-X1) Mod 2) > 0 then Droite:= Droite +1;
                                    { D‚but du Trac‚ }
   For a:= 1 to Gauche do
    Begin
     Cadre ((MilieuX-a),(MilieuX+a),Y1,Y2,FG,BG);
     delay (Delai);
    end;
   if Gauche <> Droite then Cadre (X1,X2,Y1,Y2,FG,BG);
   End;
Procedure Scroll (x1,x2,Y:Byte;S:String;fg,bg,vitesse:integer);
{ Avec
      x1 et x2 position x de la fenŠtre de scrolling
      Y        position Y de la fenŠtre de scrolling
      S        Chaine de caractŠres … faire d‚filer
      fg       ForeGround (Couleur du Texte)
      bg       BackGround (Couleur du Fond)
      vitesse  Vitesse du scrolling
 Tout appui sur une touche arrete le scrolling et vide le buffer clavier
}
 Var
    a,b,LonFenetre,LonStr: Byte;
    ch,dh: String;
 Begin
  Ch:='';
  LonFenetre:=(x2-x1);
  LonStr:=Length(S);
  For b:=1 to (LonFenetre) do ch:=concat (ch,' ');  { Rajoute N epaces avant
et apres la chaine S}  dh:=ch;
  ch:= concat(ch,S,ch);
  b:= 1;
  Repeat
   Begin
    b:=b+1;
    Ecris(x1,Y,Copy(ch,b,LonFenetre),fg,bg);
    delay(Vitesse);
    end;
  Until (Keypressed) or (b>(LonFenetre+LonStr+1));
  Vide_Buffer_Clavier;
  Ecris(x1,Y,dh,fg,bg);
 end;
Procedure Scroll_Inverse (x1,x2,Y:Byte;S:String;fg,bg,vitesse:integer);
 Var
    a,b,LonFenetre,LonStr: Byte;
    ch,dh: String;
 Begin
  Ch:='';
  LonFenetre:=(x2-x1);
  LonStr:=Length(S);
  For b:=1 to (LonFenetre) do ch:=concat (ch,' ');  { Rajoute N epaces avant
et apres la chaine S}  dh:=ch;
  ch:= concat(ch,S,ch);
  b:= 1;
  Repeat
   Begin
    b:=b+1;
    Ecris(x1,Y,Copy(ch,(LonFenetre+LonStr)-b,LonFenetre),fg,bg);
    delay(Vitesse);
   end;
  Until (Keypressed) or (b>(LonFenetre+LonStr+1));
  Vide_Buffer_Clavier;
  Ecris(x1,Y,dh,fg,bg);
 end;
Procedure Scroll_No_Exit (x1,x2,Y:Byte;S:String;fg,bg,vitesse:integer);
{ Proc‚dure identique … Scroll mais sans possibilit‚ d'Echap.}
 Var
    a,b,LonFenetre,LonStr: Byte;
    ch: String;
 Begin
  Ch:='';
  LonFenetre:=(x2-x1);
  LonStr:=Length(S);
  For b:=1 to (LonFenetre) do ch:=concat (ch,' ');  { Rajoute N epaces avant
et apres la chaine S}  ch:= concat(ch,S,ch);
  b:= 1;
  Repeat
   Begin
    b:=b+1;
    Ecris(x1,Y,Copy(ch,b,LonFenetre),fg,bg);
    delay(Vitesse);
   end;
  Until (b>(LonFenetre+LonStr+1));
  Vide_Buffer_Clavier;
 end;
Procedure Scroll_Inverse_No_Exit
(x1,x2,Y:Byte;S:String;fg,bg,vitesse:integer);
{ Proc‚dure identique … Scroll mais sans possibilit‚ d'Echap.}
 Var
    a,b,LonFenetre,LonStr: Byte;
    ch: String;
 Begin
  Ch:='';
  LonFenetre:=(x2-x1);
  LonStr:=Length(S);
  For b:=1 to (LonFenetre) do ch:=concat (ch,' ');  { Rajoute N epaces avant
et apres la chaine S}
  ch:= concat(ch,S,ch);
  b:= 1;
  Repeat
   Begin
    b:=b+1;
    Ecris(x1,Y,Copy(ch,(LonFenetre+LonStr)-b,LonFenetre),fg,bg);
    delay(Vitesse);
   end;
  Until (b>(LonFenetre+LonStr+1));
  Vide_Buffer_Clavier;
 end;
[Back to TEXTWNDW SWAG index] [Back to Main SWAG index] [Original]