那位大些能帮我分析一下这段delphi函数程序代码?

那位大些能帮我分析一下这段delphi函数程序代码?,第1张

这个函数是将1位16进制数转换为十进制表示.

16进制数包括: 0, 1, 2 ..9 , A,B,C,D,E,F . 当然 小写的a--f和大写是同等的.

分析代码中的if语句:

1. 当输入为空格, 则返回0

2. if (Ord(c)>=ord('0')) and (Ord(c)<=ord('9')) -- 就是判断是数字0到9,则返回对应的数字

3. if (Ord(c)>=ord('a')) and (Ord(c)<=ord('f')) 和 if (Ord(c)>=ord('A')) and (Ord(c)<=ord('F')), 表示输入的是a到f之间(大写同样的), 则返回对应表示的十进制数, a--10, b--11,c--12,d--13, e--14, f--15.

4. 其它字符则返回 -1 .

这是两个根据实际需求写的算法,没法解释出它具体是干嘛的,简单理解的就是,第一个过程是为了算出一个整型的数,第二个过程是为了得到一个字符串!而方法里面的多数函数为类型转换函数,例如:inttostr,floattostr,copy是复制函数,从第几位开始,复制多少位!也只能解答到这里了

Delphi软件提供了图表部件Chart,可以生成条形图、折线图、饼图等各种形式,并允许具有三维外观等视觉特性。Chart包含两种不同的控件,分别用于创建一般数据图表和数据库图表,这两个控件分别是Additional页上的Chart控件和DataControls页上的DBChart控件。本系统需要实时测量温度的实际值,并绘制温度值(Y轴)和时间(X轴)的关系曲线,以便观测,而这两个控件绘制出的图形或曲线是以某些数据或某一个数据库表为基础,不便实时更新。所以Chart部件在用于绘制系统实时测量曲线时不太合适。为了解决实时测量曲线绘制的难题,在网站 http://www.iae.nsk.su/~lab12/pod上找到了能实现该功能的控件,控件Tsp_XYPlot和Tsp_XYLine专门用来绘制二维图形,调用控件的过程和函数能够实现图形的绘制、打印等。可以在窗口上设定需要的坐标轴,坐标轴的网格线、宽度、刻度及坐标轴的最大、最小尺寸、颜色等,曲线是否显示、颜色、线型、粗细及曲线的点是否显示和形状等,还可以实现图形放大、缩小显示、打印等功能。免费下载其软件包spsgraph.zip,包中有:支持控件的pascal源文件、帮助文件和演示程序等。

文件下载成功后,将包解开,按以下步骤安装控件到Delphi组件中。

1.启动Delphi后,进入Component,点击Install Component进入其界面。

2.在Install Component界面上的unit file name 选项中,按browser找到spsgraph子目录,选择sgr_date.pas,然后按ok,出现提示框:Package dclusr50.bpl will be rebuilt, Continue? 按yes继续。

3.出现提示框:Package 'dclusr50' will be compiled. Continue? 按yes 继续。

4.重复步骤1~3,依次将spsgraph子目录下的sgr_def.pas、sgr_misc.pas、sgr_reg.pas、sgr_scale.pas 文件安装,则控件安装完成。

控件安装完成后,自动安装在Samples控件中。以后使用时,从Samples中取出控件放在窗口界面上即可。

三、曲线绘制控件的使用

控件Tsp_XYPlot 和Tsp_XYLine可以通过适当配置完成单条和多条曲线的绘制 *** 作,从而可以实现在一幅图中显示几种不同的曲线。主要控件Tsp_XYPlot提供基本绘图功能,是坐标轴、图形曲线的画布。利用Tsp_XYLine可以在Tsp_XYPlot上绘制二维图形或曲线。

1.TSP_XYPlot控件设计时常用属性

Tsp_XYPlot控件有两个横轴、两个纵轴。轴的最大值、最小值可以自动或手动设置。程序设置时主要设置坐标轴属性,四个坐标轴为:左轴、右轴、顶轴、底轴,其属性基本相同。

Width、height:设置Tsp_XYPlot的宽度和高度值。

AutoMax、AutoMin:最大、最小值属性,true:自动设置坐标轴的最大、最小值,false:手动设置最大、最小值。

GridAttr:网格线属性,设置网格线颜色、粗细、形式及是否翻转等。

LineAttr:坐标轴属性,设置坐标轴颜色、粗细、形式、最大值、最小值、是否标记、刻度值等。

2.TSP_XYLine控件设计时常用属性

Plot:绘图设置属性,用于设置绘制TSP_XYLine的画布。选择Frame上的Tsp_XYPlot控件。

Xaxis、Yaxis:X、Y轴设置属性,选择左、右、顶、底轴中的两个轴。

LineAttr:曲线线型属性,设置曲线颜色、粗细、形式。如在同一个Tsp_XYPlot控件上绘制两条以上曲线时,为区分可以设置不同的曲线颜色。

PointAttr:曲线上点属性,设置点的颜色、大小、种类、形式、是否可见等属性。

3.TSP_XYLine控件运行时常用属性

Clear:清除绘制的曲线

InsertXY( I: integerX:doubleY:double ):在曲线上第I个位置开始绘制点,X、Y为要绘制的横、纵坐标值。

AddXY(X:doubleY:double):在Tsp_XYPlot控件上画(X,Y)点。

四、实时数据采集曲线的绘制

绘制实时数据采集曲线是为了方便实时观测,实际中一般是与给定控制曲线进行比较,以便观察控制效果。绘制曲线前首先将需要的坐标轴及坐标轴的尺寸、刻度等设定好,然后根据测量结果及采集时间绘制实时测量曲线

1.坐标轴与网格的设置

新建一个Form,属性Name为 mainform。添加一个Tsp_XYPlot和TSP_XYLine控件,其Name属性分别为xyplot1和xyline1。然后开始设置xyplot1和xyline1的各种属性。在计算机液氮温度控制系统中,温度控制范围为40℃~200℃,控制时间为15分钟,左轴(纵轴)为实测温度,底轴(横轴)为时间。左轴设置:clBlack(黑色)、1(轴宽度)、psSolid(实线)、40(最大温度)、-160(最低温度)、11(刻度数)。底轴设置:clBlack(黑色)、1(轴宽度)、psSolid(实线)、15(最大时间)、0(最小时间)、11(刻度数)。其他属性按默认选项设置。

网格线设置:clgray(灰色), psSolid(实线),其是否可见属性为:true。

2.实时曲线绘制

设置好坐标轴和网格属性后,利用TSP_XYLine控件的过程InsertXY( I: integerX:doubleY:double ),可以开始绘制实时曲线。设xyline1的plot属性为xyplot1,为了将实测曲线与给定曲线区分开,设置实测曲线的xyline1.LineAttr.color:=clred;即设置颜色为红色。系统实际运行时,测量一个数据,则插入一点,直到测量结束。其曲线绘制部分程序为:

xyline1.LineAttr.Color:=clred//设置颜色红色

xyline1.insertxy(0,x,y)//xyline1.insertXY(0,x,y)//插入点

3.放大、缩小显示效果的实现

通过调整Tsp_XYPlot的width和height属性值,可以使显示的图形区域放大或缩小,可以程序设置也可以在运行窗口上用鼠标拖放以使显示图形放大或缩小。通过增加或减少刻度值可以使图形的网格线增多或减少。在程序中设置如:

xyplot1.width=438,

xyplot1.height:=568

xyplot1.LeftAxis.TicksCount :=11

xyplot1.BottomAxis.TicksCount=6

五、曲线的打印

在mainform上放置按钮print,再放一个控件PrintDialog,其name属性为PrintDialog1,程序设计为按下print,则d出打印机设置界面,在界面上设置如纸张大小、打印方向等,完成按“确定”后,即开始打印,相应程序如下。程序中自动根据纸张大小设置打印位置和左右边界等,将图形打印在纸张的中间位置,注意在程序的uses子句中,要引入printers打印机接口。

procedure TMainForm.PrintClick(Sender: TObject)

var EMF: TMetafileMC: TMetafileCanvas

ar:doubleR:TRect

begin

if Not PrintDialog1.Execute then Exit//打印机属性设置

EMF := TMetafile.Create

try

with XYPlot1 do

begin

EMF.Width:=Width

EMF.Height:=Height//取出xyplot1的宽度、高度

MC:=TMetafileCanvas.Create(EMF, Canvas.Handle)

try

DrawPlot(MC, Width, Height)

finally

MC.Free

end

ar:=Height/Width//取出图形的高/宽比

end

with Printer, R do

begin

Top:=0Left:=0

if ar〈1 then

begin

Right:=round(PageWidth*0.4)

Bottom:=round(Right*ar)

end else

begin

Bottom:=round(PageHeight*0.4)

Right:=round(Bottom/ar)

end

OffsetRect(R,(PageWidth - Right) div 2, (PageHeight - Bottom) div 2)

end

with Printer do

begin

BeginDoc

Canvas.StretchDraw(R, EMF)

EndDoc

end

finally

EMF.Free

end

end


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11305241.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存