一个 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_GLYPH_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); var ARect: TRect; begin //实现了剪切效果; with Image1.Canvas do begin CopyMode := cmWhiteness; //