Delphi如何使用基本的绘图函数绘制统计图
- 格式:doc
- 大小:48.50 KB
- 文档页数:8
Graphics 单元中的类//Graphics 单元中的类TGraphicsObjectTFontTPenTBrushTFontRecallTPenRecallTBrushRecallTCanvasTGraphicTPictureTMetafileCanvasTMetafileImageTMetafileTBitmapImageTBitmapTIconImageTIconTResourceManagerTBrushResourceManagerTFileFormatsListDelphi 的绘图功能[1] - TCanvas 的类成员//过程:ArcBrushCopyChordCopyRectDrawDrawFocusRectEllipseEllipseFillRectFloodFillFrameRectDelphi 的绘图功能[3] - 矩形类图形unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;Button3: TButton;Button4: TButton;Button5: TButton;procedure FormCreate(Sender: TObject);procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure Button4Click(Sender: TObject);procedure Button5Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}varbtn: TButton;consty1 = 10;y2 = 80;{先设置画笔画刷}procedure TForm1.FormCreate(Sender: TObject);beginCanvas.Pen.Width := 4;Canvas.Pen.Color := clRed;Canvas.Brush.Color := clWhite;end;{给出左上角和右下角的坐标就可以绘制矩形}procedure TForm1.Button1Click(Sender: TObject);beginbtn := TButton(Sender);Canvas.Rectangle(btn.Left, y1, btn.Left+btn.Width, y2);end;{给出一个矩形结构做参数也可以绘制矩形}procedure TForm1.Button2Click(Sender: TObject);varR: TRect; {定义一个矩形结构}beginbtn := TButton(Sender);R := Rect(btn.Left, y1, btn.Left+btn.Width, y2);Canvas.Rectangle(R);end;{绘制圆角矩形; 最后两个参数是设置圆角的}procedure TForm1.Button3Click(Sender: TObject);beginbtn := TButton(Sender);Canvas.RoundRect(btn.Left, y1, btn.Left+btn.Width, y2, 20,20); end;{绘制焦点矩形; 它不受画笔的影响; 它的颜色是和画刷的颜色进行某种运算得来的} procedure TForm1.Button4Click(Sender: TObject);varR: TRect;beginbtn := TButton(Sender);R := Rect(btn.Left, y1, btn.Left+btn.Width, y2);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure Button4Click(Sender: TObject);procedure Button5Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}varbtn: TButton;consty1 = 10;y2 = 80;{先设置画笔画刷}procedure TForm1.FormCreate(Sender: TObject);beginCanvas.Pen.Width := 2;Canvas.Pen.Color := clRed;Canvas.Brush.Color := clWhite;end;{绘制椭圆; 椭圆的参数和矩形是一样的}procedure TForm1.Button1Click(Sender: TObject);beginbtn := TButton(Sender);Canvas.Ellipse(btn.Left, y1, btn.Left+btn.Width, y2); end;{根据矩形结构绘制椭圆}procedure TForm1.Button2Click(Sender: TObject);varR: TRect; {定义一个矩形结构}beginbtn := TButton(Sender);R := Rect(btn.Left, y1, btn.Left+btn.Width, y2);Canvas.Ellipse(R);end;{绘制扇形}procedure TForm1.Button3Click(Sender: TObject);beginbtn := TButton(Sender);Canvas.Pie(btn.Left, y1, {矩形区域左上角} btn.Left + btn.Width, y2, {矩形区域右下角} btn.Left + btn.Width, y1 + (y2-y1) div2, {扇形起点}btn.Left + btn.Width div2, y1 {扇形终点});end;{绘制弦, 参数同上}procedure TForm1.Button4Click(Sender: TObject);beginbtn := TButton(Sender);Canvas.Chord(btn.Left, y1,btn.Left + btn.Width, y2,btn.Left + btn.Width, y1 + (y2-y1) div2,btn.Left + btn.Width div2, y1);end;{绘制弧线, 参数同上}procedure TForm1.Button5Click(Sender: TObject);beginbtn := TButton(Sender);Canvas.Arc(btn.Left, y1,btn.Left + btn.Width, y2,btn.Left + btn.Width, y1 + (y2-y1) div2,btn.Left + btn.Width div2, y1);end;Delphi 的绘图功能[6] - Polygon、Polylineunit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;procedure FormCreate(Sender: TObject);procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);beginCanvas.Pen.Width := 2;Canvas.Pen.Color := clRed;Canvas.Brush.Color := clYellow;end;{绘制多边形; 它的参数是一个点数组, 这里定义了一个常数数组}procedure TForm1.Button1Click(Sender: TObject);constpts: array[0..3] of TPoint = (Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}{PolyBezier 至少需要四个点做参数; 不改变画笔的当前位置}procedure TForm1.Button1Click(Sender: TObject);varpts: array[0..3] of TPoint;beginCanvas.Pen.Width := 2;Canvas.Pen.Color := clRed;pts[0].X := 10; pts[0].Y := 10; {起点}pts[1].X := 60; pts[1].Y := 10; {控制点1}pts[2].X := 10; pts[2].Y := 100; {控制点2}pts[3].X := 60; pts[3].Y := 100; {终点}Canvas.PolyBezier(pts);Canvas.Pen.Width := 1;Canvas.Pen.Color := clWhite;Canvas.LineTo(ClientWidth, ClientHeight);end;{PolyBezierTo 最少只需要需要三个点, 它把当前位置当作第一点; 会改变画笔的当前位置} procedure TForm1.Button2Click(Sender: TObject);varpts: array[1..3] of TPoint; {从 1 开始的, 就 3 个元素}beginCanvas.Pen.Width := 2;Form1: TForm1;implementation{$R *.dfm}{PolyBezier 绘制多条线时, 需要 3*x + 1 个点} procedure TForm1.Button1Click(Sender: TObject); varpts: array[0..6] of TPoint;beginCanvas.Pen.Width := 2;Canvas.Pen.Color := clRed;pts[0].X := 10; pts[0].Y := 10;pts[1].X := 60; pts[1].Y := 10;pts[2].X := 10; pts[2].Y := 100;pts[3].X := 40; pts[3].Y := 100;pts[4].X := 100; pts[4].Y := 10;pts[5].X := 55; pts[5].Y := 99;pts[6].X := 70; pts[6].Y := 10;Canvas.PolyBezier(pts);end;{PolyBezierTo 绘制多条线时, 需要 3*x 个点}procedure TForm1.Button2Click(Sender: TObject); varpts: array[1..6] of TPoint;beginCanvas.Pen.Width := 2;Canvas.Pen.Color := clRed;Canvas.MoveTo(10 + 82, 10);//pts[0].X := 10; pts[0].Y := 10;pts[1].X := 60 + 82; pts[1].Y := 10;pts[2].X := 10 + 82; pts[2].Y := 100;pts[3].X := 40 + 82; pts[3].Y := 100;pts[4].X := 100 + 82; pts[4].Y := 10;pts[5].X := 55 + 82; pts[5].Y := 99;pts[6].X := 70 + 82; pts[6].Y := 10;Canvas.PolyBezierTo(pts););{参数三是 TTextFormat 类型的集合, 它定义如下:}TTextFormat = set of TTextFormats;{TTextFormats 是个枚举, 定义如下}TTextFormats = (tfBottom, tfCalcRect, tfCenter, tfEditControl, tfEndEllipsi s,tfPathEllipsis, tfExpandTabs, tfExternalLeading, tfLeft, tfModifyString, tfNoClip, tfNoPrefix, tfRight, tfRtlReading, tfSingleLine, tfTop,tfVerticalCenter, tfWordBreak);{所以参数三可以是下列值之一或它们的组合}tfBottomtfCalcRecttfCentertfEditControltfEndEllipsistfPathEllipsistfExpandTabstfExternalLeadingtfLefttfModifyStringtfNoCliptfNoPrefixtfRighttfRtlReadingtfSingleLinetfToptfVerticalCentertfWordBreak//这个函数是 API 函数 DrawTextEx 的简化, 可以参见: DrawTextEx//第二种重载的举例1:{默认是顶对齐、左对齐; 前两个参数都是传址的, 不能用常量}procedure TForm1.FormPaint(Sender: TObject);varR: TRect;constS = '万一的 Delphi 博客';begin := '微软雅黑';Canvas.Font.Style := [fsBold, fsItalic];Canvas.Font.Color := clRed;Canvas.Font.Height := 72;Canvas.TextOut(10, 10, S);end;//TFont 类的常用属性:{Name: 字体名称}{Color: 颜色}{Size、Height: 字号与字体高度, 都可以设定字体大小}{Style: 字体样式; 是个集合值, 是下面可选值或它们的组合:} fsBoldfsItalicfsUnderlinefsStrikeOut{Pitch: 是字间距相关的, 有三个枚举值可选(不过我没测试出效果):} fpDefaultfpVariablefpFixed{Charset: 字符集, 是个整数, 可能的值有:}ANSI_CHARSET = 0;DEFAULT_CHARSET = 1;SYMBOL_CHARSET = 2;SHIFTJIS_CHARSET = 128;HANGEUL_CHARSET = 129;GB2312_CHARSET = 134;CHINESEBIG5_CHARSET = 136;OEM_CHARSET = 255;Shift: TShiftState; X, Y: Integer);end;varForm1: TForm1;implementation{$R *.dfm}varx1,y1,x2,y2: Integer; {直线两个端点的坐标}f: Boolean; {判断鼠标是否点下}procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);beginx1 := X; y1 := Y;x2 := X; y2 := Y;Canvas.Pen.Color := clRed;Canvas.Pen.Width := 2;Canvas.Pen.Mode := pmXor;f := True;end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);beginif f thenbegin{擦除}Canvas.MoveTo(x1, y1);Canvas.LineTo(x2, y2);x2 := X; y2 := y;{重绘}Canvas.MoveTo(x1, y1);Canvas.LineTo(x2, y2);end;end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);ShowMessage(Format('宽度: %d; 高度: %d', [w,h])); {宽度: 24; 高度: 13}{如果字号改变了, 当然高度与宽度也会随之变化}Canvas.Font.Size := 16;wh := Canvas.TextExtent(str);w := wh.cx;h := wh.cy;ShowMessage(Format('宽度: %d; 高度: %d', [w,h])); {宽度: 42; 高度: 25}{Font.Height 是可读写的}Canvas.Font.Height := 32;wh := Canvas.TextExtent(str);w := wh.cx;h := wh.cy;ShowMessage(Format('宽度: %d; 高度: %d', [w,h])); {宽度: 52; 高度: 32}end;posted on 2008-02-18 22:32 万一阅读(474) 评论(0)编辑收藏所属分类: Delphi 的绘图功能把窗体客户区图像保存到文件或剪切板unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;Button3: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}uses Clipbrd; {剪切板单元}//把窗体客户区保存为图片procedure TForm1.Button1Click(Sender: TObject);varbit: TBitmap;beginbit := TBitmap.Create;bit := Self.GetFormImage;bit.SaveToFile('c:\temp\img1.bmp');bit.Free;end;//用一句话完成上一个过程procedure TForm1.Button2Click(Sender: TObject); beginSelf.GetFormImage.SaveToFile('c:\temp\img2.bmp'); end;//把窗体客户区图像复制到剪切板procedure TForm1.Button3Click(Sender: TObject);varFormat: Word;Data: Cardinal;APalette: HPALETTE;begin{TBitmap.SaveToClipboardFormat 函数的三个参数都是接受数据用的, 按要求类型定义即可}GetFormImage.SaveToClipboardFormat(Format, Data, APalette);{放入剪切板}Clipboard.SetAsHandle(Format, Data);end;end.捕捉全屏图像unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}//捕捉全屏幕图像并保存到: c:\temp\Screen.bmpprocedure TForm1.Button1Click(Sender: TObject);varbit: TBitmap;TForm1 = class(TForm)Button1: TButton;Button2: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}//把文字输出到屏幕procedure TForm1.Button1Click(Sender: TObject);varcvs: TCanvas;Rect: TRect;Str: string;begincvs := TCanvas.Create;cvs.Handle := GetDC(0);SetBkMode(cvs.Handle, TRANSPARENT);// := '宋体';cvs.Font.Style := [fsBold, fsItalic];cvs.Font.Size := 48;Randomize;cvs.Font.Color := Random($FFFFFF);Rect := Screen.DesktopRect;Str := '万一的 Delphi 博客';cvs.TextRect(Rect, Str, [tfSingleLine, tfCenter, tfVerticalCenter]); cvs.Free;end;//刷新显示procedure Button4Click(Sender: TObject);procedure Button5Click(Sender: TObject); end;varForm1: TForm1;implementation{$R *.dfm}//使用 API 函数: SetRectprocedure TForm1.Button1Click(Sender: TObject); varR: TRect;beginSetRect(R, 20, 20, 80, 80);Canvas.Pen.Color := clBlue;Canvas.Rectangle(R);end;//使用 Classes.Rect 函数procedure TForm1.Button2Click(Sender: TObject); varR: TRect;beginR := Rect(20, 20, 80, 80);Canvas.Pen.Color := clFuchsia;Canvas.Rectangle(R);end;//使用 Classes.Rect 函数, 用两个点合成procedure TForm1.Button3Click(Sender: TObject); constpt1: TPoint = (x:20; y:20);pt2: TPoint = (x:80; y:80);varR: TRect;beginR := Rect(pt1, pt2);Canvas.Pen.Color := clSkyBlue;Canvas.Rectangle(R);end;//矩形常量procedure TForm1.Button4Click(Sender: TObject);constR: TRect = (Left:20; Top:20; Right:80; Bottom:80); beginCanvas.Pen.Color := clTeal;Canvas.Rectangle(R);end;//使用 Classes.Bounds 函数, 我最喜欢这种办法procedure TForm1.Button5Click(Sender: TObject);varR: TRect;beginR := Bounds(20, 20, 60, 60);Canvas.Pen.Color := clWhite;Canvas.Rectangle(R);end;end.使用System.Sin、System.Cos 函数画圆- 绘制五环图标本例效果图:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;procedure FormCreate(Sender: TObject);procedure FormMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);procedure Button1Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}const{把五环的颜色定义为常量数组}Colors: array[0..4] of TColor = (clBlue, clBlack, clRed, clYellow, clGree n);varci: Integer; {用作颜色序号}procedure TForm1.FormCreate(Sender: TObject);beginButton1.Caption := '重绘';Self.Color := clWhite;Canvas.Pen.Width := 5;end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);constr = 30; {圆半径}varradian: Double; {记录弧度; Sin、Cos 函数需要弧度做参数; 弧度 = 角度 * Pi/180} i,a,b: Integer;beginCanvas.MoveTo(X, Y-r);Canvas.Pen.Color := Colors[ci];for i := 1to360dobeginradian := i * (Pi/180); {获取弧度}a := X + Round(Sin(radian) * r); {用 Sin 函数获取横坐标}b := Y - Round(Cos(radian) * r); {用 Cos 函数获取纵坐标}Canvas.LineTo(a, b); {绘制}Application.ProcessMessages; {不要影响其他操作}Sleep(3); {等 3 毫秒}end;Inc(ci);if ci = 5then ci := 0;end;{$R *.dfm}constBoolArr: array[Boolean] of string = ('余弦曲线', '正弦曲线'); varf: Boolean = True;procedure TForm1.FormClick(Sender: TObject);beginf := not f;Repaint;end;procedure TForm1.FormPaint(Sender: TObject);varx: Integer;y,radian: Double;beginCanvas.Pen.Width := 2;Canvas.Pen.Color := clRed;Canvas.MoveTo(0, ClientWidth div2);for x := 0to ClientWidth dobeginradian := x / ClientWidth * 4 * pi;if f then y := Sin(radian) else y := Cos(radian);y := (1-y) * ClientHeight / 2;Canvas.LineTo(Round(x), Round(y));end;Text := BoolArr[f];end;end.两个CopyRectprocedure Button1Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}procedure TForm1.PaintBox1Paint(Sender: TObject);beginPaintBox1.Canvas.Brush.Color := clWhite;PaintBox1.Canvas.FillRect(PaintBox1.BoundsRect);PaintBox1.Canvas.MoveTo(0, 0);PaintBox1.Canvas.LineTo(PaintBox1.Width, PaintBox1.Height);PaintBox1.Canvas.MoveTo(PaintBox1.Width, 0);PaintBox1.Canvas.LineTo(0, PaintBox1.Height);end;procedure TForm1.PaintBox2Paint(Sender: TObject);beginPaintBox2.Canvas.Brush.Color := clGreen;PaintBox2.Canvas.Ellipse(0, 0, PaintBox2.Width, PaintBox2.Height); end;procedure TForm1.Button1Click(Sender: TObject);varR1,R2: TRect;beginR2 := PaintBox2.BoundsRect;{Windows.CopyRect}CopyRect(R1, R2); //相当于: R1 := R2;Align = alClientOnPaint = PaintBox1Paint ExplicitLeft = 32ExplicitTop = 24ExplicitWidth = 105ExplicitHeight = 105endendobject Panel2: TPanelLeft = 183Top = 8Width = 130Height = 105Caption = 'Panel2'TabOrder = 1object PaintBox2: TPaintBox Left = 1Top = 1Width = 128Height = 103Align = alClientOnPaint = PaintBox2Paint ExplicitLeft = 16ExplicitTop = 0ExplicitWidth = 105ExplicitHeight = 105endendobject Button1: TButtonLeft = 212Top = 128Width = 75Height = 25Caption = 'Button1'TabOrder = 2OnClick = Button1Clickendend。
Delphi使⽤OpenGL2d绘图之画图⽚Bmp的⽅法⼀、前⾔:对于Delphi来说,要画图⽚要先处理⼀下,需要引⽤别的单元,⽽Delphi中没带,需要另外下载Gl.pas。
⽹上常见⾃带的OpenGl单元封装的是1.0版的,有此函数未声明。
⽹上可以找到Gl.pas单元。
另外需要⼀个Glaux.pas单元与glaux.dll,是辅助库。
在本⽂最后会提供下载。
⼆、实现流程:绘画图⽚需要以下⼏个流程。
Window本⾝的绘图是以位图为基础的,png,jpg等,绘画时,可以转为bmp再画。
1.加载bmp图⽚:使⽤auxDIBImageLoadA或其他函数2.转换为纹理:glGenTextures -> glBindTexture -> glTexImage2D, glTexParameteri⽤于设置相关参数3.绘制纹理:glBindTexture -> glBegin(GL_QUADS) -> glTexCoord2f -> glVertex2f -> glEnd三、利⽤glDrawPixels函数绘图glDrawPixels共有如下5个参数:width: 表图像的宽度height: 表图像的⾼度format:表图像的数据存储格式atype: 未知pixels: DIB数据的指针⽰例代码如下:procedure TForm1.Draw;varBmp: TBitmap;beginBmp := TBitmap.Create;Bmp.LoadFromFile(ExtractFilePath(ParamStr(0)) + '1.bmp');// 清空缓冲区glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);// TBitmap的图像数据在内存中是按⾏倒序连续存放的,通过TBitmap.ScanLine[TBitmap.Height-1]可以取得⾸地址即图像缓冲区地址// bmp图⽚的颜⾊是按b g r存储的,所以要选 GL_BGR_EXT做为参数glDrawPixels(Bmp.Width, Bmp.Height, GL_BGR_EXT, GL_UNSIGNED_BYTE, Bmp.ScanLine[Bmp.Height - 1]);SwapBuffers(FDC);Bmp.Free;end;⽤以上⽅法绘制图⽚不需要启⽤纹理映射,可以通过glPixelZoom函数来缩放图⽚,显⽰位置在窗⼝的左下⾓(暂时不知道如何改变图像位置。
Delphi常用函数手册函数由一句或多句代码组成,可以实现某个特定的功能。
使用函数可以使代码更加易读、易懂,加快编程速度及减少重复代码。
过程与函数类似,过程与函数最重要的区别在于,过程没有返回值,而函数能有返回值。
在Delphi7.0中,已为我们定义好了非常多的函数,大致分类有6种:数据类型转换函数、字符串、数组操作函数、文件、磁盘操作函数、内存、指针操作函数、数学运算函数、日期函数。
在Delphi中调用函数,一般情况下可以直接使用函数即可,但由于有一些函数未包含在Uses中列出的单元中(默认单元有Windows,Messages,SysUtils,Variants,Classes,Graphics, Controls,Forms,Dialogs;),所以需要我们手动添加单元。
比如,MidStr函数就未包含在这些单元中,MidStr所属单元在StrUtils中,因此我们将StrUtils 添加Uses中即可。
在本手册中,凡是未包含在默认列出的单元中的函数,都标明了其所属的单元,使用时应当注意。
一、数据类型转换函数在我们编写程序当中,根据不同情况,会使用到多种数据类型。
当要对不同的类型进行操作时,必须要将不同的类型转换成同样的类型。
因此熟练地掌握数据类型的转换是非常重要的。
1.FloatToStr功能说明:该函数用于将“浮点型”转换成“字符型”。
参考实例:Edit1.Text:= FloatToStr(1.981);2.IntToStr功能说明:该函数用于将“整数型”转换成“字符型”。
参考实例:S := IntToStr(10);(注:S为String类型变量。
)3.IntToHex功能说明:该函数用于将“十进制”转换成“十进制”。
该函数有二个参数。
第一个参数为要转换的十进制数据,第二个参数是指定使用多少位来显示十六进制数据。
参考实例:Edit1.Text :=IntToHex('100', 2);执行结果,Edit1.Text等于64。
Delphi中的TChart使用用法2009 Delphi中的TChart使用用法2009-08-26 19:231、TChart Hello world放一个控件到窗体上,然后写代码加入一个折线数据序列:varSeries: TLineSeries;beginSeries := TLineSeries.Create(Chart1);Series.Add(100, '头部', clRed);Series.Add(200, '颈部', clGreen);Chart1.AddSeries(Series);end;这样就会生成一个简单的折线图表,要生成其它类型的数据图表,可以添加不同的数据序列(各种图表的序列类型可以参考帮助文档)。
2.如何设置图表的标题?TChart 组件提供了Title属性可以这是图表的标题,包括标题的内容、字体、对齐方式等都可以通过Title属性设置。
最简单的设置方式:Chart1.Title.Text.Text := '图表的标题';3.如何修改图表的背景颜色和整个图表的颜色?TChart是一个窗体控件,可以通过修改Color属性设置图表颜色,这是一种最简单的方式:Chart1.Color := clWhite;修改图表部分的背景色可以通过BackColor属性来实现:Chart1.BackColor := clGreen;此外,TChart还提供了渐变的背景支持,通过Gradient控制:Chart1.Gradient.Visible := True;Chart1.Gradient.Direction := gdFromTopLeft;Chart1.Gradient.StartColor := clGreen;Chart1.Gradient.EndColor := clYellow;4.TChart的3D效果如何控制?TChart提供了View3D属性,控制是否使用3D效果,View3dWalls属性控制是否显示左侧的3D墙效果5.如何不显示图表控件生成图表?很遗憾,TChart是一个Windows窗体控件,必须依附一个窗体或Windows控件才能使用。
Delphi的图形处理(一)Delphi的图形处理之一 -- 图像处理在可视化编程中的作用及其应用价值 作者:何咏发布日期:(2005-4-12 21:07:49)声明:本文著作权属于何咏,如要转载请声明作者及出处。
第一章图像处理在可视化编程中的作用及其应用价值图像处理,是可视化编程的基础内容。
在Windows操作系统中,一切要输出到屏幕上的东西都是通过图形处理这部分的内容来实现的。
比如一个程序使用了标签控件,它看起来似乎并没有用到什么图形处理,但实际上标签控件就是通过使用GDI库中的图形处理函数来实现的。
可见图形处理在编程中的重要性。
图像处理在实际的应用中也极具价值。
平面制作、动画制作等都离不开它。
这一部分的内容十分繁多。
我本次研究的内容,只是其中最基础的、最重要一部分。
探究Delphi的图形处理之二 -- 基本图像处理函数 作者:何咏发布日期:(2005-4-12 21:06:29)声明:本文著作权属于何咏,如要转载请声明作者及出处。
第二章图像处理函数2.1 为什么选择Delphi所有的可视化编程语言都能够进行图像处理。
但由于这些语言的定位不同,它们在进行图形处理的效率和便捷程度上也各不相同。
实际上,Visual C 的图像处理效率是最高的,这是由于GDI类库本身就是用C++写的。
但是使用VC来编程并不是一件方便的事,因为这个语言本身就较为繁杂难懂,所以我没有选择它。
Visual Basic(VB)也是一个常用的语言,但它在图形处理方面能力较差。
首先是它的坐标系统是以t wip为单位的浮点坐标系统,在调用GDI类库时,必须对坐标系统进行转换,浪费了大量的资源,编程起来较为麻烦。
在多方面因素的影响下,我觉得Delphi是一个理想的语言。
Delphi已经把绝大多数GDI绘图函数都封装成可直接调用的类,使用它进行图形处理操作十分方便,而且Delphi 是Pascal演变而来的,Pascal具有严谨易读的特点,因此很容易上手。
Graphics 单元中的类//Graphics 单元中的类TGraphicsObjectTFontTPenTBrushTFontRecallTPenRecallTBrushRecallTCanvasTGraphicTPictureTMetafileCanvasTMetafileImageTMetafileTBitmapImageTBitmapTIconImageTIconTResourceManagerTBrushResourceManagerTFileFormatsListDelphi 的绘图功能[1] - TCanvas 的类成员//过程:ArcBrushCopyChordCopyRectDrawDrawFocusRectEllipseEllipseFillRectFloodFillFrameRectDelphi 的绘图功能[3] - 矩形类图形unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;Button3: TButton;Button4: TButton;Button5: TButton;procedure FormCreate(Sender: TObject);procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure Button4Click(Sender: TObject);procedure Button5Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}varbtn: TButton;consty1 = 10;y2 = 80;{先设置画笔画刷}procedure TForm1.FormCreate(Sender: TObject);beginCanvas.Pen.Width := 4;Canvas.Pen.Color := clRed;Canvas.Brush.Color := clWhite;end;{给出左上角和右下角的坐标就可以绘制矩形}procedure TForm1.Button1Click(Sender: TObject);beginbtn := TButton(Sender);Canvas.Rectangle(btn.Left, y1, btn.Left+btn.Width, y2);end;{给出一个矩形结构做参数也可以绘制矩形}procedure TForm1.Button2Click(Sender: TObject);varR: TRect; {定义一个矩形结构}beginbtn := TButton(Sender);R := Rect(btn.Left, y1, btn.Left+btn.Width, y2);Canvas.Rectangle(R);end;{绘制圆角矩形; 最后两个参数是设置圆角的}procedure TForm1.Button3Click(Sender: TObject);beginbtn := TButton(Sender);Canvas.RoundRect(btn.Left, y1, btn.Left+btn.Width, y2, 20,20); end;{绘制焦点矩形; 它不受画笔的影响; 它的颜色是和画刷的颜色进行某种运算得来的} procedure TForm1.Button4Click(Sender: TObject);varR: TRect;beginbtn := TButton(Sender);R := Rect(btn.Left, y1, btn.Left+btn.Width, y2);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure Button4Click(Sender: TObject);procedure Button5Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}varbtn: TButton;consty1 = 10;y2 = 80;{先设置画笔画刷}procedure TForm1.FormCreate(Sender: TObject);beginCanvas.Pen.Width := 2;Canvas.Pen.Color := clRed;Canvas.Brush.Color := clWhite;end;{绘制椭圆; 椭圆的参数和矩形是一样的}procedure TForm1.Button1Click(Sender: TObject);beginbtn := TButton(Sender);Canvas.Ellipse(btn.Left, y1, btn.Left+btn.Width, y2); end;{根据矩形结构绘制椭圆}procedure TForm1.Button2Click(Sender: TObject);varR: TRect; {定义一个矩形结构}beginbtn := TButton(Sender);R := Rect(btn.Left, y1, btn.Left+btn.Width, y2);Canvas.Ellipse(R);end;{绘制扇形}procedure TForm1.Button3Click(Sender: TObject);beginbtn := TButton(Sender);Canvas.Pie(btn.Left, y1, {矩形区域左上角} btn.Left + btn.Width, y2, {矩形区域右下角} btn.Left + btn.Width, y1 + (y2-y1) div2, {扇形起点}btn.Left + btn.Width div2, y1 {扇形终点});end;{绘制弦, 参数同上}procedure TForm1.Button4Click(Sender: TObject);beginbtn := TButton(Sender);Canvas.Chord(btn.Left, y1,btn.Left + btn.Width, y2,btn.Left + btn.Width, y1 + (y2-y1) div2,btn.Left + btn.Width div2, y1);end;{绘制弧线, 参数同上}procedure TForm1.Button5Click(Sender: TObject);beginbtn := TButton(Sender);Canvas.Arc(btn.Left, y1,btn.Left + btn.Width, y2,btn.Left + btn.Width, y1 + (y2-y1) div2,btn.Left + btn.Width div2, y1);end;Delphi 的绘图功能[6] - Polygon、Polylineunit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;procedure FormCreate(Sender: TObject);procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);beginCanvas.Pen.Width := 2;Canvas.Pen.Color := clRed;Canvas.Brush.Color := clYellow;end;{绘制多边形; 它的参数是一个点数组, 这里定义了一个常数数组}procedure TForm1.Button1Click(Sender: TObject);constpts: array[0..3] of TPoint = (Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}{PolyBezier 至少需要四个点做参数; 不改变画笔的当前位置}procedure TForm1.Button1Click(Sender: TObject);varpts: array[0..3] of TPoint;beginCanvas.Pen.Width := 2;Canvas.Pen.Color := clRed;pts[0].X := 10; pts[0].Y := 10; {起点}pts[1].X := 60; pts[1].Y := 10; {控制点1}pts[2].X := 10; pts[2].Y := 100; {控制点2}pts[3].X := 60; pts[3].Y := 100; {终点}Canvas.PolyBezier(pts);Canvas.Pen.Width := 1;Canvas.Pen.Color := clWhite;Canvas.LineTo(ClientWidth, ClientHeight);end;{PolyBezierTo 最少只需要需要三个点, 它把当前位置当作第一点; 会改变画笔的当前位置} procedure TForm1.Button2Click(Sender: TObject);varpts: array[1..3] of TPoint; {从 1 开始的, 就 3 个元素}beginCanvas.Pen.Width := 2;Form1: TForm1;implementation{$R *.dfm}{PolyBezier 绘制多条线时, 需要 3*x + 1 个点} procedure TForm1.Button1Click(Sender: TObject); varpts: array[0..6] of TPoint;beginCanvas.Pen.Width := 2;Canvas.Pen.Color := clRed;pts[0].X := 10; pts[0].Y := 10;pts[1].X := 60; pts[1].Y := 10;pts[2].X := 10; pts[2].Y := 100;pts[3].X := 40; pts[3].Y := 100;pts[4].X := 100; pts[4].Y := 10;pts[5].X := 55; pts[5].Y := 99;pts[6].X := 70; pts[6].Y := 10;Canvas.PolyBezier(pts);end;{PolyBezierTo 绘制多条线时, 需要 3*x 个点}procedure TForm1.Button2Click(Sender: TObject); varpts: array[1..6] of TPoint;beginCanvas.Pen.Width := 2;Canvas.Pen.Color := clRed;Canvas.MoveTo(10 + 82, 10);//pts[0].X := 10; pts[0].Y := 10;pts[1].X := 60 + 82; pts[1].Y := 10;pts[2].X := 10 + 82; pts[2].Y := 100;pts[3].X := 40 + 82; pts[3].Y := 100;pts[4].X := 100 + 82; pts[4].Y := 10;pts[5].X := 55 + 82; pts[5].Y := 99;pts[6].X := 70 + 82; pts[6].Y := 10;Canvas.PolyBezierTo(pts););{参数三是 TTextFormat 类型的集合, 它定义如下:}TTextFormat = set of TTextFormats;{TTextFormats 是个枚举, 定义如下}TTextFormats = (tfBottom, tfCalcRect, tfCenter, tfEditControl, tfEndEllipsi s,tfPathEllipsis, tfExpandTabs, tfExternalLeading, tfLeft, tfModifyString, tfNoClip, tfNoPrefix, tfRight, tfRtlReading, tfSingleLine, tfTop,tfVerticalCenter, tfWordBreak);{所以参数三可以是下列值之一或它们的组合}tfBottomtfCalcRecttfCentertfEditControltfEndEllipsistfPathEllipsistfExpandTabstfExternalLeadingtfLefttfModifyStringtfNoCliptfNoPrefixtfRighttfRtlReadingtfSingleLinetfToptfVerticalCentertfWordBreak//这个函数是 API 函数 DrawTextEx 的简化, 可以参见: DrawTextEx//第二种重载的举例1:{默认是顶对齐、左对齐; 前两个参数都是传址的, 不能用常量}procedure TForm1.FormPaint(Sender: TObject);varR: TRect;constS = '万一的 Delphi 博客';begin := '微软雅黑';Canvas.Font.Style := [fsBold, fsItalic];Canvas.Font.Color := clRed;Canvas.Font.Height := 72;Canvas.TextOut(10, 10, S);end;//TFont 类的常用属性:{Name: 字体名称}{Color: 颜色}{Size、Height: 字号与字体高度, 都可以设定字体大小}{Style: 字体样式; 是个集合值, 是下面可选值或它们的组合:} fsBoldfsItalicfsUnderlinefsStrikeOut{Pitch: 是字间距相关的, 有三个枚举值可选(不过我没测试出效果):} fpDefaultfpVariablefpFixed{Charset: 字符集, 是个整数, 可能的值有:}ANSI_CHARSET = 0;DEFAULT_CHARSET = 1;SYMBOL_CHARSET = 2;SHIFTJIS_CHARSET = 128;HANGEUL_CHARSET = 129;GB2312_CHARSET = 134;CHINESEBIG5_CHARSET = 136;OEM_CHARSET = 255;Shift: TShiftState; X, Y: Integer);end;varForm1: TForm1;implementation{$R *.dfm}varx1,y1,x2,y2: Integer; {直线两个端点的坐标}f: Boolean; {判断鼠标是否点下}procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);beginx1 := X; y1 := Y;x2 := X; y2 := Y;Canvas.Pen.Color := clRed;Canvas.Pen.Width := 2;Canvas.Pen.Mode := pmXor;f := True;end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);beginif f thenbegin{擦除}Canvas.MoveTo(x1, y1);Canvas.LineTo(x2, y2);x2 := X; y2 := y;{重绘}Canvas.MoveTo(x1, y1);Canvas.LineTo(x2, y2);end;end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);ShowMessage(Format('宽度: %d; 高度: %d', [w,h])); {宽度: 24; 高度: 13}{如果字号改变了, 当然高度与宽度也会随之变化}Canvas.Font.Size := 16;wh := Canvas.TextExtent(str);w := wh.cx;h := wh.cy;ShowMessage(Format('宽度: %d; 高度: %d', [w,h])); {宽度: 42; 高度: 25}{Font.Height 是可读写的}Canvas.Font.Height := 32;wh := Canvas.TextExtent(str);w := wh.cx;h := wh.cy;ShowMessage(Format('宽度: %d; 高度: %d', [w,h])); {宽度: 52; 高度: 32}end;posted on 2008-02-18 22:32 万一阅读(474) 评论(0)编辑收藏所属分类: Delphi 的绘图功能把窗体客户区图像保存到文件或剪切板unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;Button3: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}uses Clipbrd; {剪切板单元}//把窗体客户区保存为图片procedure TForm1.Button1Click(Sender: TObject);varbit: TBitmap;beginbit := TBitmap.Create;bit := Self.GetFormImage;bit.SaveToFile('c:\temp\img1.bmp');bit.Free;end;//用一句话完成上一个过程procedure TForm1.Button2Click(Sender: TObject); beginSelf.GetFormImage.SaveToFile('c:\temp\img2.bmp'); end;//把窗体客户区图像复制到剪切板procedure TForm1.Button3Click(Sender: TObject);varFormat: Word;Data: Cardinal;APalette: HPALETTE;begin{TBitmap.SaveToClipboardFormat 函数的三个参数都是接受数据用的, 按要求类型定义即可}GetFormImage.SaveToClipboardFormat(Format, Data, APalette);{放入剪切板}Clipboard.SetAsHandle(Format, Data);end;end.捕捉全屏图像unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}//捕捉全屏幕图像并保存到: c:\temp\Screen.bmpprocedure TForm1.Button1Click(Sender: TObject);varbit: TBitmap;TForm1 = class(TForm)Button1: TButton;Button2: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}//把文字输出到屏幕procedure TForm1.Button1Click(Sender: TObject);varcvs: TCanvas;Rect: TRect;Str: string;begincvs := TCanvas.Create;cvs.Handle := GetDC(0);SetBkMode(cvs.Handle, TRANSPARENT);// := '宋体';cvs.Font.Style := [fsBold, fsItalic];cvs.Font.Size := 48;Randomize;cvs.Font.Color := Random($FFFFFF);Rect := Screen.DesktopRect;Str := '万一的 Delphi 博客';cvs.TextRect(Rect, Str, [tfSingleLine, tfCenter, tfVerticalCenter]); cvs.Free;end;//刷新显示procedure Button4Click(Sender: TObject);procedure Button5Click(Sender: TObject); end;varForm1: TForm1;implementation{$R *.dfm}//使用 API 函数: SetRectprocedure TForm1.Button1Click(Sender: TObject); varR: TRect;beginSetRect(R, 20, 20, 80, 80);Canvas.Pen.Color := clBlue;Canvas.Rectangle(R);end;//使用 Classes.Rect 函数procedure TForm1.Button2Click(Sender: TObject); varR: TRect;beginR := Rect(20, 20, 80, 80);Canvas.Pen.Color := clFuchsia;Canvas.Rectangle(R);end;//使用 Classes.Rect 函数, 用两个点合成procedure TForm1.Button3Click(Sender: TObject); constpt1: TPoint = (x:20; y:20);pt2: TPoint = (x:80; y:80);varR: TRect;beginR := Rect(pt1, pt2);Canvas.Pen.Color := clSkyBlue;Canvas.Rectangle(R);end;//矩形常量procedure TForm1.Button4Click(Sender: TObject);constR: TRect = (Left:20; Top:20; Right:80; Bottom:80); beginCanvas.Pen.Color := clTeal;Canvas.Rectangle(R);end;//使用 Classes.Bounds 函数, 我最喜欢这种办法procedure TForm1.Button5Click(Sender: TObject);varR: TRect;beginR := Bounds(20, 20, 60, 60);Canvas.Pen.Color := clWhite;Canvas.Rectangle(R);end;end.使用System.Sin、System.Cos 函数画圆- 绘制五环图标本例效果图:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;procedure FormCreate(Sender: TObject);procedure FormMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);procedure Button1Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}const{把五环的颜色定义为常量数组}Colors: array[0..4] of TColor = (clBlue, clBlack, clRed, clYellow, clGree n);varci: Integer; {用作颜色序号}procedure TForm1.FormCreate(Sender: TObject);beginButton1.Caption := '重绘';Self.Color := clWhite;Canvas.Pen.Width := 5;end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);constr = 30; {圆半径}varradian: Double; {记录弧度; Sin、Cos 函数需要弧度做参数; 弧度 = 角度 * Pi/180} i,a,b: Integer;beginCanvas.MoveTo(X, Y-r);Canvas.Pen.Color := Colors[ci];for i := 1to360dobeginradian := i * (Pi/180); {获取弧度}a := X + Round(Sin(radian) * r); {用 Sin 函数获取横坐标}b := Y - Round(Cos(radian) * r); {用 Cos 函数获取纵坐标}Canvas.LineTo(a, b); {绘制}Application.ProcessMessages; {不要影响其他操作}Sleep(3); {等 3 毫秒}end;Inc(ci);if ci = 5then ci := 0;end;{$R *.dfm}constBoolArr: array[Boolean] of string = ('余弦曲线', '正弦曲线'); varf: Boolean = True;procedure TForm1.FormClick(Sender: TObject);beginf := not f;Repaint;end;procedure TForm1.FormPaint(Sender: TObject);varx: Integer;y,radian: Double;beginCanvas.Pen.Width := 2;Canvas.Pen.Color := clRed;Canvas.MoveTo(0, ClientWidth div2);for x := 0to ClientWidth dobeginradian := x / ClientWidth * 4 * pi;if f then y := Sin(radian) else y := Cos(radian);y := (1-y) * ClientHeight / 2;Canvas.LineTo(Round(x), Round(y));end;Text := BoolArr[f];end;end.两个CopyRectprocedure Button1Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}procedure TForm1.PaintBox1Paint(Sender: TObject);beginPaintBox1.Canvas.Brush.Color := clWhite;PaintBox1.Canvas.FillRect(PaintBox1.BoundsRect);PaintBox1.Canvas.MoveTo(0, 0);PaintBox1.Canvas.LineTo(PaintBox1.Width, PaintBox1.Height);PaintBox1.Canvas.MoveTo(PaintBox1.Width, 0);PaintBox1.Canvas.LineTo(0, PaintBox1.Height);end;procedure TForm1.PaintBox2Paint(Sender: TObject);beginPaintBox2.Canvas.Brush.Color := clGreen;PaintBox2.Canvas.Ellipse(0, 0, PaintBox2.Width, PaintBox2.Height); end;procedure TForm1.Button1Click(Sender: TObject);varR1,R2: TRect;beginR2 := PaintBox2.BoundsRect;{Windows.CopyRect}CopyRect(R1, R2); //相当于: R1 := R2;Align = alClientOnPaint = PaintBox1Paint ExplicitLeft = 32ExplicitTop = 24ExplicitWidth = 105ExplicitHeight = 105endendobject Panel2: TPanelLeft = 183Top = 8Width = 130Height = 105Caption = 'Panel2'TabOrder = 1object PaintBox2: TPaintBox Left = 1Top = 1Width = 128Height = 103Align = alClientOnPaint = PaintBox2Paint ExplicitLeft = 16ExplicitTop = 0ExplicitWidth = 105ExplicitHeight = 105endendobject Button1: TButtonLeft = 212Top = 128Width = 75Height = 25Caption = 'Button1'TabOrder = 2OnClick = Button1Clickendend。
Delphi是一种新型可视化程序开发工具。
它在功能上远远胜过VB,甚至被冠以VB杀手(VB Killer)的美誉。
理由之一就是Delphi可以轻松地安装和使用VB的VBX控件并转换VB程序为Delphi程序。
本文将就Delphi组件VBX页里ChartFx(图表)构件的特性和使用方法作一较为完备的阐述。
相信对读者建立美观的图表有所裨益,并会对Delphi的“属性管理”有更深一步的认识。
首先介绍一下工程上经常用到的直方图和饼图的概念。
由于实际需要,常需比较一组数据或多组数据的相对大小(如公司中各部门的收支情况比较、金融利率的调整情况等)。
为了能够简洁直观地得到比较结果,通常将这些数据放入直角坐标系,以纵坐标的相对大小比较数据,即所谓直方图;或是将各数据转化为百分点,放入一个单位圆,即形成所谓饼图。
在Delphi组件VBX页中,ChartFx构件就是以上工程需要而设计的。
选取该构件置于窗体上,调整至合适大小,即可见到缺省的图表格式(在未初始化数据时,构件自动生成随机数据充当比较项目)。
在对象监视器中,设置不同的属性,还可以看到其它工具条。
以下逐条解释各属性:Nseries需比较的数据项的个数。
Nvalues每个数据项中的子项目数。
TitleDlg图表的标题设置对话框。
AdmDlg图表构件绘图区上下左右边缘处注解设置对话框。
FontDlg注解文字字体设置。
BorderStyle图表构件的边框风格。
Height、Width、Top、Left这四项设置图表构件在窗体中的位置及大小。
BottomGap、TopGap、LeftGap、RightGap这四项设置图表构件绘图区的位置及大小。
ChartType、pThpe、Style这三项设置图表构件及绘图区的类型与风格。
Chart3D用以设置是否以三维形式显示数据。
ViewRot3D设置观察三维图示的视角。
WallWidth设置三维图示中X、Y、Z三壁的厚度。
LinebkColor、LineColor、LineStyle、LineWidth设置线条的颜色和风格。
delphixe绘制曲线实例Delphi是一款流行的编程语言,用于快速开发Windows应用程序。
其中的DelphiXE版本是较新的版本之一,提供了丰富的功能和组件,能够满足开发者的各种需求。
在Delphi XE中,绘制曲线是一项常见的功能,可以通过使用TCanvas对象和画布函数来实现。
在下面的文章中,将演示如何在Delphi XE中绘制曲线。
首先,需要创建一个新的Delphi项目。
在创建的项目中,选择一个合适的容器组件,例如一个TPanel或TImage,用于绘制曲线。
接下来,需要声明一个TCanvas对象,并通过设置画布属性来初始化它。
可以在需要绘制曲线的事件中进行初始化操作。
例如,在绘制按钮的OnClick事件中添加以下代码:```delphivarCanvas: TCanvas;beginCanvas := TCanvas.Create;Canvas.Handle := Panel1.Canvas.Handle;Canvas.Pen.Color := clRed;Canvas.Pen.Width := 2;Canvas.Brush.Style := bsClear;```上述代码创建了一个新的TCanvas对象,并将其绑定到Panel1的画布句柄上。
然后,设置曲线的颜色、宽度和画刷样式。
接下来,可以使用画布函数来绘制曲线。
Delphi XE提供了一些常用的画布函数,例如MoveTo和LineTo。
MoveTo函数用于设置画笔的起始点,而LineTo函数用于绘制直线或曲线。
例如,可以在绘制按钮的OnClick事件中使用MoveTo和LineTo 函数来绘制一条简单的直线:```delphibeginCanvas.MoveTo(10, 10);Canvas.LineTo(100, 100);end;```上述代码将画笔的起始点设置为(10, 10),然后绘制一条直线到(100, 100)。
本文主要讲解Delphi中Chart,TeeChart的属性,方法及用法.Tchart分析报告,TeeChart使用指南,TeeChart控件介绍1.AllowZoom : Boolean是否允许鼠标拖动来缩放图表2.AnimatedZoom : Boolean拖动是否显示缩放过程3.AxisVisible : Boolean显示和隐藏4个子图表4.BufferedDisplay :BooleanTrue时图表首先画在内部画布上,可以防止图表闪烁,但耗费内存资源.5.ChartHeight : LongInt以像素为单位,运行为只读,显示图表顶轴与底轴的高度,不包含页边距,Height包含页边距,(**** 转载敬请注明-本文出处:南山古桃(nsgtao)的百度空间:/nsgtao/ ****)6.DepthAxis,LeftAxis,RightAxis,TopAxis,BottomAxisTchart共分为五个子图表,LeftAxis,RightAxis,TopAxis,BottomAxis和DepthAxis默认情况下只显示LeftAxis和BottomAxis子图表可以通过Series属性的子属性HorizAxis与VertAxis进行设置如:chart1.Series[0].HorizAxis := aBothHorizAxis;chart1.Series[0].VertAxis := aBothVertAxis;chart1.BottomAxis.Title.Caption := 'nsgtao';chart1.BottomAxis.Title.Font.Color := clRed;7.Foot : TChartTitle在图表底部定义的文本和格式,在图表底部显示一些说明文字Chart1.Foot.Text.Add('Nsgtao Foot');(**** 转载敬请注明-本文出处:南山古桃(nsgtao)的百度空间:/nsgtao/ ****)8.Gradient : TChartGradient用于设置图表背景颜色:是否显示背景色,背景色渐变的起始颜色和终止颜色,渐变方向等以下是南山古桃(nsgtao) 引用网上资源引用1.关键词:Tchart分析报告引用2.关键词: TeeChart使用指南,TeeChart控件介绍*************************************************************** *************************************************************** *********************下面是南山古桃引用并整理的文章*************************************************************** *************************************************************** *****1 Tchart分析报告(**** 转载敬请注明-本文出处:南山古桃(nsgtao)的百度空间:/nsgtao/ ****)1.1 [概述]TChart是delphi里面一个标准的图形显示控件。
一个windows自带的画图工具是无论如何也不能满足我们的画图需要的,很多效果都需要我们在另外的工具中来实现。
这些高级的功能是如何实现的呢,如何操纵一些基本的属性和函数,让它们最终能作出我们想要的效果呢?这里我们以绘制统计图来说明这些问题。
解决思路――这里,我们暂且先撇开具体的问题,综合地一下讨论画图的问题。
画图工具是基本元素的具体实现,对于我们初学者来说,还是有很好的参考价值的,在delphi 5中有一个自带的工程例子“……Borland\Delphi5\Demos\Doc\Graphex”,这个例子可以实现一些基本的绘图功能。
对这个例子多加修改,一定会有所收获的。
这里就不列出它的详细代码了,有心的读者可以自己找到这个例子。
我这里只是想综合地讨论这方面的问题。
使用DELPHI编写绘图软件的灵魂就在于操作画布,画笔和刷子,尽可能地挖掘它们的属性和相关参数的设置。
(一)画布画布,画笔和刷子之间的关系很明了.其实,画笔和刷子都是画布的一个属性.而画布也只是TForm,TImage,TShape等组件对象的一个属性,专门负责与图象相关的信息打交道.它的主要作用可以概括如下几点:1.指定使用画笔,刷子和字体的使用类型;2.绘制和填充指定形状的线或图形;3.修饰和改变图象;画布的主要属性有:Brush--指定填充图形和背景的样式CanvasOrientation--指定画布的定位类型,有coLeftToRight, coRightToLeft两个属性;ClipRect--指定剪切矩形的边界;CopyMode--指定图形图象的复制模式;Font--指定画布上使用的字体;Handle--为画布指定窗口GDI对象的设备描述表;LockCount--指定画布被别的线程锁定的次数;Pen--指定画布上使用的画笔,具体见下面描述;PenPos--指定画笔当前的位置;Pixels--指定当前剪切矩形的象素颜色;TextFlags--指定字体在画布上的显示方式,有ETO_CLIPPED,ETO_OPAQUE,ETO_RTLREADING,ETO_GL YPH_INDEX,ETO_IGNORELANGUAGE,ETO_NUMERICSLOCALETO_NUMERIC SLATIN等值可选;画布相关的API函数及其注释如下:Arc--按指定方式画一条弧;BrushCopy--把位图复制到指定的画布的矩形中,用画布刷子颜色替换位图的颜色;Chord--按指定方式画弦;CopyRect--从一个矩形区域复制部分图象到另一个矩形区域;Draw--用指定参数在指定位置画图;DrawFocusRect--按指定焦点风格,通过异或操作来绘制一焦点矩形;Ellipse--按指定参数画一椭圆;FillRect--按指定的刷子填充一矩形;FloodFill--使用当前选定的刷子填充指定设备描述表中的一块区域;FrameRect--使用指定的方式画一矩形的边框;LineTo--使用当前画笔从当前位置到指定点画一条直线;Lock--防止其它线程在画布上绘图;MoveTo--指定一新的当前画笔位置;Pie--按指定方式画饼状图;PolyBezier--按指定方式画多条贝塞尔线;PolyBezierTo--按指定方式画多条贝塞尔线并更新当前的画笔位置值; Polygon--绘制一个由多个顶点的任意序列组成的多边形;Polyline--使用当前画笔画一系列的多边形;Rectangle--绘制矩形;RoundRect--绘制圆角矩形;StretchDraw--在指定的矩形区域通过指定的绘图参数来绘制图形; TextExtent--返回使用当前字体设置的字符的象素宽度和高度等参数; TextHeight--返回使用当前字体设置的字符的象素高度;TextOut--在指定位置绘制文本,并更新画笔的当前位置;TextRect--在一剪切矩形区域中绘制文本;TextWidth--返回使用当前字体设置的字符的象素宽度;TryLock--对当前没加锁的画布进行加锁;Unlock--对当前加锁的画布进行解锁;例如以下是两个小例子:procedure TForm1.Button2Click(Sender: TObject);varARect: TRect;begin //实现了剪切效果;with Image1.Canvas dobeginCopyMode := cmWhiteness; //设置复制模式;ARect := Rect(0, 0, Image1.Width, Image1.Height);CopyRect(ARect, Image1.Canvas, ARect);CopyMode := cmSrcCopy; //恢复复制模式;end;end;procedure TForm1.Button3Click(Sender: TObject);varW: Word;begin //在窗口中画一条彩线;for W := 10 to 200 doCanvas.Pixels[W, 10] :=RGB(random(255),random(255),random(255));; end;灵活使用这些函数及其内部参数会让我们得到意想不到的效果;(二) 画笔画笔是一个GDI对象,定义了绘制直线或轮廓形状的方法.画笔内部共有五种属性:颜色,句柄,模式,风格和宽度.Color--决定指定直线或轮廓形状的RGB颜色。
Handle--指向了窗口画笔对象句柄。
Mode--指定了画笔以何种方式在画布(canvas)上画线,在帮助文档中的该定义是(全部以pm_开头):type TPenMode =( pmBlack, //总是黑色;pmWhite, //总是白色;pmNop, //颜色不变;pmNot, //画布颜色取反;pmCopy, //颜色属性中指定的画笔颜色;pmNotCopy, //画笔颜色取反;pmMergePenNot, //画笔颜色和画布背景色取反后颜色的结合;pmMaskPenNot, //画笔颜色和画笔背景色取反后颜色共同色的结合;pmMergeNotPen, //画笔颜色取反后和画布背景色的结合;pmMaskNotPen, //画布颜色和画笔颜色取反后颜色共同色的结合;pmMerge, //画笔和画布背景色的结合;pmNotMerge, //画笔颜色和画布背景色的结合;pmMask, //画笔和画布背景色共同色的结合;pmNotMask, //pmMask取反,画笔和画布背景色共同色的结合;pmXor, //取画笔或画布背景中的任一种颜色;pmNotXor //pmXor取反,取画笔或画布背景中的任一种颜色;);Style--则指定了画笔操作的风格,在线文档中的定义是(全部以ps_开头):type TPenStyle=( psSolid, //画笔是───psDash, //画笔是------psDot, //画笔是......psDashDot, //画笔是_._._.psDashDotDot, //画笔是_.._..psClear, //画笔是透明色psInsideFrame //画笔是实线,但设置大于1时会抖动;);另外,在windows.pas中还有其他扩展的画笔风格定义,只在特殊的支持设备上才有效,如PS_ENDCAP_ROUND, PS_JOIN_ROUND等;Width--指定了待使用画笔的宽度,单位是象素.和画笔相关的函数有:CreatePen--用指定风格创建画笔;CreatePenIndirect--根据LOGPEN数据结构创建一画笔;ExtCreatePen-- 创建带指定风格,宽度和刷子属性的几何画笔;(三)刷子刷子定义了区域填充的GDI对象,刷子是一个8×8象素的区域,它可以被绘制在指定的设备上.刷子不仅可以是纯色的,也可以由不同的位图图案组成.刷子的属性有位图,颜色,句柄和风格四种:Bitmap--是指定一个外部位图文件来填充指定的区域.如果指定的图象比填充的区域大,则只有左上角与填充区域等大的部分有效,其余的被自动裁减了.Color--指定了刷子的颜色.当刷子风格为bsClear时,该属性无效.Handle--指向指定设备窗口.Style--则指定了当前刷子的填充风格,在线文档中的定义是(都以bs_开头): type TBrushStyle=( bsSolid, //填充格式为实体填充bsClear, //填充格式为透明填充bsHorizontal, //填充格式为------bsV ertical, // 填充格式为|||||bsFDiagonal, // 填充格式为/////bsBDiagonal, // 填充格式为\\\\\bsCross, // 填充格式为+++++bsDiagCross // 填充格式为xxxxx);和刷子有关的API函数有:CreateBrushIndirect--根据LOGBRUSH创建一刷子; CreateDIBPatternBrushPt--使用设备无关位图来创建刷子,以便指定刷子的模式; CreateHatchBrush--创建一带有阴影模式的刷子,阴影模式为以HS_开头的常数; CreatePatternBrush--用位图来创建刷子,以便指定刷子的模式; CreateSolidBrush--创建一实体颜色刷子;GetBrushOrgEx--获取指定设备描述表中当前选择刷子的原点; GetSysColorBrush--获取和指定颜色索引相关的逻辑刷子的句柄; SetBrushOrgEx--设置指定设备描述表中当前选择刷子的原点;(四)画图和填充相关的API函数;BeginPaint--准备在指定窗口绘画或对指定区域进行填充; DrawAnimatedRects--NT支持函数,画一环有游动边框的矩形;DrawCaption--NT支持函数,为指定窗口的标题赋值;DrawEdge--为指定矩形画一道或多道边框;DrawFocusRect--画焦点矩形;DrawFrameControl--画一指定类型和风格的边框控件;DrawState--NT支持函数,为图象画一可视效果标明其状态;DrawStateProc--NT支持函数,调用为图象画一可视效果标明其状态的函数; DrawTextEx--NT支持函数,在指定区域输出格式化文本;EndPaint--结束绘画;ExcludeUpdateRgn--将窗口无效部分(更新区域)从裁剪区中排除掉;GdiFlush--使当前GDI闪烁;GdiGetBatchLimit--获取缓冲GDI函数数量;GdiSetBatchLimit--设置缓冲GDI函数数量;GetBkColor--获取背景颜色;GetBkMode--获取背景模式;GetBoundsRect--获取边界矩形;GetROP2--获取当前绘图模式;GetUpdateRect--获取指定窗口最小的矩形;GetUpdateRgn--获取描述窗口中无效区的区域;GetWindowDC--获取窗口DC;GetWindowRgn--获取窗口区域;GrayString--在指定位置画灰色文本;InvalidateRect--使DC指定的矩形无效;InvalidateRgn--使DC指定的矩形无效;LockWindowUpdate--禁止或允许在指定窗口中绘画;OutputProc--调用输出进程,向GrayString输送文本;PaintDesktop--NT支持函数,在指定的窗口区域用指定的桌面颜色或墙纸填充裁剪区;RedrawWindow--更新客户区的指定区域或矩形;SetBkColor--设置背景颜色;SetBkMode--设置背景模式;SetBoundsRect--设置边界矩形;SetRectRgn--设置矩形区域;SetROP2--设置当前绘图模式;SetWindowRgn--设置窗口区域;UpdateWindow--更新窗口;ValidateRect--使客户区中指定矩形有效;ValidateRgn--使客户区中的指定区域有效;WindowFromDC--获取和指定窗口相关的句柄;具体实现――1.本例以常见的统计图来说明问题。