主题:请教高手两个TP中Graph单元下的过程:SetActivePage和SetVisualPage
阿Ben
[专家分:2200] 发布于 2006-01-29 17:51:00
如题[em18][em4]
回复列表 (共5个回复)
沙发
小田甜 [专家分:3910] 发布于 2006-01-30 14:44:00
SetActivePage和SetVisualPage:
SetVisualPage:设置当前显示的页
SetActivePage:设置当前画图所在的页(不一定是所显示的)
板凳
阿Ben [专家分:2200] 发布于 2006-01-31 17:08:00
首先谢谢一楼!
但我又遇到一个新问题:
当我运行下面这个测试程序时好像有问题。大家可以试试。
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 楼
jtchang [专家分:5370] 发布于 2006-01-31 19:15:00
阿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 楼
jtchang [专家分:5370] 发布于 2006-01-31 19:41:00
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 楼
阿Ben [专家分:2200] 发布于 2006-02-01 23:38:00
非常感谢Jtchang老师!!我又长知识啦!
原来还有个这样有用的表格啊!!
我来回复