home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* GRAPHEDIT.PAS *)
- (* Routine zur Texteingabe im Grafikmodus *)
- (* und Demo für Turbo-Pascal 4.0/5.0 *)
- (* (c) 1989 by Oliver Rettinghaus & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM GraphEdit;
- USES Crt, Dos, Graph;
-
- PROCEDURE Edit(X, Y, L : INTEGER; Eingabe : STRING);
- VAR Curpos, Textpos : INTEGER;
- Zeichen : STRING;
- BEGIN
- REPEAT
- Eingabe := Eingabe + ' ';
- UNTIL Length(Eingabe) = L;
- SetColor(15);
- OutTextXY(X, Y, Eingabe);
- Curpos := 1;
- REPEAT
- Textpos := X + TextWidth(Copy(Eingabe, 1, Curpos))
- - TextWidth(Copy(Eingabe, Curpos, 1));
- SetColor(15);
- Line(Textpos, Y + TextHeight('A') + 2,
- Textpos + TextWidth(Copy(Eingabe,Curpos, 1)),
- Y + TextHeight('A') + 2);
- Zeichen := ReadKey;
- SetColor(0);
- Line(Textpos, Y + TextHeight('A') + 2,
- Textpos + TextWidth(Copy(Eingabe, Curpos, 1)),
- Y + TextHeight('A') + 2 );
- IF Zeichen = #13 THEN Zeichen := '';
- IF Zeichen = #8 THEN BEGIN
- IF Curpos > 1 THEN BEGIN
- Textpos := X + TextWidth(Copy(Eingabe, 1, Curpos-1))
- - TextWidth(Copy(Eingabe, Curpos - 1, 1));
- SetColor(0);
- OutTextXY(Textpos, Y, Copy(Eingabe, Curpos - 1,
- L - (Curpos - 1)));
- Delete(Eingabe, Curpos - 1, 1);
- Eingabe := Eingabe + ' ';
- Dec(Curpos, 1);
- Textpos := X + TextWidth(Copy(Eingabe, 1, Curpos))
- - TextWidth(Copy(Eingabe, Curpos, 1));
- SetColor(15);
- OutTextXY(Textpos, Y, Copy(Eingabe, Curpos,
- L - Curpos));
- END;
- END;
-
- IF ((Zeichen <> #0) AND (Zeichen <> #8)) THEN BEGIN
- Textpos := X + TextWidth(Copy(Eingabe, 1, Curpos))
- - TextWidth(Copy(Eingabe, Curpos, 1));
- SetColor(0);
- OutTextXY(Textpos, Y, Copy(Eingabe,Curpos,
- L - Curpos));
- Insert(Zeichen, Eingabe, Curpos);
- Eingabe := Copy(Eingabe, 1, L);
- Textpos := X + TextWidth(Copy(Eingabe, 1, Curpos))
- - TextWidth(Copy(Eingabe, Curpos, 1));
- SetColor(15);
- OutTextXY(Textpos, Y, Copy(Eingabe, Curpos,
- L - Curpos));
- Inc(Curpos, 1);
- IF Curpos > L THEN Curpos := L;
- END;
-
- IF Zeichen = #0 THEN BEGIN
- Zeichen := ReadKey;
- IF Zeichen = #75 THEN
- IF Curpos > 1 THEN Dec(Curpos, 1);
- IF Zeichen = #77 THEN
- IF Curpos < L THEN Inc(Curpos, 1);
- IF Zeichen = #71 THEN Curpos := 1;
- IF Zeichen = #79 THEN Curpos := L;
- IF Zeichen = #83 THEN BEGIN
- Textpos := X + TextWidth(Copy(Eingabe, 1, Curpos))
- - TextWidth(Copy(Eingabe, Curpos, 1));
- SetColor(0);
- OutTextXY(Textpos, Y, Copy(Eingabe, Curpos,
- L - Curpos));
- Delete(Eingabe, Curpos, 1);
- Eingabe := Eingabe + ' ';
- Textpos := X + TextWidth(Copy(Eingabe, 1, Curpos))
- - TextWidth(Copy(Eingabe,Curpos, 1));
- SetColor(15);
- OutTextXY(Textpos, Y, Copy(Eingabe, Curpos,
- L - Curpos));
- END;
- END;
- UNTIL Zeichen = '';
- END;
-
- PROCEDURE Demo;
- VAR GraphDriver, GraphMode, Index : INTEGER;
- Teststring : STRING;
- BEGIN
- DetectGraph(GraphDriver, GraphMode);
- InitGraph(GraphDriver, GraphMode, '');
- FOR Index := 0 TO 4 DO BEGIN
- ClearDevice;
- Teststring := 'Zeichenkette';
- SetTextStyle(Index, 0, 0);
- OutTextXY(0, 0, 'Probeeingabe:');
- Edit(1, 150, 35, Teststring);
- END;
- CloseGraph;
- END;
-
- BEGIN
- Demo;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von GRAPHEDI.PAS *)
-