正文

关于文本方式下屏幕内容的保存2005-08-05 13:38:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/mozo/3452.html

分享到:

我很少搞图形的,图形屏幕也就用那两句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

阅读(7140) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册