'=========================================================================== ' Subject: SCROLL SCREEN LEFT/RIGHT Date: 12-08-93 (09:13) ' Author: Ray Carson Code: QB, QBasic, PDS ' Origin: QBTIPS_T.DOC Packet: TEXT.ABC '=========================================================================== '> I know how to scroll the screen UP and DOWN by using '> interrupts, but I can't find a way do make it scroll left '> and right like in Lotus 1-2-3, etc... '> If you know if it's possible, or how to do it, leave me a message 'The following code is slow in the IDE but is reasonably fast when 'compiled to an .EXE. You will lose characters that are scrolled off 'of the screen unless you put them into an array or if you are working 'with known data (arrays/fields) then just reprint. I Hope long lines 'don't get wrapped! DEFINT A-Z 'SCROLL.BAS ~ Ray Carson ~ 1993 DECLARE SUB Scroll (UpperRow, LowerRow, Columns, Direction) COLOR 15, 1: CLS LOCATE 4, 2: PRINT CHR$(218); STRING$(76, CHR$(196)); CHR$(191); LOCATE 8, 2: PRINT CHR$(192); STRING$(76, CHR$(196)); CHR$(217); FOR X = 5 TO 7 LOCATE X, 2: PRINT CHR$(179); LOCATE X, 79: PRINT CHR$(179); NEXT COLOR 14, 1 LOCATE 5, 32: PRINT "RC Software"; LOCATE 6, 32: PRINT "1113 Hillcrest"; LOCATE 7, 32: PRINT "Conroe, Texas 77301"; COLOR 2, 1 LOCATE 6, 10: PRINT "(409)756-6860"; LOCATE 6, 60: PRINT "(409)441-5096"; COLOR 20, 1: LOCATE 10, 35: PRINT "Press Key"; DO: LOOP UNTIL LEN(INKEY$) CALL Scroll(5, 6, 10, 0) ' Direction 0 = right DO: LOOP UNTIL LEN(INKEY$) CALL Scroll(5, 6, 10, -1) ' Direction -1 = left COLOR 15, 1: LOCATE 10, 35: PRINT " Done "; SUB Scroll (UpperRow, LowerRow, Columns, Direction) DEF SEG = 0 Address = PEEK(1040) AND 48 IF Address = 48 THEN DEF SEG = &HB000 'mono ELSE DEF SEG = &HB800 'color END IF FOR X = 1 TO Columns IF Direction = 0 THEN 'Right FOR Column = 79 TO 1 STEP -1 'move everything FOR Row = UpperRow TO LowerRow Offset = ((Row - 1) * 80 + (Column - 1)) * 2 NewColumn = Column + 1 NewOffset = ((Row - 1) * 80 + (NewColumn - 1)) * 2 Char = PEEK(Offset) Attr = PEEK(Offset + 1) POKE NewOffset, Char POKE NewOffset + 1, Attr POKE Offset, 32 NEXT NEXT END IF IF Direction = -1 THEN 'Left FOR Column = 2 TO 80 'move everything FOR Row = UpperRow TO LowerRow Offset = ((Row - 1) * 80 + (Column - 1)) * 2 NewColumn = Column - 1 NewOffset = ((Row - 1) * 80 + (NewColumn - 1)) * 2 Char = PEEK(Offset) Attr = PEEK(Offset + 1) POKE NewOffset, Char POKE NewOffset + 1, Attr POKE Offset, 32 NEXT NEXT END IF NEXT END SUB