回 帖 发 新 帖 刷新版面

主题:[讨论]有关单元

上次与大家讨论了指针,这次请大家对单元发表发表,说说用处、用法、经典例子等等,多谢各位![em4][em2][em15]

回复列表 (共8个回复)

沙发

标准单元:
SYSETEM      TURBO 的运行库
DOS          目录查找。时间,日期
CRT          控制屏幕模式、扩展键盘码
PRINTER      支持打印输出操作
GRAPH        高级图形软件包
GRAPH3       实现TURBO PASCAL 3。0的图形软件包
TURBO3       兼容TURBO PASCAL 3。0原程序
OVERLAY      实现高级覆盖管理

板凳

一、使用Pascal进行图形操作前的准备  

  在 Turbo Pascal 中有一个 CRT 单元及一个 GRAPH 单元,简单的说 crt 单元是为了实现字符的显示与处理,另外的那个称为 GRAPH 单元是专门用来处理图形的。我们看到的有关图形的程序往往都要用到。所以若是要在 Turbo Pascal 中实现图形操作,就必须要调用 CRT 单元及GRAPH 单元。那么怎么样来调用 CRT 及 GRAPH 单元呢?

  现在先来介绍一下单元调用语句:USES

    USES的语法:

     USES 单元表识符,……,单元表识符;

  说明:扩展名为*.TPW是Windows下的单元文件,*.TPU是DOS下的单元文件。
  位置:变量说明var之前。

  讲到这里,我还是要顺便提一下什么是单元?是这样的:我们在编程序的时候,要用到procedure或者function ,中文名称一个是过程另一个是函数。做不同的程序时,往往要用到一些相同的过程或者相同的函数。如果统统放到程序中,程序会硕大无比,比例与调试与编译,并且在过去“惜kb如金”的年代里,这样的程序也很浪费。于是,简单的讲,人们把它们做成“包”--我们称之为单元。一来,免去很多重复的痛苦,大家共享代码也很简单,另外,很多不愿意让别人看到源程序的人也很乐于如此。生产 pascal 语言的公司也提供一些做好的单元,放在安装盘上方便实用。 crt ,graph 即使如此,还有 dos ,system 等等。

二、Pascal图形模式的初始化及退出

  1.初始化

  Pascal的图形操作在使用之前必须先进行初始化。如果说你编写图形程序中出现问题,是有八九十卡在这里了。 这也是非常令我头疼的问题。 用过程 initgraph(GraphDriver,GraphMode,PathToDriver)其中 GraphDriver , GraphMode 为整形变量, PathToDriver为字符串变量, GraphDriver为图形驱动器,GraphMode为图形模式 , PathToDriver指定的路径名中建筑图形驱动程序(以.BGI为后缀)。initgraph使用方法见下例:

 program t001 (input,output);
 uses crt,graph;
 var
   gd:gm:integer; {定义GraphDriver,GraphMode变量}
 begin
   gd:=detect;

   initgraph(gd,gm,'');   {调用initgraph过程,PathToDriver缺省则表示在当前目录中寻找《-------这个很重要,一般也可以写成 initgraph(gd,gm,'c:\tp\bgi'); 当然如果你是如此安装的话。}

   bar(100,100,200,200);   {画一个以(100,100),(200,200)为顶点的矩形,这是一个标准过程,你在后面还会看到一个名为bar3d的东东,那个是画立体矩形的}

   delay(1000);   {将此图形保留一秒,10000就是10秒,依此类推}
 end.

  2.退出

  Closegraph过程

   功能:退出图形模式.

  在图形模式下如果使用 write 等等文本输出可能会出问题---比如无法看到等等。好像还可能引起显示上的问题,反正养成一个好习惯也没什么不好的。这里有一个技巧,当你发现无论如何调整都无法显示图形时,你可以调用自带的例子,用来测试,看看是否是程序本身的问题。

  注意,这里有一个不属于图形的,但是非常容易遇到的问题。前面我们说过,在图形编程使用 graph 单元的时候,我们也常常会使用crt单元,这就有一个问题:crt 单元在主频高的机器上无法正常运行。会出现 200 号错误!!!请下载补丁,在我们的网站上就有。还有一种情况,就是出了问题没有提示!表现是运行程序什么反应也没有。如果你出现这种情况,首先检查程序,如果没有问题,非常有可能使这种情况,也请下载补丁!据报告奔腾180以上的机器具都不同程度存在这种问题!

三、基本几何图形的绘制


画直线:

1.Line过程
描述:procedure Line(x1, y1, x2, y2: Integer);两点确定一直线.够简单吧!

2.Lineto过程
描述:procedure LineTo(X, Y: Integer);从当前点项目标点(x,y)作直线.


画圆:

1.Circle过程
功能:以(X,Y)为圆心、Radius为半画一圆。
描述:procedure Circle(X,Y:Integer;Radius:Word);
示例:Circle(100,100,200) {画一个以(100,100)为圆心,200为半径的圆}


画椭圆:

1. Ellipse过程
功能:画一个以(X,Y)为中心,XRadius和YRadius为半轴,StAngle和EndAngle为始角和终角的椭圆弧。
描述:procedure Ellipse(X,Y:Integer;StAngle,EndAngle:Word;XRadius,YRadius:Word);
说明:角度沿逆时针方向,单位是度。0度指向东。


画圆弧:

1.Arc过程
功能: 画一个以(X,Y)为中心,Radius为半径,StAngle和EndAngle为始角和终角 的圆弧。
描述: procedure Arc(X,Y : Integer; StAngle,EndAngle,Radius:Word);
说明: 角度沿逆时针方向,单位是度。0度指向东。
示例: Arc(100,100,0,90,50) {画出第一卦限1/4圆,半径50,圆心(100,100)}


画矩形:

1.Bar过程
功能:画一个以(x1,y1),(x2,y2)为两个对角顶点的矩形。
描述:procedure Bar(x1,y1,x2,y2:integer);
示例:Bar(100,100,200,200) {画一个以(100,100),(200,200)为对角顶点的矩形}

2.Bar3d过程
功能:画一个长方体.
描述:procedure Bar3d(x1,y1,x2,y2:integer,depth:word,top:boolean); {x1,x2,y1,y2同上,为长方体的厚度 ,top为是否画出顶面.}

线形,颜色,及填充设置

线形设置:

1.setlinestyle过程
功能:设置线形,及线宽.
描述:procedure SetLineStyle(LineStyle: Word; Pattern: Word; Thickness: Word);
说明:linestyle(线形)一共有三种.代号0,1,2;
Thichness(线宽)有两种.代号1,3.1为普通线.3为宽线.


2.GetLineSettings过程
功能:返回当前设置的线型设置信息.
描述:procedure GetLineSettings(var LineInfo: LineSettingsType);{参见LineSettingsType类型}

3.LineSettingsType类型
描述:LineSettingsType = record
    LineStyle : Word; {线形}
    Pattern : Word; {模式}
    Thickness : Word; {线宽}
   end;


此类型记录了一种线形的信息.


颜色设置:

在pascal中共有16种颜色可以使用.

1.setcolor过程
描述: procedure SetColor(Color: Word);
设置线的颜色.颜色代码如上图.

2.GetColor函数
功能:返回最后一次作图时的颜色值
描述:function GetColor:word
示例:color:=GetColor; {color:word}

3.GetMaxColor函数
功能:返回系统可用的最大颜色数.
描述:num:=GetMaxColor; {将最大颜色数存到num变量中}

填充设置:


1.SetFillStyle过程
功能 设置填充模式和颜色。
描述 procedure SetFillStyle(Pattern:Word;Color:Word);
说明 设置用于Bar,Bar3D的填充模式和颜色。可生系列填充模式。缺省模式是实心点,缺省模式是实心点,缺省颜色是调色板中最大颜色序号值。如果传递给SetFillStyle的输入参数无效,GraphResult将返回值grError,且当前填充参数不改变。

2.FillSettingsType 类型
描述:FillSettingsType=record
Pattern:word;
Color :word;
end;

  此类型记录了一种填充模式的信息.
  这些知识都很简单,更多的可以在编辑环境中按下f1观看帮助文档。







3 楼

一、使用Pascal进行声音操作前的准备

  首先需要说明的是我们所说的Pascal声音操作,并不是指实现Pascal对于声卡进行操作,而是利用Pascal对计算机的PC喇叭操作,使它发出声音。

  在Turbo Pascal中有一个叫做CRT单元的东西,CRT单元实现了一系列强大的可以充分地控制你计算机的功能CRT单元提供了控制显示模式、扩展键盘代码、显示颜色、窗体和声音的功能。

  若是要在Turbo Pascal中实现声音操作,就必须要调用CRT单元。那么怎么样来调用CRT单元呢?现在介绍一下单元调用语句:USES

  USES的语法:
     USES 单元表识符,……,单元表识符;
  说明:
     扩展名为*.TPW是Windows下的单元文件,*.TPU是DOS下的单元文件。

二、Pascal声音操作的全部——三个过程

  其实,Pascal的声音操作是十分简单的,一共可以使用的过程也只有3个,由此可见,你可以用很少的时间使你的PC喇叭发出你所希望的长度、你所希望的频率的声音

(1)SOUND过程

   调用SOUND的方法: SOUND(HZ);

 说明:在调用SOUND的时候,它的参数HZ必须是WORD,也就是说变量HZ必须在0~65535这个范围中,变量HZ就是使PC喇叭发出等于HZ变量数值的频率的声音,由此可见人耳可以听见的范围远远小于这个范围。

(2)DELAY过程

  调用DELAY的方法: DELAY(TIME);
  说明:当你在调用了SOUND过程之后,必须指定它发出变量HZ所指定的频率的声音的时间长度,DELAY就是用来指定这个长度的过程,变量TIME必须是大于等于零的整数,并且当TIME=1000时,它所延迟的时间是1秒,也就是说TIME的单位是千分之秒。

(3)NOSOUND过程

  调用DELAY的方法: NOSOUND;
  说明:NOSOUND是一个无参过程,它的作用从过程名上就可以看出——用来使PC喇叭停止发声,在调用SOUND之后,最好是要调用NOSOUND使PC喇叭停止发声。

例:用于上过程编写一个警报程序:
PROGRAM Alert;
USES Crt;
VAR
 Hz : Word;
 Count : Word;
BEGIN
 REPEAT
  Count:=Count+1;
  Hz := 262;
  WHILE Hz <= 524 DO
   BEGIN
    Sound(Hz);
    Delay(2);
    Hz := Hz + 1;
   END;
 UNTIL Count = 10;
 Nosound;
END.

注意,在不同的机器上发出的声音有所差异。这是因为计算机主频不同。还有,在试验这个程序,或者说试验这种发声程序之前,最好先准备一个调用NOSOUND使PC喇叭停止发声的简单程序,以免异常中断,使喇叭响个不停。







4 楼

呵呵。。。。。。。。

5 楼

顶个先,偶也想了解一下```

6 楼

加分啊。。。。。。。。。

7 楼

好贴!顶!

8 楼

好贴`
~~

我来回复

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