home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* TXMENU.PAS *)
- (* Grundlagen zur Menü-Programmierung *)
- (* ------------------------------------------------------ *)
- UNIT txMenu; { txKeys }
-
- INTERFACE
-
- USES txDos, txCrt, txString;
-
- VAR
- Wartezaehler : INTEGER;
-
- FUNCTION MenueWahl : INTEGER;
-
- IMPLEMENTATION
-
- FUNCTION MenueWahl : INTEGER;
- VAR
- xPos, yPos : BYTE;
- Len : BYTE;
- ok : BOOLEAN;
- ch : CHAR;
- FirstRun : BOOLEAN;
- Dark : BOOLEAN;
- ch1, ch2 : CHAR;
-
- PROCEDURE PrintText(Text : STRING);
- { Die Wartemaske wird variabel auf dem BS angedruckt }
- BEGIN
- Len := Length(Text);
- IF Len < 18 THEN BEGIN
- Text := txString.Fill(#32, Trunc((18 - Len)/2)) +
- Text;
- Text := Text +
- txString.Fill(#32, Round((18 - Len)/2));
- Len := 18;
- END;
- Len := Len + 4;
- txCrt.Invers;
- GotoXY(XPos, YPos);
- Write(' ╔', txString.Fill('═', Len), '╗ ');
- GotoXY(XPos, YPos+1);
- Write(' ║ ', Text, ' ║ ');
- GotoXY(XPos, YPos+2);
- Write(' ║', #32:Len, '║ ');
- GotoXY(XPos, YPos+3);
- Write(' ║', #32:Len, '║ ');
- GotoXY(XPos, YPos+4);
- Write(' ╚', txString.Fill('═', Len), '╝ ');
- txCrt.Normal;
- END;
-
- FUNCTION TastenDruck : BOOLEAN;
- { Auf Tastendruck warten / währenddessen Zeit anzeigen }
- VAR
- x : INTEGER;
- BEGIN
- TastenDruck := FALSE;
- FOR x := 1 TO WarteZaehler DO BEGIN
- IF NOT FirstRun THEN BEGIN
- txCrt.Invers;
- GotoXY(XPos+4, YPos+3); Write(TimeString);
- GotoXY(XPos+LEN-8, YPos+3); Write(DateString);
- txCrt.Normal;
- END ELSE
- Delay(2);
- IF KeyPressed THEN BEGIN
- x := WarteZaehler;
- TastenDruck := TRUE;
- END;
- END;
- END;
-
- BEGIN
- Randomize;
- OK := FALSE;
- FirstRun := TRUE;
- Dark := FALSE;
- ch1 := #0;
- ch2 := #0;
- CursorOff;
- REPEAT
- IF NOT FirstRun THEN BEGIN
- ClrScr;
- xPos := Random(36) + 1;
- yPos := Random(19) + 1;
- PrintText('Bitte drücken Sie eine Taste');
- END;
- IF TastenDruck THEN BEGIN
- IF Dark THEN BEGIN
- RestoreScreen;
- Dark := FALSE;
- FirstRun := TRUE;
- ch1 := ReadKey;
- IF ch1 = #0 THEN ch1 := ReadKey;
- END ELSE BEGIN
- ch1 := ReadKey;
- IF ch1 = #0 THEN ch2 := ReadKey;
- OK := TRUE;
- END;
- END ELSE BEGIN
- FirstRun := FALSE;
- IF NOT Dark THEN BEGIN
- Dark := TRUE;
- SaveScreen;
- END;
- END;
- UNTIL OK;
- IF (ch1 = #0) AND (ch2 <> #0) THEN
- MenueWahl := Ord(ch2) * -1
- ELSE
- MenueWahl := Ord(ch1);
- CursorOn;
- END;
-
- BEGIN
- Foreground := 7;
- Background := 0;
- Wartezaehler := 2500;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von TXMENU.PAS *)
-