home *** CD-ROM | disk | FTP | other *** search
- REM * ---------------------------------------------------- *
- REM * POPUP.INC *
- REM * PopUp-Menue-Routine für Turbo/Quick Basic *
- REM * (c) 1988 TOOLBOX *
- REM * ---------------------------------------------------- *
-
- DEF FNPrintLine$(S$, Max%) 'wird benötigt von SUB PopUp
- LOCAL j%, zeile$ 'STATIC für Quick Basic
- zeile$ = S$
- FOR j% = 1 TO Max% - LEN(S$)
- zeile$ = zeile$ + " "
- NEXT j%
- FNPrintLine$ = zeile$
- END DEF
-
- SUB PopUpMenue(X%,Y%,Texte$(1),Items%,Mono%,Res%,Res$)
-
- LOCAL Max%, i%, j%, k%
- LOCAL Zeile%, AlteZeile%, Wahl$, Buffer%()
- REM Für Quick Basic sind hier keine LOCAL-Deklarationen
- REM nötig!
-
- DIM Buffer%(4000)
-
- Max% = 0
- FOR i% = 1 TO Items% '** Max. Textlänge ermitteln **
- IF (LEN(Texte$(i%)) > Max%) THEN
- Max% = LEN(Texte$(i%))
- END IF
- NEXT i%
-
- '** Paßt das Menue auf den Bildschirm ? **
- IF ((X% + Max% + 1)<=80) AND ((Y% + Items% + 1)<=25) THEN
- '** Segment für Bildschirmspeicher **
- IF Mono% THEN DEF SEG = &HB000 ELSE DEF SEG = &HB800
- '** Hintergrund retten **
- FOR i% = 0 TO 3999
- Buffer%(i%) = PEEK(i%)
- NEXT i%
- '** Rahmen malen **
- LOCATE Y%, X%
- PRINT CHR$(201);
- FOR i% = 1 TO Max%: PRINT CHR$(205); : NEXT i%
- PRINT CHR$(187);
- FOR i% = 1 TO Items%
- LOCATE (Y% + i%), X%
- PRINT CHR$(186);
- PRINT FNPrintLine$(Texte$(i%), Max%);
- PRINT CHR$(186);
- NEXT i%
- LOCATE (Y% + Items% + 1), X%
- PRINT CHR$(200);
- FOR i% = 1 TO Max%
- PRINT CHR$(205);
- NEXT i%
- PRINT CHR$(188);
- '** Benutzerauswahl **
- Zeile% = 1: AlteZeile% = Items%: Wahl$ = CHR$(0)
- '** Warte bis Benutzer gewählt hat **
- WHILE Wahl$ <> CHR$(13)
- '** Hat sich was geändert ? **
- IF Zeile% <> AlteZeile% THEN
- LOCATE Y% + AlteZeile%, X% + 1
- COLOR 15, 1
- PRINT FNPrintLine$(Texte$(ALteZeile%), Max%);
- LOCATE Y% + Zeile%, X% + 1
- COLOR 1, 15 '** Invers **
- PRINT FNPrintLine$(Texte$(Zeile%), Max%);
- END IF
- Wahl$ = INKEY$
- '** Cursor-Tasten in ^E/^X wandeln **
- IF LEN(Wahl$) = 2 THEN
- IF RIGHT$(Wahl$, 1) = CHR$(72) THEN
- Wahl$ = CHR$(5)
- ELSE
- IF RIGHT$(Wahl$, 1) = CHR$(80) THEN
- Wahl$ = CHR$(24)
- END IF
- END IF
- END IF
- IF Wahl$ = CHR$(5) THEN '** Balken rauf **
- AlteZeile% = Zeile%: Zeile% = (Zeile% - 1)
- IF Zeile% = 0 THEN Zeile% = Items%
- END IF
- IF Wahl$ = CHR$(24) THEN '** Balken runter **
- AlteZeile% = Zeile%: Zeile% = (Zeile% + 1)
- IF Zeile% > Items% THEN Zeile% = 1
- END IF
- WEND
- Res% = Zeile%
- Res$ = Texte$(Zeile%)
- '** Bildschirm restaurieren **
- FOR i% = 0 TO 3999
- POKE i%, Buffer%(i%)
- NEXT i%
- END IF
-
- END SUB
-
- REM * ---------------------------------------------------- *