我很少搞图形的,图形屏幕也就用那两句get,put来保存了, 我只是说说文本方式的保存。 因为以前为自己做程序的时候老是不知道该怎么办, 因为全屏幕需要处理的数据比较少,就先说说全屏幕处理了. A 我第一次做的程序是用screen语句的 保存 dim s(25,80,1) for i=1 to 25 for j=1 to 80 s(i,j,0)=screen(i,j,0) s(i,j,1)=screen(i,j,1) next j,i 恢复 locate 1,1 for i=1 to 25 for j=1 to 80 color s(i,j,1) mod 16, s(i,j,1)\16 print chr$(s(i,j,0); next j,i B 后面,我知道了&HB800,我就利用BSAVE,BLOAD了 sub scrf(f$) def seg =&HB800 if f$="" then f$="~"+ltrim$(str$(timer)) bsave f$,0,4000 else bload f$,0 if left$(f$,1)="~" then kill f$ f$="" endif endif def seg end sub 为了加快文件的速度,我用了虚拟磁盘. C 为了更快更灵活的使用保存和恢复全屏幕(要注意是文本方式) 我后来算了一下,一页数据也就大概4K,一个字符串可以到32K 于是我又改用更快更方便的字符串来保存屏幕信息了: sub scrc (s$) def seg =&HB800 if s$="" then for d%=0 to 3999 s$=s$+chr$(peek(d%) next else for d%=1 to len(s$) poke d%-1,asc(mid$(s$,d%,1) next endif def seg end sub D 也有很多情况下,需要用到一个子窗口,而不是整个屏幕 特别是在需要移动某个窗口的时候要用到. 这种情况下,能用数组当然比较方便快捷.只是有点繁琐, 而且通用起来会有一定困难.我就不举数组的例子了, 我还是用字符串来做,不过需要增加一些数据的转换来减少一些参数的传递: SUB Scrs (s$) DEF SEG = &HB800 IF RTRIM$(s$) = "" THEN s$ = "0 1 1 25 80 1 1 " o% = VAL(MID$(s$, 1, 1)) x% = VAL(MID$(s$, 3, 3)) y% = VAL(MID$(s$, 6, 3)) h% = VAL(MID$(s$, 9, 3)) l% = VAL(MID$(s$, 12, 3)) x2% = VAL(MID$(s$, 15, 3)) y2% = VAL(MID$(s$, 18, 3)) IF o% = 0 THEN s$ = LEFT$(s$ + SPACE$(20), 20) FOR i% = x% TO (x% + h% - 1) FOR j% = y% TO (y% + l% - 1) d% = ((i% - 1) * 80 + j% - 1) * 2 s$ = s$ + CHR$(PEEK(d%)) + CHR$(PEEK(d% + 1)) NEXT j%, i% MID$(s$, 1, 1) = "1" ELSE m% = 19 IF x2% < 0 THEN x2% = x% IF y2% < 0 THEN y2% = y% FOR i% = x2% TO (x2% + h% - 1) FOR j% = y2% TO (y2% + l% - 1) d% = ((i% - 1) * 80 + j% - 1) * 2 m% = m% + 2 POKE d%, ASC(MID$(s$, m%, 1)) POKE d% + 1, ASC(MID$(s$, m% + 1, 1)) NEXT j%, i% END IF DEF SEG END SUB

评论