提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|使用教程|编辑:况鱼杰|2019-11-04 14:02:12.327|阅读 695 次
概述:本教程转自屈景辉的Teechart应用技术详解——快速图表制作工具一书,本文将会介绍此书的第三章图表与序列的操作维护的第五小节:如何在图表上自行绘制。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
Steema公司和慧都科技针对中国市场联合推出中文版TeeChart for .NET图表控件,一共汉化2000个词条(17000个单词),汉化文档35000个单词,包括控件设计时与运行时的界面汉化以及控件使用向导文档的汉化,总汉化90%以上!
TeeChart for .NET中文版让您在使用和学习上没有任何语言障碍,至少可以节省30%的开发时间。TeeChart for .NET中文版具有易上手,使用方便,稳定性好,性价比高,价格优惠等优势,并且针对Web应用提供无限制服务器分发授权方式,非常有利于产品集成。
在图表上自行绘制
如果想增加与图表轴相关联的文本框或其他形状, TShapeSerie序列是最好的选择,如果这个满足不了用户的要求,就可以在图表上绘制各种形状。TeeChart提供了通过坐标轴或屏幕像素访问图表区域的能力这里主要介绍如何将点坐标转换到像素坐标以及如何精确定义图表组件中的每个图形元素。
为了建立数值与坐标间相互转换的关系,图表轴( ChartAxis)和序列组件提供了CalcPosValue、CalcSizeValue、CalcYPos、CalcXpos、XScreenToValue和YScreenToValue等函数,进行屏幕坐标(像素)与数值间的转换,使用户可以根据窗口的X、Y坐标得出该点位置所代表的数值,或者由具体的数值得出该值在窗口的位置坐标X、Y。
轴的值转换到屏幕坐标
CalcPosValue:计算给定的值在屏幕的位置,可以使用任一坐标轴
Var MyPos: Integer; MyPos:= Chart1. LeftAxis. CalcPosValue(100.0 );
MyPos保存着值1000在 Chart1, LeftAxis轴上的像素坐标,使用这个坐标就可以自行绘制当前这个点。如果想将像素坐标转换到轴的值,可以使用下面的函数。
● CalcPosPoint
var MyValue:Double MyValue :=Chart1. LeftAxis. CalcPosPoint(100 );
MyValue中保存着100屏幕像素坐标在坐标轴上的值。屏幕坐标从0开始,(0,0)是图表圆点。在直接绘制到元文件、用户定义画布或打印时,图表原点是不同的。
CalcSizeValue:该函数计算屏幕空间在巫标轴上的范围。
Var Space : Integer; Space : =Chart1. LeftAxis.CalcSizeValue(1000);
还可将时间轴转换一个日期范围周期:
Var Space: integer; Space :=Chart1. BottomAxis. CalcSizeValue( EncodeDate(2000, 12, 31)-Encode Date(2000,1,1)); EncodeDate(2000,12,31)-EncodeDate(2000,1,1);
CalcYPos和CalcXpos:当使用CalcYPos和CalcXpos绘制时坐标原点(0,0)是图表矩形( ChartRect)的左上角。ChartRect是由图表四个轴构成的封闭区域。下面的例子是利用画布特性画一条线段:
procedure TForm1. Button1Click(Sender: TObject); var MyHalfwayPoint, YPosition: Integer; Begin With Series1. YValues do MyHalfwayPoint: -round(((MaxValue-MinValue)*0. 5)+ MinValue); //计算上述值的屏幕像素坐标 YPosition:=DBChart1.LeftAXis, CalcYPosValue(MyHalfwayPoint); With DBChart1.Canvas do begin Pen.Width: =3; Pen.Style: =psSolid; Pen.Color: =clBlack; With DBChart1 do begin MoveTo(ChartRect. Left, YPosition); LineTo(ChartRect. Left+Width3D, YPosition-Height3D); LineTo( ChartRect.Right+Width3D, YPosition-Height 3D); end; end; end;
序列的值转换到屏幕坐标
序列也有类似转换坐标到点值的方法,其不同之处是使用序列提供的方法,而不需要知道轴的精确位置。
CalcPosValue:这段代码计算Series的值为1000时,序列在屏幕的位置。
Var Mypos: Integer; Mypos : =Series1. CalcPosValue(1000);
或者:
MyYPos:=Series1.CalcPosValue( Series1.YValue[0]);//第一个点
CalcXPos和 CalcY Pos:计算一个指定的点或值的X、Y坐标。
MyXPos : =Series1.CalcXPos(EncodeDate(2000, 12, 31));
或者:
MyXPos : =Series1.CalcXPos(Series1.XValues.Last ); //最后一个点
XScreenToValue和YScreenTovalue:从屏幕像素转换到点的值。
Var MyValue:Double; MyValue : =Series1.YScreenToValue(Y);
利用这个方法可以使用 Series.Clicked功能,给出一对XY坐标,就可以得到点的值。
图表画布( Chart Canvas)
Chart.Canvas是一个标准的Delphi画布,使用画布特性可以控制图表的外观。
写画布( Writing to the Canvas)
下面的代码将画布的背景划分为5个区域,并根据颜色数组着色:
procedure TDrawForm.LineSeries1BeforeDrawValues(Sender: Tobject); Const MyColors:array 1..5] of TColor (clNavy, clGreen, clYellow, clRed, S00000080); var t, partial: Integer; tmpRect:TRect; With Chart1 do Begin tmpRect: =ChartRect; tmpRect. Right: =tmpRect .Left; partial: =ChartWidth div 5; //划分为5部分 Canvas.Brush.Style:=bsDiagCross;//改变刷子风格 Canvas.Pen.Style: =psClear; for t:=1 to 5 do //每部分填充不同的颜色 Begin tmpRect.Right:=tmpRect.Right+partial+1;//调节矩形的维数 Can Right+Width3D, Bottom-Height3D); tmpRect. Left:=tmpRect.Right; //调节矩形 end; end; end;
内部位图( Internal Bitmap)
TChart组件有一个内部位图对象,作为一个隐含的缓冲区,当绘制完成后,缓冲区被复制到屏幕视频区域后显示。TChart的Canvas属性返回一个内部位图画布对象。在Chart绘制到内部位图以后,它被拷贝到屏幕画布,Chart的Canvas属性引用这个最初的“真”的图表画布。
图表区域( Chart Regions)
通过调用 Chart1.Invalidate或Series1.Repaint可以强行重新绘制。围绕图表的最大矩形区域是 ChartBounds属性,ChartWidth、ChartHeight、ChartXCenter和ChartYCenter是基于ChartBounds属性的合适的坐标。坐标轴被绘制在这个空间里, ChartRect属性返回由轴限制的矩形区域内(2D和3D相同)。
图表的图例有一个RectLegend全局属性,定义了图例的矩形范围。图表的标题和页角有一个TitleRect全局属性定义了标题和页角所在的矩形区域。图表的Width3D和Hight3D(像素)是3D深度的维数, SeriesWidth3D和SeriesHeight3D是图表中每个序列的维数。
绘制( Drawing)
下面是绘制的一个例子,这个例子在Chart1的中间绘制一条水平线:
procedure TForm1. Chart1AfterDraw(Sender: Tobject); begin With Chart1 do begin Canvas.Pen.Color:=clYellow; Canvas.MoveTo(ChartBounds.Left, ChartYCenter ); Canvas.LineTo(ChartBounds.Right, ChartYCenter); end; end;
在坐标轴空间内绘制:
procedure TForm1, Chart1AfterDraw(Sender:TObject); begin Canvas.Pen.Color:=clYellow; Canvas.MoveTo(ChartRect.Left, ChartYCenter ); Canvas.LineTo(ChartRect.Right, ChartYCenter); end; end;
在序列Series1的每个点绘制一条线段:
procedure TForml.Series1AfterDrawValues(Sender: Tobject); var t, x, y : Integer; begin for t:=0 to Series1. Count -1 do begin x:=Series1. CalcXPos(t); y:=Series1. CalcYPos(t); Chart1.Canvas. MoveTo(x-8,y-8); Chart1.Canvas. LineTo(x+8, y+8); end; end;
绘制文本( Drawing Text)
如果想在屏幕显示、打印的字体尺寸和元文件的字体尺寸相同的话,可以总是设置Chart1.Canvas.Font.Height为负值,而无需使用 Font.Size设定字体的尺寸。也就是说,为了避免屏幕显示、打印和绘制到元文件的字体不一致,只需将 Chart1.Canvas.Font.Height设为负值,而不要去设置字体的尺寸。
下一节我们将会介绍第三章图表与序列的操作维护:点击事件。如果有对Teechart图表感兴趣的朋友,可以多多关注本教程,并且欢迎在评论区留言。
相关资料推荐:
上一章:图表的放大和滚动
现TeeChart for .NET,TeeChart for JavaScript/HTML5,TeeChart for Xamarin.Android等均已加入在线订购,现在抢购可立享优惠!
关注慧聚IT微信公众号☟☟☟,了解产品的最新动态及最新资讯。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
交互性强的轻量级ActiveX图表控件,能高效生成多任务仪表板
TeeChart Pro VCL/FMX支持RAD Studio,Delphi和C ++ Builder以及FireMonkey的图表制作工具
TeeChart for Java适用于所有主流Java编程环境的TeeChart图表库
TeeChart for PHP一款含100%的PHP源代码并支持PHP5及更高的版本的图表开发工具
TeeChart for .NET优秀的工业4.0 WinForm图表控件,官方独家授权汉化,集功能全面、性能稳定、价格实惠等优势于一体
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢