精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● 编程世界>>其他>>利用终端控制码为FOXBASE增加图形功能

主题:利用终端控制码为FOXBASE增加图形功能
发信人: 0123()
整理人: jinhu(1999-07-13 10:42:24), 站内信件
利用终端控制码为FOXBASE增加图形功能 
安徽南陵县建行计算机科 
赵路 
---- 虽然在DOS系统中FOXBASE已逐步被FOXPRO所代替,但在XENIX系统中FOXBAS
E仍在占有很大比例。由于 FOXBASE没有提供图形功能,要想在应用程序中作图就
必须借助于 C等其它语言,其实在XENIX系统中,一般的应用系统都是在终端上运
行的,而现在的终端基本上都是图文终端,终端本身就具有丰富的图形功能,并
提供了命令接口,有的还提供了C语言编的子程序库。 我们如果能了解接口命令
中的控制码的含意,灵活运用FOXBASE中的CHR()函数,也可以在终端上作出各种
图形。下面给出本人根据终端使用手册编写的FOXBASE画图过程文件,以供同行参
考。 

---- 说明:zf是只有一个数值型字段名为FF的库,内容为直方图和圆饼图中统计
对象的值;line是有二个数值型字段名分别为FX,FY的库,内容为折线图中各点
的坐标,其字段长度可根据实际需要来定。在实际运用中也可以采用其它的参数
传递形式来调用过程文件,对于直方图和圆饼图,当统计对象较多时,其图形的
填充方式还可参照终端的使用手册采用自定义图案,对程序稍加修改即可。本人
使用的终端为STAR-500中西文终端,系统为XENIX2.3.2。 

****draw.prg***
*** 打点 ***
proc dot
***(x,y)为点坐标***
para x,y
? chr(27)+"!"+str(x)"+";"++str(y)+"f"
retu
*** 画线 ***
proc line
*** (x1,y1)(x2,y2)为两点坐标 ***
para x1,y1,x2,y2
? chr(27)+"!"+str(x1)+";"+str(y1)+";"
+str(x2)+";"+str(y2)+"d"
retu
*** 画圆 ***
proc circle
*** (x0,y0)为圆心,r为半径,mode为填充类型 ***
para x0,y0,r,mode
? chr(27)+"!"+str(x0)+";"+str(y0)+";"
+str(r)+";"+str(mode)+"c"
retu
*** 画矩形 ***
proc rectangle
*** (x1,y1)(x2,y2)为矩形对角坐标 ***
para x1,y1,x2,y2
? chr(27)+"!"+str(x1)+";"+str(y1)+";"
+str(x2)+";"+str(y2)+"e"
retu
*** 画弧 ***
proc arch
*** (x0,y0)为圆心,r为半径,a1为起始角度,
a2为终止角度,mode为填充类型***
para x0,y0,r,a1,a2,mode
? chr(27)+"!"+str(x0)+";"+str(y0)+";"+str(r)
+";"+str(a1)+";"+str(a2)+";"+str(mode)+"g"
retu
*** 直方图过程文件 ***
proc zf
***(x,y)为坐标系原点,max为直方图高度参考标准***
para x,y,max
use zf
go top
n=recc()
clear
a=600-x
b=400-y
i=1
fac=0
?? chr(27)+"!"+str(x)+";"+str(y)+";"
+"600"+";"+str(y)+"t"
?? chr(27)+"!"+str(x)+";"+str(y)+";"
+str(x)+";"+"400"+"t"
fac=int(a/(4*n+4))
do while i7
  @ 0,i say chr(27)+"!"+str(x1)+";"+str(y1)
+";"+str(x2)+";"+str(y2)+";"+str(i-7)+"e"
else
  @ 0,i say chr(27)+"!"+str(x1)+";"+str(y1)
+";"+str(x2)+";"+str(y2)+";"+str(i)+"e"
endif
  i=i+1
  skip
enddo
use
retu
*** 折线图过程文件 ***
proc bline
*** (x,y) 为坐标原点 ***
para x,y
use line
go top
n=recc()
a=600-x
b=400-y
i=1
clear
?? chr(27)+"!"+str(x)+";"+str(y)
+";"+"600"+";"+str(y)+"t"
?? chr(27)+"!"+str(x)+";"+str(y)+";"
+str(x)+";"+"400"+"t"
do while i<=n-1
x1=fx+x
y1=fy+y
skip
x2=fx+x
y2=fy+y
@ 0,i say chr(27)+"!"+str(x1)+";"+str(y1)
+";"+str(x2)+";"+str(y2)+"d"
i=i+1
enddo
use
retu
*** 圆饼图过程文件 ***
proc pie
*** (x,y) 为圆心,r为半径 ***
para x,y,r
use zf
go top
n=recc()
clear
i=1
part=0
part0=0
sum1=0
do while .not.eof()
sum1=sum1+ff
skip
enddo
go top
do while i<=n
part0=part
part=part+360*ff/sum1
if i=n
@0,i say chr(27)+"!"+str(x)+";"+str(y)+";"
+str(r)+";"+str(part0)+";"+"360"+";"+"0"+"g"
else
if i>7
 @0,i say chr(27)+"!"+str(x)+";"+str(y)+";"+str(r)+";"
+str(part0)+";"+str(part)+";"+str(i-7)+";"+"g"
 else
 @0,Isay chr(27)+"!"+str(x)+";"+str(y)+";"
+str(r)+";"+str(part0)+";"+str(part)+";"+str(i)+"g"
 endif
endif
i=i+1
skip
enddo
use
retu


--
HomePage:www.gw.com.cn   精灵世界欢迎您!!!
www.gw.com.cn/games   精灵游戏咨讯正在建设中

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.102.155.212]

[关闭][返回]