home *** CD-ROM | disk | FTP | other *** search
- '********************************************************
- '* POPTEST.BAS
- '* Demonstration der PopUp-Menue-Routine für Turbo Basic
-
- DIM S$(5)
- S$(1) = "Erster Punkt" : S$(2) = "Zweiter Punkt"
- S$(3) = "Dritter" : S$(4) = "" : S$(5) = "Letzter"
- CLS
- FOR i% = 0 to 1999 : PRINT "X"; : NEXT i% 'Schirm füllen
- CALL PopUpMenue(20,3,S$(),5,0,Res%,Res$)
- WHILE INKEY$ = "" : WEND 'Warte auf Tastendruck
- PRINT Res%,Res$
- END
-
- '***** PopUp-Menue Routine ******************************
-
- SUB PopUpMenue(X%,Y%,Texte$(1),NrItems%,Mono%,Res%,Res$)
-
- LOCAL MaxLen%, i%, j%, k%
- LOCAL Zeile%, AlteZeile%, Wahl$, Buffer%()
- DIM Buffer%(4000)
-
- MaxLen% = 0
- FOR i% = 1 to NrItems% '** Max. Textlänge ermitteln **
- IF (Len(Texte$(i%)) > MaxLen%) THEN
- MaxLen% = Len(Texte$(i%))
- END IF
- NEXT i%
- '** Paßt das Menue auf den Bildschirm ? **
- IF ((X%+MaxLen%+1)<=80) AND ((Y%+NrItems%+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 "╔";
- FOR i% = 1 TO MaxLen% : PRINT "═"; : NEXT i%
- PRINT "╗";
- FOR i% = 1 TO NrItems%
- LOCATE(Y%+i%),X%
- PRINT "║";
- Call PrintLine(Texte$(i%),MaxLen%)
- PRINT "║";
- NEXT i%
- LOCATE(Y%+NrItems%+1),X%
- PRINT "╚";
- FOR i% = 1 TO MaxLen% : PRINT "═"; : NEXT i%
- PRINT "╝";
-
- '** Benutzerauswahl **
- Zeile% = 1 : AlteZeile% = NrItems% : 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 7,0
- CALL PrintLine(Texte$(AlteZeile%),MaxLen%)
- Locate Y%+Zeile%,X%+1
- COLOR 0,7 ' Invers
- CALL PrintLine(Texte$(Zeile%),MaxLen%)
- 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% = NrItems%
- END IF
- IF Wahl$ = CHR$(24) THEN '** Balken runter **
- AlteZeile% = Zeile% : Zeile% = (Zeile% + 1)
- IF Zeile% > NrItems% 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
-
- '**** Hilfsroutine ****
- SUB PrintLine(S$,MaxLen%)
- LOCAL i%
- PRINT S$;
- FOR i% = 1 TO MaxLen%-Len(S$) : PRINT " "; : NEXT i%
- END SUB
-
- '****** Ende PopUpMenue ********************************