home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / insidetp / 1990_09 / editobj.pas < prev    next >
Pascal/Delphi Source File  |  1990-09-04  |  3KB  |  90 lines

  1. UNIT EditObj; {  Object_Line_Editor  }
  2.  
  3. INTERFACE
  4.  
  5. USES Crt, KeyBd;
  6.  
  7. TYPE
  8.   LineEdit = OBJECT
  9.     Pos, XPos, YPos : Integer;
  10.     EdLine : String;
  11.     PROCEDURE InitEdit( X, Y: Integer; LineIn: String );
  12.     FUNCTION  GetLine: String;
  13.   END;
  14.  
  15. VAR
  16.    Kbd: KeyBoard;   {<<<========== Global definition of OBJECT}
  17.  
  18. {***************************************************************}
  19.                         IMPLEMENTATION
  20. {***************************************************************}
  21.  
  22. {-------------------------------------------------
  23. - Name   : InitEdit                              -
  24. - Purpose: Set up editor, display line onscreen  -
  25. -------------------------------------------------}
  26.  
  27. PROCEDURE LineEdit.InitEdit;
  28.   BEGIN
  29.     EdLine := LineIn;
  30.     Pos  := Ord( LineIn[0] ) + 1;
  31.     XPos := X;
  32.     YPos := Y;
  33.     GotoXY( X, Y );
  34.     Write( LineIn );
  35.   END;
  36.  
  37. {-------------------------------------------------
  38. - Name   : GetLine                               -
  39. - Purpose: Process keying from user              -
  40. -          Maximum 80 characters accepted        -
  41. -------------------------------------------------}
  42.  
  43. FUNCTION  LineEdit.GetLine;
  44.   VAR
  45.     KeyFlags : Byte;
  46.     Ch: Char;
  47.     FunctKey, Finish: Boolean;
  48.   BEGIN
  49.     Finish := FALSE;
  50.     REPEAT
  51.       IF Kbd.GetKey( KeyFlags, FunctKey, Ch ) THEN BEGIN
  52.         IF FunctKey THEN
  53.           CASE Ch OF
  54. { HOME   }  #$47: Pos := 1;
  55. { END    }  #$4F: Pos := Ord( EdLine[0] ) + 1;
  56. { RIGHT  }  #$4D: BEGIN
  57.                     IF Pos < 80 THEN Inc( Pos );
  58.                     IF Pos > Ord( EdLine[0] ) THEN
  59.                       Insert( ' ', EdLine, Pos );
  60.                     END;
  61. { LEFT   }  #$4B: IF Pos > 1  THEN Dec( Pos );
  62. { DELETE }  #$53: IF Pos <= Ord( EdLine[0] ) THEN
  63.                      Delete( EdLine, Pos, 1 );
  64.             END {CASE Ch}
  65.           ELSE {IF}
  66.             CASE Ch OF
  67. { BS }        #$08: IF Pos > 1 THEN BEGIN
  68.                       Delete( EdLine, Pos-1, 1 );
  69.                       Dec( Pos );
  70.                       END;
  71. { ENTER }     #$0D: Finish := TRUE;
  72.               ELSE BEGIN
  73.                 IF( ( KeyFlags AND $80 ) <> $80 )
  74.                    THEN Insert( Ch, EdLine, Pos )
  75.                    ELSE EdLine[Pos] := Ch;
  76.                 IF Pos > Ord( EdLine[0] ) THEN
  77.                    EdLine[0] := Chr( Pos );
  78.                 IF Pos < 80 THEN Inc( Pos );
  79.                 END     {CASE CH ELSE}
  80.               END;    {CASE Ch}
  81.         GotoXY( XPos, YPos );
  82.         Write( EdLine, ' ' );
  83.         GotoXY( XPos+Pos-1, YPos );
  84.         END;  {IF Kbd.GetKey}
  85.       UNTIL Finish;
  86.       GetLine := EdLine;
  87.     END;
  88.  
  89. END.
  90.