delphi画图

合集下载

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 drawgrid 用法

delphi drawgrid 用法

delphi drawgrid 用法摘要:1.Delphi DrawGrid 组件简介2.DrawGrid 属性设置3.DrawGrid 事件处理4.DrawGrid 绘图方法5.实例演示DrawGrid 用法正文:Delphi是一款由Borland公司开发的快速应用程序开发工具,它提供了许多丰富的组件,方便开发者进行各种功能的开发。

在Delphi中,DrawGrid组件是一个非常实用的组件,它允许用户在窗体上绘制网格,可以用于表格、图形、计算等领域。

下面我们就来详细了解DrawGrid组件的用法。

1.Delphi DrawGrid 组件简介DrawGrid组件在Delphi中的位置是:Component Palette中的“DBGrid”组件,它是一个可定制的表格视图,可以在窗体上绘制水平和垂直的网格线。

DrawGrid组件具有灵活的属性设置和丰富的事件处理,使得开发者可以轻松地实现各种功能。

2.DrawGrid 属性设置DrawGrid组件提供了许多属性,如:Align、Caption、Color、Font、FixedColor等。

其中,FixedColor属性用于设置网格线的颜色,通过设置不同的颜色,可以使网格线更加醒目。

3.DrawGrid 事件处理DrawGrid组件支持多种事件处理,如:Click、DbClick、MouseDown、MouseMove、MouseUp等。

通过编写事件处理程序,开发者可以实现对用户操作的响应,如:单击、双击、鼠标移动等。

4.DrawGrid 绘图方法DrawGrid组件允许用户自定义绘制网格线。

通过编写DrawGrid的OnDrawCell方法,可以实现自定义绘制单元格内容。

此外,DrawGrid还提供了OnDrawColumnHeader和OnDrawFooter方法,分别用于绘制列标题和页脚。

5.实例演示DrawGrid 用法下面通过一个简单的实例,演示DrawGrid组件的用法。

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

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颜色。

Delphi使用OpenGL2d绘图之画图片Bmp的方法

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画图、多媒体、数据库

delphi画图、多媒体、数据库
(3)Arc 方法 [格式]:
procedure Arc(X1,Y1,X2,Y2,X3,Y3,X4,Y4:Integer);
第 12 章 图形图像编程
247
[功能]:用于画一段椭圆弧。其中,椭圆是由点(X1,Y1)的点(X2,Y2)所确定的矩形 所决定,弧的起点是椭圆中心和点(X3,Y3)的连线与椭圆的交点,弧的终点是椭圆中心和点 (X4,Y4)的连线与椭圆的交点,并以逆时针方向画弧。
clYellow
clBackground
clActiveCaption clInactiveCaption
表示的颜色 浅绿色 黑色 蓝色 深灰(灰黑色) 紫红色 灰色 绿色 橙色 浅灰色 枣栗色 深蓝色 橄榄绿 紫色 红色 银灰色 Teal 青凫色(一种蓝) 白色
黄色
当前桌面的背景色
当前窗体的标题栏色 当前不被激活的标题栏的颜色
(6)CopyMode 属性 该属性用于设置从其他画布拷贝图像的方式,其取值及含义如表 12-4 所示,该属性的默 认值为 cmSrcCopy(表示拷贝的像素将覆盖画布上原有的像素)。
246
Delphi 7 应用教程
CopyMode 属性的取值 cmSrcCopy cmBlackness cmDsInvert cmMergeCopy cmMergePaint cmNotSrcCopy cmNotSrcErase cmPatCopy cmPatlnvert cmPatPaint cmSrcAnd cmSrcCopy cmSrcErase cmSrclnvert cmSrcPaint cmWhiteness
244
Delphi 7 应用教程
线 条样式 PsClear PsSolid PsDash PsDot PsDashDot PsDashDotDot

Delphi图形图像处理

Delphi图形图像处理
(5)ReleaseHandle:用来把TBrush 从 QBrush handle中分离出来,当需要把TBrush handle 给一段程序或一个类时,用到这个函数。
1.3.TPen Object(画笔对象)
应用程序常用TPen对象在画布上绘制各种 线段,笔的颜色在Color属性中定义。线段 宽度在Width属性中定义。Style属性定义 了线段的各种类型
2.2.Shape组件
Shape组件用于在窗体中绘制几何图形, 如椭圆,矩形和圆角矩形等。
属性: (1)Shape:绘制图形的形状。 (2)Brush:几何图形中填充的颜色。 (3)Pen:几何图形所使用的线行。
2.3.PaintBox组件
该组件是一个简单的画板,它为应用程序提供了可 在窗体的特定区域内画图的方法。它和Image组件 不同,Image组件是显示已经保存在文件中的图像, 而PaintBox组件需要应用程序直接在窗体上进行 绘制。一旦该组件加入窗体,应用程序就可以利用 OnPaint事件在画板上画图。
这是一个32位二进制数据。Graphic单元中还定 义了一些常用的颜色常量,这些常量或直接映射 成系统调色板中最相近的颜色,或映射成 Windows 控制面板中颜色部分的系统视频颜色。 直接映射成系统调色板中的颜色有: ClAqua,CLBlack,ClBlue,ClbkGrray,ClFuchso a......ClYellow
椭圆,(x1,y1)是矩形左上角的象素坐标, x2,y2是矩形右下角的象素坐标。如果矩形 形成一个区域,将出现一个椭圆。
见例子
线条
LineTo(x,y : Integer); LineTo从当前位置画一条线至(x,y)所指定 的位置,并把笔的位置移至(x ,y)。

在Delphi程序中调用Forcal扩展库绘制动态图形

在Delphi程序中调用Forcal扩展库绘制动态图形

态 库版本文件小于 10 K,静 态库 版本 约 2 0 ~ 0 K 5 6 K 30 。
通 常 ,使用 各种高 级语 言如 CC + # e h、F R / + 、c 、D l i O — p
G oc12 d 是 一 个 通 用 的 Fra 脚 本 系 统 F ra3W.l l oel 但 G ocl F ra 简化了 F ra脚本 的使用 。 ocl
l F ra 脚 本及 软件 构 成 ocl
F ra是一个 轻量 级嵌 入式快速脚本 ,绿 色免安装 ,不读 o l c
写注册表。与其他脚本不 同 ,Fra 以动态库 的形式提供 ,核 ocl 心库只有一个动 态库文件 F ra3 W. l ocl 常小巧 ,动 oc12 d 。F ra 非 l
Ab ta t o c l c p a y a c l o i n u h t n n t e f r o o r e c d , a e u e r a o stp s sr c :F r a r tc n d n mi al c mp l a d F n t e s g i h o m f u c o e c n b s d f  ̄ u y e si y e i r s o v o t e t a o t r e i n a s a e u e s s rp s o e ot p o e sn ,W e , o f u a in s f r ,g me t fma h ma i ls f c wa e d sg , lo c n b s d a c t fr p r r c s i g i b c ni r t ot e a s wi g o wa h h g f ce c n t e i l me t t n n e a l l sr ts h w t r g a i l h n h x e so o c l GF r a i h ef i n y i h mp e n a i .A x mp e i u tae o o p o r m n Dep ia d t e e t n i n t a l i o l oc l d a y a c g a h c , o u i g o o d GF r a n x e so a i e h i a rb e . r w d n mi rp is f c s n l a o c la d e t n in b sc tc n c p o lms n l Ke r s e p i; o c l; o e l; r c d r s; c p ;d n mi i r r y wo d :D l h F r a Gfr a p o e u e s r t y a c l ay i b

delphi中画布应用两则

delphi中画布应用两则

Delphi中画布应用两则关键字:Delphi、画布、背景色、分割图像---- 在Delphi 中,窗体(Form)、BitBtn 控件、SpeedButton 控件和PaintBox等控件都具有画布(Canvas)属性。

调用Canvas的作图函数可以在屏幕上画图,如画圆、画线等。

另外,Canvas有一个属性叫Pixels,Pixels是一个二维数组,它的一个元素对应着屏幕上的一个像素点,数组元素的值代表像素点的颜色。

利用Canvas的属性Pixels可以实现一些有趣的功能,下面介绍它的两则应用。

----1.制作背景色----我们在一些软件的安装界面可以看到由深到浅(或由浅到深)的背景色,看起来效果相当不错。

在Delphi中利用Canvas的属性Pixels 可以制作这样的背景色,只要按行或按列改变像素点的颜色就可以了。

一个示例程序的编制过程如下:----(1)建立一个新的应用程序。

----(2)把Form1的属性BorderStyle改为bsNone,在Form1的OnDblClick事件中,键入代码后如下所示:procedureTForm1.FormDblClick(Sender:TObject);varMyColor:Longint;x,y:Word;beginMyColor:=$33;{颜色基数}withCanvasdobegin{当x坐标在外循环,y坐标在内循环时,颜色按列逐渐变化;反之则按行变化}forx:=0toWidthdobeginifxmod4=0then{每隔4列变化一次颜色}beginMyColor:=MyColor+1;{颜色增量为1}end;fory:=0toHeightdobeginPixels[x,y]:=RGB(0,0,MyColor);{用API函数宏RGB合成颜色}end;end;end;end;----(3)运行程序,在窗体中双击鼠标左键,观看运行结果。

----(4)按Alt+F4键,结束运行。

Delphi屏幕绘图

Delphi屏幕绘图

Delphi屏幕绘图Delphi屏幕绘图2008-07-29 00:30以下代码以光标所在位置为中心,在全屏幕上绘制一个十字架:procedure TForm1.Button1Click(Sender: TObject);varFullscreenCanvas:TCanvas;DC:HDC;beginDC:=GetDC(0);//取得屏幕的DC,参数0指的是屏幕FullscreenCanvas := TCanvas.Create;//创建一个CANVAS对象FullscreenCanvas.Handle := DC; //将画布关联到屏幕句柄,以便能做图FullscreenCanvas.MoveTo(mouse.CursorPos.X,0);FullscreenCanvas.LineTo(mouse.CursorPos.x,768);FullscreenCanvas.MoveTo(0,Mouse.CursorPos.Y);FullscreenCanvas.LineTo(1024,Mouse.CursorPos.y);end;以下代码在全屏幕中心绘制一个十字架:procedure TForm1.Button1Click(Sender: TObject);varFullscreenCanvas:TCanvas;DC:HDC;beginDC:=GetDC(0);//取得屏幕的DC,参数0指的是屏幕FullscreenCanvas := TCanvas.Create;//创建一个CANVAS对象FullscreenCanvas.Handle := DC; //将画布关联到屏幕句柄,以便能做图FullscreenCanvas.MoveTo(screen.Width div 2,0);FullscreenCanvas.LineTo(screen.Width div 2,768);FullscreenCanvas.MoveTo(0,Screen.Height div 2);FullscreenCanvas.LineTo(1024,Screen.Height div 2);end;//以下代码实现定时在屏幕正中绘一个十字,一个正方形,一个圆形procedure TForm1.Timer1Timer(Sender: TObject);varMyCanvas:TCanvas;DC:HDC;beginDC:=GetDC(0);MyCanvas:=TCanvas.Create;//MyCanvas.Brush.Color:=clblack; //黑色填充色MyCanvas.Brush.Style:=bsClear; //无背景色MyCanvas.Handle:=DC;//MyCanvas.Brush.Bitmap:=image1.Picture.Bitmap;MyCanvas.MoveTo(screen.Width div 2,0);MyCanvas.LineTo(screen.Width div 2,Screen.Height);MyCanvas.MoveTo(0,screen.Height div 2);MyCanvas.LineTo(screen.Width,screen.Height div 2);MyCanvas.Rectangle(Screen.Width div 2-100,Screen.Height div 2-100,Screen.Width div 2+100,Screen.Height div 2+100); //屏幕正中心绘制一个正方形MyCanvas.Ellipse(Screen.Width div 2-100,Screen.Height div 2-100,Screen.Width div 2+100,Screen.Height div 2+100); //屏幕正中心绘制一个圆形MyCanvas.TextOut(720,300,'我测试再测试,测试直接在屏幕上写字的感觉!'); //在Canvas对象上添加文字end;。

第6章 delphi绘图PPT课件

第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中使用DirectDraw技术进行图形处理

Delphi中使用DirectDraw技术进行图形处理

Delphi中使用DirectDraw技术进行图形处理DirectDraw是一套名为DirectX复杂工具的一部分,DirectX是由许多不同的技术组成,比如:DirectDraw、Direct3D、DirectSound、DirectPlay、DirectInput和DirectSetup等。

其中的每一种技术都是集中了几种处多媒体的技术或游戏的技术,像声音播放、3D图形、网络播放、硬件设备如鼠标和强制反馈等等。

不过,在本章中将只介绍DirectDraw,并且这个主题很容易就会占用一章或更多的章节关于DirectX的其他技术内容,读者可以去参阅其他关于DirectX的书籍。

DirectDraw程序要求用户的系统必须有DirectDraw运行时的DLL,这些运行时文件(实际只是DLL的集合,可能许多机器已经安装了),还可以从Micorsoft的Web站点获取;该站点有各种各样的产品,包括游戏、Windows 98、将来的操作系统Windows NT 5等。

如果读者正在使用的是Windows NT 4,那么至少要用Service Pack 3(SP3)去升级,之后才能够访问作为SP3一部分的DirectDraw 3。

不要试图直接在Windows NT系统下安装运行时的DirectDraw,而应该安装最新的补丁(Service Pack),直接安装运行时的DirectDraw是针对Windows 95/98系统而言的。

确定一个系统是否安装了DirectDraw的一个方法是查看Windows/System或Winnt/System32目录是否存在DDRAW.DLL和DSOUND.DLL,如果有,则说明系统已经安装了DirectDraw。

在可能的情况下,读者应该从Microsoft获取DirectDraw SDK,通常它可以从Microsoft 的Web站点下载得到,不过请注意,它至少有30M。

安装了SDK后,它在硬盘上创建一个名为DXSDK的目录,在这个目录之下是SDK目录,其中包含有各种各样的文档、用C/C++编写的示例文件和帮助文件。

delphi xe 的tgpgraphics用法

delphi xe 的tgpgraphics用法

delphi xe 的tgpgraphics用法Delphi XE 中的 TGpGraphics 是 GDI+ 图形库的一个关键组件,它提供了丰富的图形绘制功能。

使用 TGpGraphics,你可以在 Delphi 应用程序中轻松地绘制各种图形元素,如线条、形状、图像等。

下面将详细介绍 TGpGraphics 的一些基本用法和特性。

首先,要使用 TGpGraphics,你需要创建一个其实例。

这通常是通过在需要绘制的组件(如窗体或面板)的 Paint 事件处理器中完成的。

在 Paint 事件处理器中,你可以获取到当前组件的 GDI+ 图形上下文,即 TGpGraphics 实例。

一旦你有了 TGpGraphics 实例,就可以开始绘制图形了。

你可以使用各种方法,如DrawLine、DrawRectangle、DrawEllipse 等来绘制基本形状。

这些方法通常需要指定颜色、线条样式、填充样式等参数。

例如,你可以使用 DrawLine 方法来绘制一条指定颜色、宽度和样式的线条。

除了基本形状,TGpGraphics 还支持绘制更复杂的图形,如路径和图像。

你可以使用BeginPath 和 EndPath 方法来定义一个路径,并使用 MoveTo 和 LineTo 等方法来添加线条到路径中。

然后,你可以使用 DrawPath 方法来绘制整个路径。

此外,TGpGraphics 还提供了图像处理的功能。

你可以使用 DrawImage 方法来绘制位图图像,并可以指定图像的位置、大小、透明度等属性。

你还可以使用 ImageFromFile 方法来从文件中加载图像,并使用各种图像处理方法来对图像进行变换、裁剪、旋转等操作。

总的来说,TGpGraphics 提供了强大的图形绘制和图像处理功能,使得在 Delphi XE 中进行图形编程变得非常简单和方便。

通过灵活使用 TGpGraphics 的各种方法,你可以创建出丰富多样的图形界面和图形效果。

4.4 Delphi绘图相关对象

4.4 Delphi绘图相关对象

4.4 Delphi绘图相关对象在Delphi中,专门定义了一组用于绘制图形的对象和组件,完成一些简单的图像功能。

利用这些对象、组件的方法,可以方便地绘制各种常用图形;通过设置它们的属性,能得到不同风格的图形。

另外,通过对鼠标事件的定义,可以方便设计图形绘制程序。

(1)TCanvas,TPen,TBrush,TColor对象的方法及属性;(2)绘图功能的实现;(3)TImage,TPicture,TBitBtn,TBitmap组件的方法及属性;(4)图像观测及处理。

4.4.1 TCanvas——画布对象TCanvas对象是一个用于绘图的组件,Delphi利用这个组件为用户提供了一个绘制图形的区域,在这个区域上,程序可实现各种绘图功能,很多组件(如TImage、TMemo)的Canvas属性就是TCanvas对象。

在组件上绘制图形就是在组件的画布上绘制。

TCanvas的B rush、Pen、Font属性分别是TBrush、TPen、TFont对象,它们用于定义绘制图形的风格。

关于TBrush、TPen对象,后面将详细介绍。

需要说明的是,Delphi中利用前缀T来标志内部定义的对象,例如TPen代表画笔对象,TForm则代表窗体对象等。

画布的笔的位置定义在PenPos属性中,可用MoveTo方法来移动笔。

如果要在画布上输出文本,可用Textout方法。

TCanvas对象有很多方法,可完成常用的绘图功能。

方法及功能简介见表4.2。

表4.2 TCanvas对象的方法方法说明ArcArc(x1,y1,x2,y2,x3,y3,x4,y4 : Integer);Arc方法在椭圆上画一段弧,椭圆由(x1,y1)、(x2,y2) 两点所确定的椭圆决定。

弧的起点是椭圆圆周和椭圆中心与(x3,y3)连线的交点。

弧矩形终点是椭圆圆周和椭圆中心与(x4,y4)连线的交点以逆时针方向画弧Chord Chord(x1,y1,x2,yx,x3,y3,x4,y4 : Integer);Chord方法连接椭圆上两点,椭圆由(x1,y1)、(x2,y3) 两点所确定的矩形决定,(x3,y3)是始点,(x4,y4)是终点Brushcopy Brushcopy(const Dest : TRect;Bitmap : TBitmap;const Source TRect;Color : TColor);Brushcopy方法把位图的一部分复制到画布的某个矩形区域,并用画笔的当前颜色替换位图的颜色。

第6章 delphi绘图

第6章 delphi绘图

在做完以上工作之后, 就可以运行程序了, 在做完以上工作之后 , 就可以运行程序了 , 运 行结果如图6 行结果如图6-2。
图6-2 运行结果 Delphi简明教程 简明教程 清华大学出版社 7
6.1.2 椭圆的绘制
在Delphi中绘制椭圆调用的是Ellipse方法,其语法结构如 下: procedure Ellipse(x1,y1,x2,y2 : Integer); 其中,(x1,y1)是椭圆的矩形边界上的左上角坐标,(x2,y2 )是椭圆的矩形边界上的右下角坐标,如果x2-x1等于y2-y1 ,则绘制圆,如果两者不相同,则绘制椭圆。例如下列: 首先设计窗体如图6-1。 然后添加如下代码: private { Private declarations }
Delphi简明教程 简明教程
清华大学出版社
19
图6-8 圆角矩形的绘制 返回 Delphi简明教程 简明教程 清华大学出版社 20
6.2 艺术图案的绘制
在日常的生活中,经常看到各种图案,如钻石外 观等。在delphi中,利用一定的绘图方法也可以绘出这 些艺术图案。下面以金刚石图案和渐变图案为例来说 明艺术图案的绘制方法。 首先如图6-9所示设计窗体,其中用到的所有组件以及过 程名如下: type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Label1: TLabel; Delphi简明教程 简明教程 清华大学出版社 21
图8-5 窗体设计 Delphi简明教程 简明教程 清华大学出版社 13
其中本程序使用到的所有组件以及事件处理过程名如下 : type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); 接着添加如下代码: procedure TForm1.Button1Click(Sender: TObject); var

delphixe绘制曲线实例

delphixe绘制曲线实例

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 paint 原理

delphi paint 原理

delphi paint 原理全文共四篇示例,供读者参考第一篇示例:1. 创建画布:在Delphi程序中,我们可以通过TCanvas对象来表示绘图区域,这个绘图区域就是所谓的画布。

画布可以是一个窗体、一个图像或者其他任何绘图区域,我们可以在上面绘制各种图形和文本。

3. 设置绘图属性:在绘制图形之前,我们可以通过设置TCanvas 对象的各种属性来控制绘图效果,包括颜色、线条宽度、填充模式等等。

这些属性可以帮助我们实现各种炫丽的绘图效果。

第二篇示例:6.保存与导出:用户可以将绘制完成的图形保存为图片文件,支持多种格式如PNG、BMP、JPG等。

用户也可以将绘制的图形导出到剪贴板,方便粘贴到其他应用程序中使用。

第三篇示例:Delphi Paint是一种用于在Delphi编程语言中绘制图形的强大工具。

它提供了一系列丰富的绘图功能,可以帮助开发者实现各种视觉效果,比如绘制线条、矩形、圆形,以及填充颜色等操作。

本文将深入探讨Delphi Paint的原理,帮助读者更好地理解和应用这一强大的工具。

1. Delphi Paint的基本原理Delphi Paint是基于GDI(Graphics Device Interface,图形设备接口)技术实现的,它通过调用Windows系统提供的绘图API来实现绘制图形的功能。

在Delphi中,可以通过Canvas对象来操作绘图功能,实现对窗体、控件等的绘制。

2. Delphi Paint的工作流程当开发者调用Canvas对象的绘图函数时,Delphi Paint会根据传入的参数和指令来实现相应的绘制操作。

比如,如果要绘制一个矩形,开发者可以调用Canvas.Rectangle函数,传入矩形的位置、大小等参数,Delphi Paint会根据这些参数来在指定的位置绘制一个矩形。

3. Delphi Paint的核心功能Delphi Paint提供了丰富的绘图功能,包括绘制线条、矩形、圆形、椭圆等基本图形,以及填充颜色、设置画笔、画刷等高级功能。

delphi drawgrid 用法

delphi drawgrid 用法

delphi drawgrid 用法(实用版)目录1.Delphi 简介2.Delphi 中的 DrawGrid 用法3.DrawGrid 属性设置4.DrawGrid 示例代码正文【1.Delphi 简介】Delphi 是由 Borland 公司开发的一款集成开发环境(IDE),主要用于开发 Windows 平台上的应用程序。

它采用了 Object Pascal 编程语言,并提供了丰富的组件库和功能强大的可视化编程工具,使得开发者可以快速构建出具有良好用户界面和稳定性的应用程序。

【2.Delphi 中的 DrawGrid 用法】在 Delphi 中,DrawGrid 是一个常用的组件,用于在窗体或数据窗口中绘制表格。

DrawGrid 控件提供了丰富的属性设置,可以满足各种不同场景的需求。

【3.DrawGrid 属性设置】DrawGrid 控件的主要属性如下:- GridColor:设置表格颜色- GridLineColor:设置表格线条颜色- GridLineStyle:设置表格线条样式- GridLineWidth:设置表格线条宽度- RowHeight:设置行高- ColumnWidth:设置列宽- Align:设置文本对齐方式- GridLayout:设置表格布局方式- AllowUserResize:允许用户调整大小- AllowUserSort:允许用户排序【4.DrawGrid 示例代码】以下是一个简单的使用 DrawGrid 控件的示例代码:```delphi// 创建一个新的 Delphi 项目// 添加一个 DataWindow 控件到窗体上,命名为 dwMain // 为 DataWindow 添加 DrawGrid 控件varg: TDrawGrid;beging := TDrawGrid.Create(self);g.Parent := dwMain;// 设置 DrawGrid 属性g.GridColor := clRed;g.GridLineColor := clGreen;g.GridLineStyle := lsDot;g.GridLineWidth := 1;g.RowHeight := 20;g.ColumnWidth := 80;g.Align := taCenter;g.GridLayout := glDynamic;g.AllowUserResize := True;g.AllowUserSort := True;// 添加数据g.Data := Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);end.```通过以上示例代码,我们可以在窗体中创建一个具有指定属性的DrawGrid 控件,并添加数据。

delphi圆柱形色彩条

delphi圆柱形色彩条

在Delphi中,你可以使用TChart控件来创建一个圆柱形的色彩条。

TChart是Delphi的一个图表控件,可以用于绘制各种类型的图表,包括圆柱形图。

以下是一个简单的示例,展示如何使用TChart创建一个圆柱形的色彩条:1. 在你的Delphi项目中,打开Form Designer,并从工具箱中拖拽一个TChart控件到Form 上。

2. 在属性面板中,设置Chart的Series属性。

你可以添加一个Series,设置其类型为'Radar'(雷达图)或者'Cylinder'(圆柱形图)。

3. 添加数据点。

在Series中,你可以添加多个数据点,每个数据点都有一个值和一个颜色。

4. 调整Series的属性,如标签、颜色等,以适应你的需求。

5. 运行程序,你应该可以看到一个圆柱形的色彩条。

以下是一个简单的代码示例:```delphiprocedure TForm1.FormCreate(Sender: TObject);vari: Integer;Series: TSeries;begin// 创建系列Series := Chart1.AddSeries(TBarSeries) as TBarSeries;Series.Title := 'Cylinder Series';Series.Values := [10, 20, 30, 40, 50]; // 数据点值Series.Colors := [clRed, clGreen, clBlue, clYellow, clOrange]; // 数据点颜色bels := ['Red', 'Green', 'Blue', 'Yellow', 'Orange']; // 数据点标签end;```请注意,这只是一个简单的示例。

你可以根据需要调整更多的属性,如标签格式、数据点间距等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

TShape组件的属性,事件和方法TImage组件的属性,事件和方法Paintbox组件的属性,事件和方法使用鼠标事件的绘图第 9章图像图形应用编程9.1 图形应用编程本章主要是讲解图形图像对象的概念以及如何在程序运行时绘制图形图像等内容,主要是通过一些例子来讲解 Delphi 7.0 对图形图像强大的处理功能。

在 Delphi 7.0中,专门定义了一组对象和部件用以绘制图形,完成一些简单的图像功能。

利用这些对象、部件的方法,可以方便地绘制各种常用图形;通过设置它们的属性,得到不同风格的图形。

另外,通过鼠标事件的定义,可以方便地设计图形绘制程序。

9.1.1 画布对象属性在图形应用编程中,最常用到的是 canvas类,就是常说的画布。

它可以将某些组件的表面作为一张画布,允许编程者利用有关的命令在其上任意地作图。

很多组件都支持画布这个属性,同时画布本身又是一个对象,它也有自己的属性,但是这些属性必须要在程序执行时才可以来进行设置。

常用的属性有以下几个。

( 1)图形像素数组( PixArray)属性PixArray属性确定用于像素颜色的读取和像素颜色的设置。

( 2)画笔( Pen)属性Pen属性确定画布用做画线及轮廓线的画笔。

9.1.1 画布对象属性 (1)( 3)画刷( Brush)属性Brush属性确定画布用于填充图像及背景色的颜色及图案。

( 4)字体( Font)属性Font属性确定画布的字体。

1,像素像素是构成图形的最基本的单位,画布上每一个点都有对应的像素,用来代表构成一个图形的某一点的颜色。

像素的处理一般包括像素颜色的读取和像素颜色的设置。

最常用的是利用画布的 Pixels属性,来绘制函数曲线。

【例 9-1】用 Pixels属性来画 Y=X的函数曲线。

运行后的界面如图 9-1所示。

图 9-1 用像素来画图主要的功能如下:单击显示按钮,在屏幕上就可以画出 Y=X的函数图。

主要的程序代码如下:图 9-1 用像素来画图9.1.1 画布对象属性 (2)procedure TForm1.Button1Click(Sender,TObject);VAR xt,yt,t:integer; //xt,yt是用来决定像素的位置,t用来控制循环次数。

x,y:real; //x,y是用来取得屏幕的中心beginx:=form1.ClientWidth/2;// ClientWidth属性指的是不包括标题栏在内的宽度。

y:=form1.ClientHeight/2;// ClientHeight属性指的是不包括标题栏在内的高度。

for t:=-10000 to 10000 dobeginxt:=round(t/100+x);{t之所以要除以 100是因为要让像素的显示紧密点没有断断续续的感觉,加上 x是因为原来的中心在( 0,0)的地方,也就是画布的左上角,而现在是要移到( x,y)的地方,将坐标原点进行了移动。

}yt:=round(-t/100+y);canvas.Pixels[xt,yt]:=clblue;//画布的像素颜色为蓝色。

end; end;9.1.1 画布对象属性 (3)2,画笔画布中的画笔属性是用来控制用户画一条线时的线条形状。

画一条线其实就是改变两点间的像素颜色。

画笔本身又包含了四个可以设置的属性:颜色( Color)、宽度( Width)、风格( Style)和显示模式( Mode)。

( 1)颜色属性( Color)在了解颜色属性前,先来了解一下 Windows的颜色系统。

以前可能已经听说了一个颜色是多少位的,这是表示所能表达的颜色数多少的指标,是什么意思呢?比如 1位的颜色则表示 2的一次方,即黑或白两种颜色,这种图片很少见。

8位的颜色则表示最多可以有 28=256种颜色,表明一张图片中最多可以有 256种颜色。

24位的图片可以包含 16M位的颜色。

比如使窗体的背景色为白色则可以用:Form1.Color:=RGB(255,255,255);当然你也可以用数值法来直接表达,如何写呢?在 Delphi 7.0中是在十六进制数前面加$符号。

因为 Windows 98中的颜色系统是 32位的,所以头 8位不用,用 0来表示。

红色可以写成,Form1.Color:=$00FF0000;注意这里是十六进制数。

后 6位每两位代表一个分量( 00-FF),头两位不用。

9.1.1 画布对象属性 (4)接下来了解画笔的颜色属性,它的缺省值为黑色。

如果要将画笔的颜色定义为绿色,那么可以用以下的代码:canvas.pen.color:=clgreen;或者是:canvas.pen.color:=$0000ff00;( 2)风格属性( Style)风格属性是用来设置画笔所画的线的类型,默认值为 psSolid(实线),详见表 9-2。

详见本教程 P152页。

属性值说明 PsClear没有线条 PsSolid实线 PsDash虚线 PsDot圆点PsDashDot点划线 PsDashDotDot双点划线设置画笔的类型可通过如下语句实现,canvas.Pen.Style:=<类型值 >;例如,canvas.Pen.Style:=psDashDot;就设置了画笔的风格类型为点划线。

( 3)显示模式属性( Mode)显示模式属性确定画笔是如何画线的,它的取值有以下几种,详见表 9-3。

详见本教程 P153页。

为了便于表达,可以用三个字母来表示颜色,P(画笔的颜色 ),B(画刷的颜色 ),A(背景中已经存在的颜色 )。

9.1.1 画布对象属性 (5)【例 9-2】画两个方形,并且两个方形之间有一个交集,如图 9-2所示。

图 9-2 pmCopy 属性主要的代码如下:procedure TForm1.Button1Click(Sender,TObject);beginCanvas.Pen.Width:=3; //边框宽度 3Canvas.Pen.Color:=clRed; //画笔颜色:红canvas.Brush.color:=clYellow;//填充色:黄Canvas.Pen.Mode:=pmCopy;//系统默认的模式,可写可不写canvas.Rectangle(10,10,300,300);//画一个矩形,左上角的坐标是( 10,10),右下角的坐标为( 300,300)canvas.Rectangle(50,50,340,340);// 画一个矩形,左上角的坐标是( 50,50),右下角的坐标为( 340,340)end;当把 Canvas.Pen.Mode:=pmCopy;改为 Canvas.Pen.Mode:=pmblack;它的显示效果如图 9-3所示。

9.1.1 画布对象属性 (6 )如果把 Canvas.Pen.Mode:=pmCopy;改为 Canvas.Pen.Mode:=pmwhite;那么图 9-3就变成了白色的了。

如果把 Canvas.Pen.Mode:=pmCopy;改为 Canvas.Pen.Mode:=pmnot,当第一次单击显示按钮的时候,则显示的结果如图 9-4所示。

第二次单击显示按钮的时候,显示结果如图 9-5所示。

记住 pmNot是对背景色求反的一种操作。

图 9-3 pmblack属性图 9-4 pmnot 属性图 9-5 pmnot属性第一次按按钮A,画第一个方形由于背景色是灰色的 RGB(191,191,191),所以他的反色为 RGB(64,64,64)是一种浅黑色。

9.1.1 画布对象属性 (7 )B,画第二个方形在没有图像交叉的部分与画第一个方形没什么两样,背景画图处还是灰色的RGB(191,191,191),所以画出来的还是淡黑色的。

第二次按按钮根据前面讲的外面黑色的部分被反成灰色,而中间的灰色被求了两次反,还是灰色。

如图 9-5所示。

简单地举以上几个例子,其他的属性值自己去尝试一下,你可以看到许多意想不到的效果。

( 4)宽度属性( Width)表示画笔的粗细程度,单位是像素,默认值为 1,表示为一个像素。

设置方式为:canvas.Pen.Width:=<整型 >;例如,canvas.Pen.Width:=5;就设置了画笔的宽度为 5个像素。

3,画刷( Brush)画刷( Brush)属性是用来设置图形内部区域的填充方式。

( 1)颜色( Color)属性颜色属性是来设置画刷的填充区域的颜色,默认情况下是白色。

9.1.1 画布对象属性 (8 )设置方法为 canvas,brush.color:=<属性值 >。

例如 canvas.brush.color:=clred; 就可以将画刷的颜色设置为红色,常见的颜色值参照表9-1。

详见本教程 P155页。

( 2)风格 (Style)属性风格属性是用来确定图形的填充方式,它的取值见表 9-4。

设置方法为,canvas.brush.style:= <类型值 >;例如,canvas.brush.style:= bsCross; 就设置了画刷的线条的类型是十字线。

( 3)位图( Bitmap)属性位图属性用来设置一个存放图形数据的对象,可以在程序运行阶段动态地创建或者删除,常用的命令有:Bitmap.create //创建一个位图对象。

Bitmap.free //释放位图对象。

Bitmap.loadfromfile(‘文件路径’ ) //通过文件路径调入位图,装载在位图对象中。

Bitmap.Draw //在指定的地点按原图的大小显示图形或图像。

9.1.1 画布对象属性 (9 )【例 9-3】位图的创建和释放,主界面如图 9-6所示。

程序代码如下:procedure TForm1.Button1Click(Sender,TObject);varbitmap1:tbitmap;//定义位图变量beginbitmap1:=Tbitmap.Create;//创建位图 bitmap1bitmap1.LoadFromFile('d:/hand.bmp');//装入图像文件form1.Canvas.Draw(10,20,bitmap1);//在坐标( 10,20)的地方显示图形。

bitmap1.Free;//释放位图end;4,作图区域作图区域 Rect是 Trect属性中的对象,同时它也是一个函数。

它的作用就是定义一个矩形区域对象。

Rect对象用两个 Tpoint类型指明区域范围或者用四个整型变量定义区域范围。

图 9-6 位图操作9.1.1 画布对象属性 (10 )它的调用如下:function Rect(ALeft,ATop,ARight,ABottom,Integer),TRect; overload;function Rect(const ATopLeft,ABottomRight,TPoint),TRect; overload;Rect常用的方法有:Rect(x1,y1,x2,y2) //定义 Rect区域范围Fillrect //用填充色填充 Rect区域FloodFill //用填充色填充 Rect之外的区域TextRect //在 Rect对象中显示文本StretchDraw //把 Bitmap填充到 Rect【例 9-4】 Rect对象的方法和属性运行后界面如图 9-7所示。

相关文档
最新文档