回 帖 发 新 帖 刷新版面

主题:请教高手两个TP中Graph单元下的过程:SetActivePage和SetVisualPage

如题[em18][em4]

回复列表 (共5个回复)

沙发

SetActivePage和SetVisualPage:
SetVisualPage:设置当前显示的页
SetActivePage:设置当前画图所在的页(不一定是所显示的)

板凳

首先谢谢一楼!
但我又遇到一个新问题:
当我运行下面这个测试程序时好像有问题。大家可以试试。

program PageTest;
uses Graph;
var
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
begin
grDriver := Detect;
InitGraph(grDriver, grMode,' ');
ErrCode := GraphResult;
if ErrCode <> grOk then Halt(1);
SetVisualPage(1);
SetActivePage(0);
Line(0,0,GetMaxX,GetMaxY);
Line(GetMaxX,0,0,GetMaxY);
Readln;
SetVisualPage(0);
Readln;
Closegraph;
end.

程序首先设置显示页为1,画图页为0;
然后画屏幕的两条对角线。
按理,∵显示页≠画图页,∴屏幕仍然全黑。
但是,屏幕的下半部分竟然出现了三条折线!!

高手们,请问这是为什么?如何解决?

3 楼

阿Ben还在努力地研究这个问题啊!没有用啊!
以前设计这种编程工具时,显存是非常小的,所以640*480*16色下,只有一个页面哪!
SetVisualPage、SetActivePage,基本上两个过程跟破铜烂铁没什么区别哪!要么分辨率下降,要么颜色变少,才有用哪!Turbo pascal7.0的帮助里,明明白白写着,640*480*16下只有一个页面!(我要找找在哪里,嘻嘻!)

产生三条乱线,跟数据溢出是一个道理的。部分显存按理是第二页的数据,因为显存太少,仍调用了第一页的数据。

改改看:

program PageTest;
uses Graph;
var
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
begin
grDriver := VGA;
grmode :=  VGAMed;
InitGraph(grDriver, grMode,' ');
ErrCode := GraphResult;
if ErrCode <> grOk then Halt(1);

setcolor(red);

SetVisualPage(1);
SetActivePage(0);
Line(0,0,GetMaxX,GetMaxY);
Line(GetMaxX,0,0,GetMaxY);
Readln;
SetVisualPage(0);
Readln;
Closegraph;
end.

就一切正常了!但那种是人画的图吗?寻找新的BGI图形驱动,才是唯一的出路,但现在BGI也被人扔进垃圾箱里了,找也很难找了。上次我找了个256色的驱动已经是万幸啦!

(^_^)



找到了!去看GetGraphMode的帮助,就一切都明白啦!

4 楼

  Graphics│ Constant │     │ Column │         │
   driver │ name     │Value│ x row  │ Palette │Pages
===========================================================  
    CGA   │CGAC0     │  0  │320x200 │  C0     │1
          │CGAC1     │  1  │320x200 │  C1     │1
          │CGAC2     │  2  │320x200 │  C2     │1
          │CGAC3     │  3  │320x200 │  C3     │1
          │CGAHi     │  4  │640x200 │2 color  │1
          │          │     │        │         │
    MCGA  │MCGAC0    │  0  │320x200 │  C0     │1
          │MCGAC1    │  1  │320x200 │  C1     │1
          │MCGAC2    │  2  │320x200 │  C2     │1
          │MCGAC3    │  3  │320x200 │  C3     │1
          │MCGAMed   │  4  │640x200 │2 color  │1
          │MCGAHi    │  5  │640x480 │2 color  │1
          │          │     │        │         │
    EGA   │EGALo     │  0  │640x200 │16 color │4
          │EGAHi     │  1  │640x350 │16 color │2
          │          │     │        │         │
    EGA64 │EGA64Lo   │  0  │640x200 │16 color │1
          │EGA64Hi   │  1  │640x350 │4 color  │1
  EGA-MONO│EGAMonoHi │  3  │640x350 │2 color  │1*
          │EGAMonoHi │  3  │640x350 │2 color  │1**
          │          │     │        │         │
  HERC    │HercMonoHi│  0  │720x348 │2 color  │1
          │          │     │        │         │
  ATT400  │ATT400C0  │  0  │320x200 │C0       │1
          │ATT400C1  │  1  │320x200 │C1       │1
          │ATT400C2  │  2  │320x200 │C2       │1
          │ATT400C3  │  3  │320x200 │C3       │1
          │ATT400Med │  4  │640x200 │2 color  │1
          │ATT400Hi  │  5  │640x400 │2 color  │1
          │          │     │        │         │
  VGA     │VGALo     │  0  │640x200 │16 color │2
          │VGAMed    │  1  │640x350 │16 color │2
          │VGAHi     │  2  │640x480 │16 color │1
          │          │     │        │         │
  PC3270  │PC3270Hi  │  0  │720x350 │2 color  │1
          │          │     │        │         │
  IBM8514 │IBM8514Lo │  0  │640x480 │256 color│1
  IBM8514 │IBM8514Hi │  0  │1024x768│256 color│1
           
           
* 64K on EGAMono card ** 256K on EGAMono card


话说回来,640*350*16色,画起动画来不知道效果如何。SetActivePage和SetVisualPage  两个过程都是为方便画动画设计的。目前也只能找到这种16色最高分辨率又能支持两个页面的模式啦!

5 楼

非常感谢Jtchang老师!!我又长知识啦!
原来还有个这样有用的表格啊!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册