了解最新技术文章
TeeChart Pro VCL/FMX是主流的图表制作工具。为可视化提供了数百种2D、3D图形样式、56种数学、统计和金融函数,以及无限数量的坐标轴和30种调色板组件。TeeChart Pro VCL/FMX教程将以连载的形式继续带给您TeeChart Pro VCL/FMX使用方法。
TeeChart for .NET这个教程带给你的是TeeChart Pro VCL/FMX中图表面板上的自定义绘图部分,TeeChart通过TCanvas3D组件提供广泛的定制绘图设施。 使用Canvas,您可以在Chart Panel在图表面板的任何位置添加形状、线条和文本,并定义其颜色、笔和画笔风格。内容主要分为以下几个部分:
TeeChart Canvas绘图顺序和绘图线Canvas加2支笔和画笔D形状和3D文本应用实例高级自定义绘图组件概述TeeChart Canvas
绘画顺序
使用TeeChart的Canvas记住绘图顺序在方法上很重要。如果在图表上画一条线,然后添加一系列数据点,就会导致线透支。你可以把线放进去Series BeforeDrawValues让线显示在事件中Chart网格上方和Series下面可以把线代码放在下面;OnAfterDraw让线显示在事件中Series上方。
有四个主要的图表绘制事件:
OnBeforeDrawChart事件OnBeforeDrawAxes事件OnBeforeDrawSeries事件OnAfterDraw事件绘画线
在2D在图表中添加绘画线:
//Draw a Line diagonally from top left to bottom right //in the Chart Area of a 2D ChartWith Chart1, ChartRect dobegin //Move the pointer to the top left Chart point Canvas.MoveTo(Left,Top); //Draw the Line Canvas.LineTo(Right,Bottom);end;在正交三维图表上,由于三维正交的位移,轴位置将偏离图表区域,我们可以相应地移动线路:
//Draw a Line diagonally from top left to bottom right //in the Chart Area of a 3D ChartWith Chart1, ChartRect dobegin //Move the pointer to the top left Chart point Canvas.MoveTo(Left Width3D,Top - Height3D); //Draw the Line adjustment for 3D displacement Canvas.LineTo(Right Width3D,Bottom - Height3D);end;在3D Nativemode或OpenGL在图表上绘制相同的线(这也适用于2D和3D正交图):
//Draw a Line diagonally from top left to bottom right //in the Chart Area of a 3D Nativemode or OpenGL ChartWith Chart1,Canvas dobegin Pen.Color := clBlue; Pen.Width := 1; Pen.Style := psDot; //Pen must be 1 to use Pen.Style Brush.Style := bsClear; //transparency //Then draw the Line MoveTo3D(ChartRect.Left,ChartRect.Top,0); LineTo3D(ChartRect.Right,ChartRect.Bottom,Width3D);end;MoveTo3D和LineTo3D方法识别将完全使用3D应用的Elevation和Rotation而对ChartRect位移。
Canvas笔和画笔
上面呈现的线是在绘画线前绘制的最后一个对象时使用的笔和笔刷,这可能不是你想要的效果,你可以自己定义:
//Define Pen and Brush before drawing the LineWith Chart1,Canvas,ChartRect dobegin Pen.Color := clBlue; Pen.Width := 1; Pen.Style := psDot; //Pen must be 1 to use Pen.Style Brush.Style := bsClear; //transparency //Then draw the Line MoveTo(Left Width3D,Top - Height3D); LineTo(Right Width3D,Bottom - Height3D);end;添加2D形状和3D形状
以与Canvas Lines添加类似方法2D Canvas Shapes,在图表区域的中心添加以下示例Rectangle:
2D图表(3D正交图只支持2D形状)
With Chart1, Canvas dobegin //prepare Pen and Brush Pen.Color := clBlue; Pen.Width := 1; Pen.Style := psDot; Brush.Color := clWhite; Brush.Style := bsSolid; //You can draw a Rectangle on any Chart (2D or 3D) Rectangle(100,100,200,200);end;在3D也可以在Z平面上移动矩形。
With Chart1,Canvas,ChartRect dobegin //prepare Pen and Brush Pen.Color := clBlue; Pen.Width := 1; Pen.Style := psDot; Brush.Color := clWhite; Brush.Style := bsSolid; //Draw Rectangle with Z displacement RectangleWithZ(Rect(Left, Top, Left ((Right-Left) div 2), Top ((Bottom-top) div 2)), Width3D div 2);end;可以将3D形状添加到3D在图表中,在图表矩形顶部左象限中绘制多维数据集,深度覆盖从墙前到后墙的区域。
With Chart1,Canvas,ChartRect dobegin //prepare Pen and Brush Pen.Color := clBlue; Pen.Width := 1; Pen.Style := psDot; Brush.Color := clWhite; Brush.Style := bsSolid; Cube(Left, Left ((Right-Left) div 2), Top, Top ((Bottom-Top) div 2), 0, Width3D, True);end;添加文本
在2D可将文本添加到矩形中:
procedure TForm1.Button1Click(Sender: TObject);var rectLeft,rectTop,rectRight,rectBottom:Integer;begin With Chart1, Canvas, ChartRect do begin rectLeft:= Left; rectTop:= Top; rectRight:= Left (Right - Left) div 2; rectBottom:= Top (Bottom - Top) div 2; //prepare Pen and Brush Pen.Color := clBlue; Pen.Width := 1; Pen.Style := psDot; Brush.Color := clWhite; Brush.Style := bsSolid; //Draw the Rectangle Rectangle(rectLeft,rectTop,rectRight,rectBottom); //Modify Font Font.Color := clRed; //add the Text start at the midpoint of the Rectangle TextOut(rectLeft (rectRight - rectLeft) div 2, rectTop (rectBottom-rectTop) div 2, 'Hello'); end;end;在3D您可以在文本中使用它TextOut3D将文本放置在不同的3中的方法D平面中。
With Chart1, Canvas, ChartRect do begin Brush.Style := bsClear; TextOut3D(Left, Top, Width3D div 2, 'Hello'); end;应用实例
获取下面的示例Series在它们之间画一条直线,告诉我们第三和第十个值new Lin第一点和最后一点的值以及它们之间的差异:
'First add some data to the empty Chartprocedure TForm1.BitBtn1Click(Sender: TObject);begin Series1.FillSampleValues(20);end;//You could put this code in the OnAfterDraw eventprocedure TForm1.Chart1AfterDraw(Sender: TObject);begin With Chart1 do Begin If SeriesCount > 0 Then begin If Series1.Count > 10 Then begin //Add some Shapes Canvas.Pen.Color := clBlue; Canvas.Pen.Width := 1; Canvas.Pen.Style := psDot; Canvas.Brush.Style := bsClear; Canvas.MoveTo (Axes.Bottom.CalcXPosValue(Series1.XValues[3]), Axes.Left.CalcYPosValue(Series1.YValues[3])); Canvas.LineTo (Axes.Bottom.CalcXPosValue(Series1.XValues[10]), Axes.Left.CalcYPosValue(Series1.YValues[10])); Canvas.Brush.Style := bsSolid; Canvas.TextOut(Axes.Bottom.CalcXPosValue(Series1.XValues[3]), Axes.Left.CalcYPosValue(Series1.YValues[3]), 'Point value: ' + FloatToStr(Series1.YValues[3])); Canvas.TextOut(Axes.Bottom.CalcXPosValue(Series1.XValues[10]), Axes.Left.CalcYPosValue(Series1.YValues[10]), 'Point value: ' + FloatToStr(Series1.YValues[10])); Canvas.TextOut(Axes.Bottom.CalcXPosValue(Series1.XValues[10]), Axes.Left.CalcYPosValue(Series1.YValues[10]) + Canvas.TextHeight('Any letter'), 'Change is: ' + FloatToStr(Series1.YValues[10] - Series1.YValues[3])); end; end; end;end;高级自定义绘图
组件概述
几乎所有的TeeChart装置现在都使用TeCanvas装置,该单元是一个低级单元,提供封装在新TCanvas3D组件中的所有绘图功能。
如果使用TeeChart Canvas属性进行特殊的自定义绘图,则应将此单元添加到格式Uses中,使用它是安全的,因为除了普通的Delphi单元之外它没有依赖性。
TCanvas3D类
此Canvas派生类包含对3D旋转,缩放,滚动和3D基元的支持。它具有虚拟和抽象的所有方法,因此意味着您无法直接使用它,您应该使用实现所有方法和属性的派生类。
使用此Canvas,Chart组件现在可以支持插件画布,也就是说,您可以在设计时或运行时更改Chart1.Canvas属性,并且所有绘图都将重新定向到新的Canvas:
Chart1.Canvas := TGLCanvas.Create ; //<-- switches display to OpenGLTeeChart包括这些新的虚拟画布:
TTeeCanvas3DTGLCanvas(用于OpenGL渲染)一个新的虚拟Canvas很容易实现,您甚至可以创建一个TVRMLCanvas,它将生成一个包含VRML(虚拟现实)图形指令的ascii文件(或另一个保存到DXF,3DS等)。
这些画布适用于基类TCustomChart,因此它们适用于TChart,TDBChart,TQRChart或任何其他派生的Chart类。
注意:OpenGL DLL仅适用于32位Windows,因此也适用于GLCanvas。
TTeeCanvas3D类:
这是内部使用的虚拟TCanvas3D类的实现,它是标准Delphi TCanvas类的包装器。它有许多直接调用Windows GDI来加速绘图的工具,它增加了TCanvas3D的功能,如旋转,缩放等。它适用于所有Delphi和C ++ Builder版本。
TGLCanvas类:
此类驻留在单独的单元/包中,以使应用程序独立于OpenGL的DLL,它仅适用于32位Delphi(和C ++ Builder)。当使用TGLCanvas作为图表时,包括使用TeeGLEditor,图表编辑器将在运行时添加另一个页面以更改GL特征,例如灯光位置和颜色,要使OpenGL在设计时可用,请将TTeeOpenGL组件添加到Form,将其与Chart关联并设置为 Active:= True。
新的非可视组件(TTeeOpenGL),允许您在设计或运行时将现有图表连接到它,并立即看到使用OpenGL 3D库所呈现的图表,此组件还允许您定义OpenGL特定属性,如Lighting属性。
TTeeCanvas3D和TGLCanvas之间的比较:
OpenGL画布支持照明(灯光,灯光颜色,位置等),而TeeCanvas使用较暗的颜色绘制3D来模拟光照。 OpenGL画布不支持 metafile 创建,因此对于打印,应该创建一个大而胖的TBit ** p并将其发送到打印机Canvas,这意味着它只适用于具有良好内存和优良驱动程序的打印机,它无法创建, ** 到剪贴板,保存或打印metafile。 OpenGL画布需要OpenGL DLL(在Windows NT及更高版本中可用,以及http:// ** .sgi.com的替代库)。如果您的CPU和视频硬件良好,Silicon Graphics的OpenGL Dlls可能比Microsoft的更快。 OpenGL画布支持不同的字体大小和颜色,但它不支持多种字体样式,字体的所有字符都将转换为绘图指令,这占用了相当多的内存和CPU速度。
24小时免费咨询
请输入您的联系电话,座机请加区号