home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 02 / heimwerk / popup.inc < prev   
Encoding:
Text File  |  1988-11-11  |  3.1 KB  |  101 lines

  1. REM * ---------------------------------------------------- *
  2. REM *                    POPUP.INC                         *
  3. REM *     PopUp-Menue-Routine für Turbo/Quick Basic        *
  4. REM *                (c) 1988  TOOLBOX                     *
  5. REM * ---------------------------------------------------- *
  6.  
  7. DEF FNPrintLine$(S$, Max%)   'wird benötigt von SUB PopUp
  8. LOCAL j%, zeile$                    'STATIC für Quick Basic
  9. zeile$ = S$
  10. FOR j% = 1 TO Max% - LEN(S$)
  11.   zeile$ = zeile$ + " "
  12. NEXT j%
  13. FNPrintLine$ = zeile$
  14. END DEF
  15.  
  16. SUB PopUpMenue(X%,Y%,Texte$(1),Items%,Mono%,Res%,Res$)
  17.  
  18. LOCAL Max%, i%, j%, k%
  19. LOCAL Zeile%, AlteZeile%, Wahl$, Buffer%()
  20. REM Für Quick Basic sind hier keine LOCAL-Deklarationen
  21. REM nötig!
  22.  
  23. DIM Buffer%(4000)
  24.  
  25. Max% = 0
  26. FOR i% = 1 TO Items%         '** Max. Textlänge ermitteln **
  27.   IF (LEN(Texte$(i%)) > Max%) THEN
  28.     Max% = LEN(Texte$(i%))
  29.   END IF
  30. NEXT i%
  31.  
  32.                   '** Paßt das Menue auf den Bildschirm ? **
  33. IF ((X% + Max% + 1)<=80) AND ((Y% + Items% + 1)<=25) THEN
  34.                        '** Segment für Bildschirmspeicher **
  35.   IF Mono% THEN DEF SEG = &HB000 ELSE DEF SEG = &HB800
  36.                                    '** Hintergrund retten **
  37.   FOR i% = 0 TO 3999
  38.     Buffer%(i%) = PEEK(i%)
  39.   NEXT i%
  40.                                          '** Rahmen malen **
  41.   LOCATE Y%, X%
  42.   PRINT CHR$(201);
  43.   FOR i% = 1 TO Max%: PRINT CHR$(205); : NEXT i%
  44.   PRINT CHR$(187);
  45.   FOR i% = 1 TO Items%
  46.     LOCATE (Y% + i%), X%
  47.     PRINT CHR$(186);
  48.     PRINT FNPrintLine$(Texte$(i%), Max%);
  49.     PRINT CHR$(186);
  50.   NEXT i%
  51.   LOCATE (Y% + Items% + 1), X%
  52.   PRINT CHR$(200);
  53.   FOR i% = 1 TO Max%
  54.     PRINT CHR$(205);
  55.   NEXT i%
  56.   PRINT CHR$(188);
  57.                                       '** Benutzerauswahl **
  58.   Zeile% = 1: AlteZeile% = Items%: Wahl$ = CHR$(0)
  59.                        '** Warte bis Benutzer gewählt hat **
  60.   WHILE Wahl$ <> CHR$(13)
  61.                               '** Hat sich was geändert ? **
  62.     IF Zeile% <> AlteZeile% THEN
  63.       LOCATE Y% + AlteZeile%, X% + 1
  64.       COLOR 15, 1
  65.       PRINT FNPrintLine$(Texte$(ALteZeile%), Max%);
  66.       LOCATE Y% + Zeile%, X% + 1
  67.       COLOR 1, 15                              '** Invers **
  68.       PRINT FNPrintLine$(Texte$(Zeile%), Max%);
  69.     END IF
  70.     Wahl$ = INKEY$
  71.                        '** Cursor-Tasten in ^E/^X wandeln **
  72.     IF LEN(Wahl$) = 2 THEN
  73.       IF RIGHT$(Wahl$, 1) = CHR$(72) THEN
  74.         Wahl$ = CHR$(5)
  75.       ELSE
  76.         IF RIGHT$(Wahl$, 1) = CHR$(80) THEN
  77.           Wahl$ = CHR$(24)
  78.         END IF
  79.       END IF
  80.     END IF
  81.     IF Wahl$ = CHR$(5) THEN               '** Balken rauf **
  82.       AlteZeile% = Zeile%: Zeile% = (Zeile% - 1)
  83.       IF Zeile% = 0 THEN Zeile% = Items%
  84.     END IF
  85.     IF Wahl$ = CHR$(24) THEN            '** Balken runter **
  86.       AlteZeile% = Zeile%:   Zeile% = (Zeile% + 1)
  87.       IF Zeile% > Items% THEN Zeile% = 1
  88.     END IF
  89.   WEND
  90.   Res% = Zeile%
  91.   Res$ = Texte$(Zeile%)
  92.                               '** Bildschirm restaurieren **
  93.   FOR i% = 0 TO 3999
  94.     POKE i%, Buffer%(i%)
  95.   NEXT i%
  96. END IF
  97.  
  98. END SUB
  99.  
  100. REM * ---------------------------------------------------- *
  101.