Delphi如何使用基本的绘图函数绘制统计图
Delphi 的绘图功能

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使⽤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统计图编程

• 上面类型的Series都是由TchartSeries派生出来的, 因此TchartSeries的属性方法一般对它们都适用。 下面介绍一下TchartSeries的主要属性和方法: Active属性:用于设置序列是否在图表上显示。 DataSource属性:设置为序列提供数据的数据源, 也可以是其他序列,数据集或者其他数据源。 XValue:序列横坐标数据。 YValue:序列纵坐标数据。 XLablesSource:序列横坐标标签的数据来源。 SeriesColor:绘制序列时所使用的颜色。 ParentChart:指定序列所在的图表。eg: Series1.ParentChart:=Chart1或者Chart1.add (Series1)
第三部分.TQRchart
• TeeChart和QuickReport实现了无缝连接, 在TQuickReport组件中使用TeeChart非常 方便,一般遵循以下几步: • 首先将一个TQuickReport组件拖放到窗体 上,再将一个TQRchart组件拖放到 TQuichReport上。这时就可以像对其他 TeeChart组件那样用图表编辑器来设置 TQRchart的属性了,如果在运行期间想访 问TQRchart的属性和方法,可以通过 TQRchart.Chart属性名或方法名的形式。
第一部分:TChart控件
Delphi报表和图表设计

第 12 章
报表和图表设计
12.1 数据报表的设计
1.设计数据源 1.设计数据源
Form1→Table1→Button1 DBDEMOS Parts.DB RvDataSetConnection组件 Rave卡 组件( RvDataSetConnection组件(Rave卡) DataSet:Table1 RuntimeVisibility:rtDeveloper
2.设计Rave报表 2.设计Rave报表 设计Rave
(1)…….(15) .(15) (1) P295-298 P295-
3.编写程序代码及运行结果 3.编写程序代码及运行结果
Procedure TForm1.Button1Click(Sender:Tobject); begin RvProject1.Execute; end;
[例12-2]简单统计表 12-2] 组件 该组件用于显示与数据相对应的图形。 该组件用于显示与数据相对应的图形。数据来自于 DecisionSource 通过【 Graph】 通过【Editing Decision Graph】→Chart →Series 用来选择不同的图形。 用来选择不同的图形。 (6)DecisionGrid 组件 (6)DecisionGrid DecisionGraph组件不同的是该组件以表格形式对数 与DecisionGraph组件不同的是该组件以表格形式对数 据进行统计显示,可以根据需要设计表格的外观。 据进行统计显示,可以根据需要设计表格的外观。
12.2 图表设计
1.简单统计图生成 1.简单统计图生成
[例12-1]简单统计图的设计 12-1]简单统计图的设计
2.统计组件的介绍 2.统计组件的介绍 (1)DecisionQuery 组件 (1)DecisionQuery 该组件与Query组件相似, SQL语句 Query组件相似 语句。 该组件与Query组件相似,是SQL语句。 (2)DecisionCube 组件 该组件用来分析数据库表中的字段, 该组件用来分析数据库表中的字段,任何数据库表都可 以作为它的数据源,但一般都用DecisionQuery DecisionQuery查询结 以作为它的数据源,但一般都用DecisionQuery查询结 果作为它的数据源。 果作为它的数据源。 (3)DecisionPivot 组件 该组件与DBNavigator组件相似,用于导航不同的统计图。 DBNavigator组件相似 该组件与DBNavigator组件相似,用于导航不同的统计图。 (4)DecisionSource 组件 该组件与DataSource组件相似, DataSource组件相似 该组件与DataSource组件相似,起到连接数据集和数据 控制组件的作用。 控制组件的作用。
Delphi常用函数手册

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。
API绘图函数 Delphi

DrawState 为一幅图象或绘图操作应用各式各样的效果
Ellipse 描绘一个椭圆,由指定的矩形围绕
EndPath 停止定义一个路径
EnumEnhMetaFile 针对一个增强型图元文件,列举其中单独的图元文件记录
EnumMetaFile 为一个标准的windows图元文件枚举单独的图元文件记录
GetBrushOrgEx 判断指定设备场景中当前选定刷子起点
GetCurrentObject 获得指定类型的当前选定对象
GetCurrentPositionEx 在指定的设备场景中取得当前的画笔位置
GetEnhMetaFile 取得磁盘文件中包含的一个增强型图元文件的图元文件句柄
GetEnhMetaFileBits 将指定的增强型图元文件复制到一个内存缓冲区里
CreateDIBPatternBrush 用一幅与设备无关的位图创建一个刷子,以便指定刷子样式(图案)
CreateEnhMetaFile 创建一个增强型的图元文件设备场景
CreateHatchBrush 创建带有阴影图案的一个刷子
CreateMetaFile 创建一个图元文件设备场景
DeleteMetaFile 删除指定的图元文件
DeleteObject 删除GDI对象,对象使用的所有系统资源都会被释放
DrawEdge 用指定的样式描绘一个矩形的边框
DrawEscape 换码(Escape)函数将数据直接发至显示设备驱动程序
DrawFocusRect 画一个焦点矩形
CreatePatternBrush 用指定了刷子图案的一幅位图创建一个刷子
第6章 delphi绘图PPT课件

TObject;
Button:
Delphi简明教程
清华大学出版社
12
图6-4 运行结果
Delphi简明教程
清华大学出版社
13
6.1.3 绘制多边形
绘制多边形调用的是Polyline方法,其语法结果如下: procedure Polyline(Points : array of TPoint); 其中Points是一个TPoint型的数组。仍以例子进行说明。 首先设计窗体如图6-5。
Delphi简明教程
清华大学出版社
10
procedure TForm1.Button1Click(Sender: TObject); begin start:=true; end; procedure TForm1.Button2Click(Sender: TObject); begin Close; end; procedure TForm1.Button2MouseDown(Sender:
第六章 Delphi绘图
6.1 简单图案的绘制 6.2 艺术图案的绘制 6.3 利用鼠标绘制图形 6.4 图形动画的实现 6.5 图像处理
Delphi简明教程
清华大学出版社
1
整体概况
+ 概况1
您的内容打在这里,或者通过复制您的文本后。
概况2
+ 您的内容打在这里,或者通过复制您的文本后。
Delphi简明教程
start:Boolean;
Delphi简明教程
清华大学出版社
5
然后编写如下事件响应程序。 下面过程在窗体的初始化过程中设置start的值为False。 procedure TForm1.FormCreate(Sender:TObject); begin
Delphi中的TChart使用用法2009

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控件才能使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一个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.本例以常见的统计图来说明问题。