Delphi中使用GDI+进行绘图(1)
2016-04-11 21:33
615 查看
Delphi的VCL类库中,默认使用的是GDI绘图接口,该接口封装了Win32 GDI接口,能够满足基本的绘图功能,但如果要实现更高级的绘图功能,往往比较困难,GDI+是微软在GDI之后的一个图形接口,功能比GDI丰富很多,在VCL中使用GDI+,能够实现很多高级绘图功能。
目前有多种Delphi对GDI+的封装实现,以下介绍最简单的两种:
1、使用Delphi内置的GDI+接口
首先,创建一个VCL Form应用,窗口文件如下:
Pascal Code
代码如下:
Pascal Code
以下是运行结果:
![](http://static12.photo.sina.com.cn/middle/001DabtBzy6XXWRehnReb&690)
其中Winapi.GDIPAPI, Winapi.GDIPOBJ, Winapi.GDIPUTIL三个单元是Delphi提供的对GDI+的封装,可以看到使用GDI+是很方便的。
仔细看代码可以发现,使用Delphi内置的GDI+支持,还是有些不足,关键的地方是所有的绘图对象都是普通的对象,需要手工释放,增加了很多不必要的代码。
Delphi利用接口可以实现自动的垃圾收集,所以使用接口可以有效地简化代码。
http://blog.sina.com.cn/s/blog_591968570102vwsw.html
目前有多种Delphi对GDI+的封装实现,以下介绍最简单的两种:
1、使用Delphi内置的GDI+接口
首先,创建一个VCL Form应用,窗口文件如下:
Pascal Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | object GDIPlusDemoForm1: TGDIPlusDemoForm1 Left = 0 Top = 0 Caption = 'GDIPlusDemoForm1' ClientHeight = 247 ClientWidth = 524 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object pb1: TPaintBox Left = 24 Top = 16 Width = 473 Height = 209 OnPaint = pb1Paint end end |
Pascal Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | unit GDIPlusDemo1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Winapi.GDIPAPI, Winapi.GDIPOBJ, Winapi.GDIPUTIL; type TGDIPlusDemoForm1 = class(TForm) pb1: TPaintBox; procedure pb1Paint(Sender: TObject); private { Private declarations } public { Public declarations } end; var GDIPlusDemoForm1: TGDIPlusDemoForm1; implementation {$R *.dfm} procedure TGDIPlusDemoForm1.pb1Paint(Sender: TObject); var g: TGPGraphics; p: TGPPen; b: TGPBrush; r: TGPRect; begin g := TGPGraphics.Create(pb1.Canvas.Handle); p := TGPPen.Create(aclRed, 2); b := TGPSolidBrush.Create(aclAliceBlue); try r := MakeRect(20, 20, 100, 60); g.FillRectangle(b, r); g.DrawRectangle(p, r); finally p.Free; b.Free; g.Free; end; end; end. |
其中Winapi.GDIPAPI, Winapi.GDIPOBJ, Winapi.GDIPUTIL三个单元是Delphi提供的对GDI+的封装,可以看到使用GDI+是很方便的。
仔细看代码可以发现,使用Delphi内置的GDI+支持,还是有些不足,关键的地方是所有的绘图对象都是普通的对象,需要手工释放,增加了很多不必要的代码。
Delphi利用接口可以实现自动的垃圾收集,所以使用接口可以有效地简化代码。
http://blog.sina.com.cn/s/blog_591968570102vwsw.html
相关文章推荐
- Delphi/C#之父首次访华:55岁了 每天都写代码
- Delphi Android程序启动过程
- 关于Delphi XE2的FMX的一点点研究之消息篇
- 吐血整理 Delphi系列书籍 118本(全)
- Delphi实现文件关联
- delphi 注册表操作(读取、添加、删除、修改)完全手册
- delphi socket客户端连接服务端时的错误
- 关于Delphi7中日期函数StrtoDate的正确用法 win7报错
- delphi 修改代码补全的快捷键(由Ctrl+Space 改为 Ctrl + alt + Space)
- Delphi 对泛型TList的的改进(TSimpleList)
- Delphi中Frame的使用方法(2)
- Delphi中Frame的使用方法(1)
- delphi 读网页线程TReadHtmlThread
- delphi 对TThread扩充TSimpleThread
- delphi 关于命名
- Delphi2010怎样获取程序内部自身版本?
- delphi 实现采集
- TControlStyle.csParentBackground的作用(附Delphi里的所有例子,待续)
- 用Delphi实现文件关联
- Delphi 7使用自定义图标关联文件类型