大侠们!用Delphi,如何读取excel里面的数据,并在chart控件里面画出曲线图?

大侠们!用Delphi,如何读取excel里面的数据,并在chart控件里面画出曲线图?,第1张

1、用ADOQuery连接EXCEL:

(1)设置ConnectionString属性:

选择“提供程序”为"Microsoft Jet 4.0 OLE DB

Provider",点击“下一步”按钮;

选择“全部文件(*.*)”,接着选择要连接的Excel文件;User name默认是Admin

密码默认为空,可以不用理会;

设置"所有"选项卡中“Extended Properties”为"Excel 8.0";

返回“连接”选项卡,按“测试连接”按钮,显示成功;

(2)设置ADOQuery的SQL属性连接数据表: select * From [Sheet1$];(根据实际设置)

(3)设置ADOQuery的Active属性为TRUE;

2、DBChart控件连接ADOQuery:

(1)DBChart加入一个图表:Chart--Series--Add;

(2)DBChart连接数据:Series--Data Source,先选择来源为Dataset,Dataset中选择ADOQuery1,然后设置相应的字段(X、Y等)。

试缩写示例代码供参考:

procedure TForm1.Button1Click(Sender: TObject)

var

  I:integer

  LineSeries:TLineSeries

  arrData: array[0..1] of array[0..99] of double

begin

  //生成2维测试数组

  for i := 0 to 99 do

  begin

    arrData[0,i] := i

    arrData[1,i] := 100 * sin(i)*cos(4*i)

  end

  //添加折线图

  LineSeries:=TLineSeries.Create(chart1)

  LineSeries.ParentChart:=chart1

  for I:=0 to 99 do

     LineSeries.AddXY(arrData[0][I],arrData[1][I])

  Chart1.SeriesList.Clear

  chart1.SeriesList.Add(LineSeries)

  Chart1.Title.Caption := '折线图'

end

代码运行效果截图:

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

************************************** SGraph控件在Delphi7下的安装SGraph控件在Delphi7下的安装

SGRAPH是一个DELPHI环境下绘制X-Y座标图的免费构件,提供缩放图形等功能。作者 : Sergei P.Pod'yachev。

[海阔天空下载站]

http://www.hktk.com/soft/soft_con_image/sgraph.html

32 Bit Delphi 深度历险

http://www.vclxx.org/DELPHIGB/AAAT1025.HTM

( 2.40 版,附源码 )

以上网站提供下载。

由于该控件只提供D3、D4、D5版本,在D7下成功安装使用需要一些改动,下面把我的经验告诉大家:

1、下载压缩包SGRAPH.ZIP解压后,将以下文件COPY到C:\Program Files\Borland\Delphi7\Lib(Delphi7的安装目录)文件夹内:

sgr5.dpk

sgr_data.pas

sgr_def.pas

sgr_eds.pas

sgr_mark.pas

sgr_misc.pas

sgr_reg.pas

sgr_scale.pas

sgr_reg.dcr

2、打开D7,FILES/CLOSE ALL

3、FILES/OPEN

打开C:\Program Files\Borland\Delphi7\Lib\sgr5.dpk

出现一个Error错误对话框:

Cannot find resource file:C:\Program Files\Borland\Delphi7\Lib\sgr5.res.Recreated.

(找不到sgr5.res资源文件,重建)

点击OK.

4、出现Package-sgr5.dpk(包编译安装窗口)

5、出现一个Confirm窗口

This package appears to be in an older format. Would you like to convert it to the new format?

<Yes><No>

(这个包用更旧的格式。 你愿意把它转化成新格式式吗?)

选择<Yes>

出现一个Information

Update complete.<OK>

6、Package-sgr5.dpk(包编译安装窗口)点击Compile(编译)

打开sgr_data.pas

出现很多

[Error] sgr_data.pas(277): Undeclared identifier: 'VarArrayCreate'

[Error] sgr_data.pas(279): Undeclared identifier: 'VarArrayHighBound'

[Error] sgr_data.pas(335): Undeclared identifier: 'VarArrayHighBound'

......

Undeclared identifier: '<name>' 未说明的标识符<NAME>

Undeclared identifier: 'VarArrayCreate(未说明的标识符'VarArrayCreate')

解决办法:在sgr_data.pas的use部分加入Variants

uses

Windows,SysUtils,Classes,Graphics,

sgr_scale, sgr_def,Variants

然后Project/Syntax Check sgr5(语法检查),就不会报错了。再在Package-sgr5.dpk(包编译安装窗口)点击Compile(编译),也不会报错了

7、在Package-sgr5.dpk(包编译安装窗口)点击install(安装)

出现一个Information

Package C:\Program Files\Borland\Delphi7\projects\Bpl\sgr5.bpl has installed.

(C:\Program Files\Borland\Delphi7\projects\Bpl\sgr5.bpl包已经被安装)

The following new component(s) have been registered:

sgr_data.Tsp_SpectrLines,

sgr_data.Tsp_XYLine,

sgr_def.Tsp_XYPlot,

sgr_eds.Tsp_ndsXYLines,

sgr_mark.Tsp_ImageMarker,

sgr_mark.Tsp_LineMarker.

<OK>

点击<OK>安装完成。

8、FILES/CLOSE ALL关闭当前活动窗口

出现一个Confirm

Save changes to project sgr5?

<Yes><No><Cancel>

当然是<Yes>

在D7的组件页中看到最后一页增加为Sgraph,里面为新增加的6个Sgraph控件。

*******************************************************放上TCHART以后,Unit1中隐含创建Series1(TFastLineSeries)

For I :=1 To 显示点数 Do

Series1.Add(0)

然后用数据采集事件(或定时)触发:

Series1.AddXY(Series1.XValues.Last+1,“AD的值”,“X坐标标注(可缺)”,“颜色(可缺)”)

把Series中的各个Point顺序向前平移:

For index := 0 to Series1.Count-2 do

Series1.yValues.Value[Index] := Series1.yValues.Value[Index+1]

同时:Series.Delect(0)删除原第一Point,


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

原文地址:https://54852.com/bake/11502382.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存