home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 11 / tricks / txmenu.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-08-07  |  3.2 KB  |  124 lines

  1. (* ------------------------------------------------------ *)
  2. (*                    TXMENU.PAS                          *)
  3. (*         Grundlagen zur Menü-Programmierung             *)
  4. (* ------------------------------------------------------ *)
  5. UNIT txMenu;          { txKeys }
  6.  
  7. INTERFACE
  8.  
  9. USES txDos, txCrt, txString;
  10.  
  11. VAR
  12.   Wartezaehler : INTEGER;
  13.  
  14.   FUNCTION  MenueWahl : INTEGER;
  15.  
  16. IMPLEMENTATION
  17.  
  18.   FUNCTION MenueWahl : INTEGER;
  19.   VAR
  20.     xPos, yPos : BYTE;
  21.     Len        : BYTE;
  22.     ok         : BOOLEAN;
  23.     ch         : CHAR;
  24.     FirstRun   : BOOLEAN;
  25.     Dark       : BOOLEAN;
  26.     ch1, ch2   : CHAR;
  27.  
  28.     PROCEDURE PrintText(Text : STRING);
  29.     { Die Wartemaske wird variabel auf dem BS angedruckt }
  30.     BEGIN
  31.       Len := Length(Text);
  32.       IF Len < 18 THEN BEGIN
  33.         Text := txString.Fill(#32, Trunc((18 - Len)/2)) +
  34.                 Text;
  35.         Text := Text +
  36.                 txString.Fill(#32, Round((18 - Len)/2));
  37.         Len  := 18;
  38.       END;
  39.       Len := Len + 4;
  40.       txCrt.Invers;
  41.       GotoXY(XPos, YPos);
  42.         Write(' ╔', txString.Fill('═', Len), '╗ ');
  43.       GotoXY(XPos, YPos+1);
  44.         Write(' ║  ', Text, '  ║ ');
  45.       GotoXY(XPos, YPos+2);
  46.         Write(' ║', #32:Len, '║ ');
  47.       GotoXY(XPos, YPos+3);
  48.         Write(' ║', #32:Len, '║ ');
  49.       GotoXY(XPos, YPos+4);
  50.         Write(' ╚', txString.Fill('═', Len), '╝ ');
  51.       txCrt.Normal;
  52.     END;
  53.  
  54.     FUNCTION TastenDruck : BOOLEAN;
  55.     { Auf Tastendruck warten / währenddessen Zeit anzeigen }
  56.     VAR
  57.       x : INTEGER;
  58.     BEGIN
  59.       TastenDruck := FALSE;
  60.       FOR x := 1 TO WarteZaehler DO BEGIN
  61.         IF NOT FirstRun THEN BEGIN
  62.           txCrt.Invers;
  63.           GotoXY(XPos+4, YPos+3);      Write(TimeString);
  64.           GotoXY(XPos+LEN-8, YPos+3);  Write(DateString);
  65.           txCrt.Normal;
  66.         END ELSE
  67.           Delay(2);
  68.         IF KeyPressed THEN BEGIN
  69.           x := WarteZaehler;
  70.           TastenDruck := TRUE;
  71.         END;
  72.       END;
  73.     END;
  74.  
  75.   BEGIN
  76.     Randomize;
  77.     OK       := FALSE;
  78.     FirstRun := TRUE;
  79.     Dark     := FALSE;
  80.     ch1      := #0;
  81.     ch2      := #0;
  82.     CursorOff;
  83.     REPEAT
  84.       IF NOT FirstRun THEN BEGIN
  85.         ClrScr;
  86.         xPos := Random(36) + 1;
  87.         yPos := Random(19) + 1;
  88.         PrintText('Bitte drücken Sie eine Taste');
  89.       END;
  90.       IF TastenDruck THEN BEGIN
  91.         IF Dark THEN BEGIN
  92.           RestoreScreen;
  93.           Dark     := FALSE;
  94.           FirstRun := TRUE;
  95.           ch1      := ReadKey;
  96.           IF ch1 = #0 THEN ch1 := ReadKey;
  97.         END ELSE BEGIN
  98.           ch1 := ReadKey;
  99.           IF ch1 = #0 THEN ch2 := ReadKey;
  100.           OK := TRUE;
  101.         END;
  102.       END ELSE BEGIN
  103.         FirstRun := FALSE;
  104.         IF NOT Dark THEN BEGIN
  105.           Dark := TRUE;
  106.           SaveScreen;
  107.         END;
  108.       END;
  109.     UNTIL OK;
  110.     IF (ch1 = #0) AND (ch2 <> #0) THEN
  111.       MenueWahl := Ord(ch2) * -1
  112.     ELSE
  113.       MenueWahl := Ord(ch1);
  114.     CursorOn;
  115.   END;
  116.  
  117. BEGIN
  118.   Foreground   := 7;
  119.   Background   := 0;
  120.   Wartezaehler := 2500;
  121. END.
  122. (* ------------------------------------------------------ *)
  123. (*                 Ende von TXMENU.PAS                    *)
  124.