- 浏览: 2003683 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (1409)
- asp/asp.net学习 (241)
- oracle (10)
- delphi (295)
- java (27)
- pb (1)
- 每日点滴 (49)
- 学习方法 (40)
- 思想方面 (104)
- C语言 (5)
- C++ (1)
- 代码重构经验 (5)
- 软件工程 (3)
- 数据库 (99)
- 英语学习 (3)
- mysql (1)
- 该关注的网站或者网页 (42)
- 总结 (7)
- 要去做的事情 (33)
- 算法 (1)
- 网络方面 (29)
- 随感 (96)
- 操作系统 (36)
- UML (12)
- 常用工具的使用 (55)
- 脚本 (7)
- 汇编 (62)
- 数据结构 (2)
- 财务 (38)
- 语文作文 (16)
- 法律 (1)
- 股票 (88)
最新评论
-
devwang_com:
可以,学习了~~
列出文件夹下所有文件夹的树形结构--Dos命令 tree的使用 -
hvang1988:
不管用啊 frxrprt1.PreviewForm.Pare ...
fastReport预览时嵌入到别的窗体 -
00915132:
我也有这个疑问,非常 感 谢
left join加上where条件的困惑 --SQL优化 -
zhuyoulong:
学习了,高效读书
软件架构师要读的书 -
nTalgar:
非常感谢分享!
Application.ProcessMessages用法:
以往开发Windows图形软件大多用 VC ++ 作为开发/tool/">工具, VC++强大的图形功能可以让/doc/">程序员编制出许多优秀的与图形相关的软件。
VC++ 中与绘图相关的函数都封装在CDC及其衍生的CClientDC,CpaintDC,CwindowDC中。 字串9
Delphi中也有一个与CDC相类似的类Tcanvas, 它封装了Delphi 中的绘图函数。我们可以把Delphi和VC中相同或相近的方法做个有趣的比较。 字串1
(一)Canvas和 CDC绘图方法比较: 字串3
我们可以从以下表格中看到Tcanvas和 CDC相似的函数: 字串1
表 1--1 字串6
Canvas方法 CDC方法 功能
Arc Arc 画一个椭圆弧
Chord Chord 画一根玄。
CopyRect 拷贝指定矩形区域中图象到指定矩形
Draw BitBlt 拷贝位图
Ellipse Ellipse 画椭圆
FillRect PaintRgn 使用刷子填充一个又一个矩型
FloodFill FloodFill 用当前刷子填充区域
FrameRect FrameRect 画一个矩形框
Lineto Lineto 画线到
Moveto Moveto 移 到
Pie Pie 画扇形
Polygon Polygon 画多边形
PolyLine PolyLine 画多根相连的线
Rectangle Rectangle 画一个实心矩形
RoundRect RoundRect 画一个圆角的矩形
StretchDraw StretchBlt 从源图象中
移动图象到指定矩形
TextWidth GetCharWidth 返回字符宽
TextOut TextOut 在指定坐标写字
TextRect ExtTextOut 在制定矩形中写字
上表中,我们只列出部分绘图函数,详细了解,请参阅有关Delphi和VC书籍.
与VC++ 相类似, Delphi也提供了绘图/tool/">工具,如 Tpen,Tbrush等,与VC不同的是, Delphi的绘图/tool/">工具封装在Tcanvas中。Delphi也提供字形及字体大小的类Tfont,下面我们用具体例子来分析它们的用法。 字串4
(二)用Delphi 制作Window95/NT图形软件。 字串6
象使用VC 一样,我们先用Delphi的Wizard 建立一个 SDI 应用/doc/">程序。Delphi 自动建立SDI 框架, 先运行一次。/doc/">程序现在还不能干任何事。下一步开始添加代码。
字串9
编辑主菜单。 增加Write,Draw俩个下拉菜单项。 在"Write"下增加"HelloWorld!!","Iamateacher ","Font.."菜单项.在 aw"下增加"Arc","Line", "Polygon","RoundRect","Rectangle","color." ,"LineStyle","WidthLine". 在"LineStyle" 菜单下增加"Solid","Dash","Dot","DashDot", "DashDotDot" 子菜单。
字串4
相应的在SdiForm中增加ColorDialog,FontDialog, /com/">控件。 字串9
在OnPaint事件中增加如下代码:
字串8
procedureTSDIAppForm.FormPaint(Sender:TObject);
begin
canvas.FillRect(rect);{清空桌面画布}
withSDIappformdo
posx:=clientwidthdiv2;
posy:=clientheightdiv2;{确定客户区中心点}
casedetectIof
1:
begin
setpenstate;
canvas.Ellipse(posx-50,posy-50,posx+50,posy+50);
//penwidth:=oldwidth;
end;{在客户区中心点画圆}
2:
begin
setpenstate;
canvas.MoveTo(posx-60,posy-60);
canvas.LineTo(posx+60,posy+60);
//penwidth:=oldwidth;
end;{在客户区画直线} 字串3
3:
begin
fposx:=trunc(50*cos(pi/6));
fposy:=trunc(50*sin(pi/6));
setpenstate;
Canvas.Polygon([Point(posx-fposy,posy-fposx),
Point(posx+fposy,posy-fposx),
Point(posx+50,posy),Point(posx+fposy,posy+fposx),
point(posx-fposy,posy+fposx),point(posx-50,posy)]);
//penwidth:=oldwidth;
end;{在客户区中心点画多边形}
4:
begin
setpenstate;
canvas.RoundRect(posx-100,posy-50,posx+100,posy+50,
20,20);
end;{在客户区中心点画带圆角的矩形} 字串9
5:
begin
setpenstate;
sdiappform.Canvas.Brush.Color:=clred;
canvas.Rectangle(posx-100,posy-50,posx+100,posy+50);
sdiappform.Canvas.Brush.Color:=bcolor;
end{在客户区中心点用红色刷子画矩形}
else
begin
canvas.Font:=formfont;
canvas.TextOut(30,posy,str);
end;
end;{写字}
end;
上面/doc/">程序中出现的变量在事件OnCreate中初始化。
procedureTSDIAppForm.FormCreate(Sender:TObject);
begin
str:=;{要写在画布上的字符串}
formfont:=canvas.font;{字体和大小}
detectI:=0;{确定画布上出现何种图形的参数}
rect:=sdiappform.ClientRect;{客户区矩形}
oldwidth:=sdiappform.Canvas.Pen.Width;{最初画笔宽度}
penwidth:=oldwidth;{画笔宽度}
penstyle:=sdiappform.Canvas.Pen.Style;{画笔类型}
pencolor:=sdiappform.Canvas.Pen.Color;{画笔颜色}
bcolor:=sdiappform.Canvas.Brush.Color;{画刷颜色}
end;
为了减少代码,定义了一个Public过程,设定画笔。代码如下: 字串8
procedureTSDIAppForm.setpenstate;
begin
withsdiappform.Canvas.Pendo
begin
color:=pencolor;
style:=penstyle;
width:=penwidth;
end;
end;
响应每一个菜单项OnClick事件本/doc/">程序设计得非常简单,如果有兴趣,读者也可以加上一些代码,完成许多复杂的工作。
procedureTSDIAppForm.LineColor1Click(Sender:TObject);
begin
ifcolordialog1.Executethen
begin
pencolor:=colordialog1.Color;
SdiAppForm.Canvas.Pen.Style:=psInsideFrame;
ifpenwidth$#@60;1then
SdiAppForm.Canvas.Pen.Width:=3;
SdiAppForm.Canvas.Pen.Color:=pencolor;
invalidate;
end;
end;{完成画笔颜色设定}
//{完成画笔笔形设定}
procedureTSDIAppForm.Solid1Click(Sender:TObject);
begin
penStyle:=pssolid;
invalidate;
end;
字串8
procedureTSDIAppForm.Dot1Click(Sender:TObject);
begin
PenStyle:=psdot;
invalidate;
end;
字串8
procedureTSDIAppForm.Dash1Click(Sender:TObject);
begin
penStyle:=psdash;
invalidate;
end;
字串3
procedureTSDIAppForm.DashDot1Click(Sender:TObject);
begin
PenStyle:=psdashdot;
invalidate;
end;
字串3
procedureTSDIAppForm.DashDotDot1Click(Sender:TObject);
begin
penStyle:=psdashdotdot;
invalidate;
end;
//////////////////////////////////
procedureTSDIAppForm.RoundRect1Click(Sender:TObject);
begin
detectI:=4;
invalidate;
end;
字串7
procedureTSDIAppForm.Rectangle1Click(Sender:TObject);
begin
detectI:=5;
invalidate;
end;
字串4
procedureTSDIAppForm.Helloworld1Click(Sender:TObject);
begin
detectI:=0;
str:=helloworld!!;
Invalidate; 字串7
end;
字串6
procedureTSDIAppForm.Imateacher1Click(Sender:TObject);
begin
detectI:=0;
str:=Iamateacher!!;
Invalidate;
end; 字串2
procedureTSDIAppForm.Fonts1Click(Sender:TObject);
begin
iffontdialog1.Executethen
begin
detectI:=0;
formfont:=fontdialog1.font;
invalidate;
end;
end;{设定字体和大小}
编译并运行,可以看到画图的效果。
(三)图形的拷贝和剪贴
字串8
通过剪贴板可以完成拷贝和剪贴的功能。Canvas 不直接支持剪贴板,完成Canvas上图画拷贝和张贴关键技巧是通过一个Tbitmap变量,把Canvas 上的图形先复制到Tbitmap上,再把Tbitamp和window的剪贴板连起来,反过来也一样。 字串5
Delphi通过鉴定Wizard建立的SDI/doc/">程序中,有关 Edit命令的Click事件定义在ActionList/com/">控件中,相关代码如下:
字串7
//拷贝图形到剪贴板
procedureTSDIAppForm.EditCopy1Execute(Sender:TObject);
var
bmp:tbitmap;//设置一个图形变量
begin
bmp:=tbitmap.Create;
bmp.Width:=rect.Right+10;
bmp.Height:=rect.Bottom+10;
bmp.canvas.CopyRect(rect,sdiappform.canvas,rect);
clipboard.Assign(bmp);
bmp.free;
end;
//从剪贴板上复制
procedureTSDIAppForm.EditPaste1Execute(Sender:TObject);
var
bmp:tbitmap;//设置一个图形变量
begin
ifclipboard.HasFormat(CF_BITMAP)then
begin
bmp:=tbitmap.create;
bmp.Assign(clipboard);
sdiappform.Canvas.draw(0,0,bmp);
bmp.free;
end
elseifclipboard.HasFormat(CF_TEXT)then
begin
str:=clipboard.AsText;
detectI:=0;
invalidate;
end; 字串5
end;
//剪下图形拷贝到剪贴板
procedureTSDIAppForm.EditCut1Execute(Sender:TObject);
begin
EditCopy1Execute(sender);
withsdiappform.Canvasdo
begin
copymode:=cmwhiteness;
copyRect(rect,sdiappform.Canvas,rect);
CopyMode:=cmSrcCopy;
end;
end;
也可以把已有的图形文件直接拷贝在Canvas上,本/doc/">程序通过菜单Open命令完成这一操作。
procedureTSDIAppForm.FileOpen1Execute(Sender:TObject);
var
bmp:Tbitmap;
currentfile:string;
begin
ifOpenDialog.Executethen
begin
currentfile:=OpenDialog.filename;
ifcurrentfile$#@60;$#@62;then
try
bmp:=tbitmap.Create;
bmp.LoadFromFile(currentfile);
sdiappform.Canvas.StretchDraw(rect,bmp);
finally
bmp.Free;
end;
字串9
end; 字串1
end;
本/doc/">程序只是简单的讨论了Canvas绘图功能,离图形软件包还相差很远,而且打开图形文件显示在Canvas中还有些问题,希望读者中/">编程高手能帮我改正。
字串7
发表评论
-
form打开时的关闭代码
2011-10-25 20:29 1514摘自:http://topic.csdn.n ... -
TUpdateSQL更新问题 提示Update Failed
2011-08-29 20:26 1193摘自:http://topic.csdn.net/u/200 ... -
图解如何用Eurekalog跟踪程序错误
2011-08-12 07:28 906图解如何用Eurekalog跟踪程序错误 摘自:h ... -
VirtualBox 复制VDI 并能创建新的虚拟机
2011-07-21 11:14 2685摘自:http://www.nonabyte.net/how- ... -
截获所有异常 不报错
2011-07-12 16:52 1197摘自:http://media.ccidnet.c ... -
delphi exe程序以及DLL程序如何在模块内部获得各自的路径
2011-07-11 16:38 1262delphi Exe程序以及DLL程序如何在模块内部获得各自的 ... -
Delphi文本文件读写
2011-07-11 14:55 1175Delphi文本文件读写 (2008-10-31 1 ... -
Delphi自定义的消息的使用
2011-05-31 14:12 2268阅:已验证,可通过; 摘自:http://blog.1 ... -
怎么查看OutputDebugString输出的信息?debugview
2011-05-25 16:02 3794网上很多说用debugview查看,我自己写了一个程序,里面用 ... -
Delphi里查看该变量的内存值
2011-05-25 13:32 1087Delphi里查看该变量的内存值:Run==>Evalu ... -
注册表操作 写入autorun启动项,键值为本程序的全路径
2011-05-20 15:40 1778procedure TForm4.Button2Click ... -
报说包frx7和frxdb7都包含了某个单元的错误
2011-05-11 09:59 9741. 问题描述:在安装FastReport3的时候,安装到- ... -
Delphi中使用ListView和TreeView的Item中的Data可能被忽略的内存泄漏
2011-05-03 14:34 1426摘自:http://blog.csdn.net/g ... -
WM_USER的说明 用户消息ID
2011-04-28 10:46 1637WM_USER 摘自:http://baike.bai ... -
ToolButton不能改变大小
2011-04-28 10:38 3431问题描述:ToolButton不能改变大小? 问 ... -
Delphi里TOOLBAR 上的button的caption为什么显示不出来啊
2011-04-20 17:55 1705Delphi里TOOLBAR 上的button的caption ... -
delphi指针简单入门
2011-04-11 21:42 1107摘自:http://topic.csdn.net/t/2003 ... -
Delphi中paramstr的用法 应用程序间传递数据
2011-04-01 14:33 2041Delphi中paramstr的用法 应用程序间传递数据 ... -
Delphi中的THashedStringList对象 --大数据量时
2011-04-01 13:54 5088Delphi中的THashedStringLi ... -
inherited Create(AOwner); 和直接写inherited有区别吗
2011-03-26 15:44 1280摘自:http://zhidao.baidu.com/que ...
相关推荐
功能包含:绘制线段、矩形、椭圆形、控制粗细、调整颜色、旋转图形、平移图形、缩放图形,满足填充颜色、插入图片、另存为、暗角、降低亮度、灰度、浮雕、马赛克、锯齿等操作。资源包含:演示视频,项目源代码
2.1_canvas绘图章节课程介绍|canvas绘图详解|Canvas图形、动画、游戏开发从入门到精通全系列课程
2.4_多边形的填充和closePath|canvas绘图直线与多边形|Canvas图形、动画、游戏开发从入门到精通全系列课程
2.2_回顾canvas基础|canvas绘图直线与多边形|Canvas图形、动画、游戏开发从入门到精通全系列课程
2.3_线条组成的图形和beginPath|canvas绘图直线与多边形|Canvas图形、动画、游戏开发从入门到精通全系列课程
2.6_小结|canvas绘图直线与多边形|Canvas图形、动画、游戏开发从入门到精通全系列课程
2.5_矩形、覆盖和透明色|canvas绘图直线与多边形|Canvas图形、动画、游戏开发从入门到精通全系列课程
1.16_canvas小结之下个阶段canvas绘图详解内容提前预告|倒计时粒子效果|Canvas图形、动画、游戏开发从入门到精
第1章 基础知识 1 1.1 canvas元素 1 1.1.1 canvas元素的大小与绘图表面的大小 4 1.1.2 canvas元素的api 5 1.2 canvas的绘图环境 6 1.2.1 2d绘图环境 6 1.2.2 canvas状态的保存与恢复 8 1.3 本书程序清单的...
HTML5 canvas 元素的出现填补了这种不足,开发人员可以使用 JavaScript 脚本语言在 canvas 中进行一系列基于命令的图形绘制操作,本文将通过讲解如何使用 canvas 元素进行基本绘图操作,以及完成简单的动画和用户...
4.4.4 使用canvas的原始绘图函数进行绘图 / 93 4.4.5 使用lsprite对象进行绘图 / 94 4.4.6 使用lgraphics对象绘制图片 / 95 4.5 文本 / 101 4.5.1 文本属性 / 101 4.5.2 输入框 / 102 4.6 事件 / 103 4.6.1 ...
主要介绍了Android编程开发之在Canvas中利用Path绘制基本图形的方法,涉及Android基本的图形绘制技巧,结合实例分析了绘制圆形,矩形,椭圆,三角形等基本图形的实现方法,需要的朋友可以参考下
绘图,实现主观题批阅,对错箭头,图形文字等,可撤销可保存 json保存 原生开发 作业批改
该时钟基于Canvas实现,充分利用了Canvas2D绘图API的优势,让前端可视化技能更上一层楼,同时它是浏览器提供的一种可以直接用代码在一块平面的“画布”上绘制图形的 API,使用它来绘图更像是传统的“编写代码”,...
1. 可以在canvas上使用鼠标直接绘图(直线、圆、贝塞尔曲线) 2. 可以设置填充颜色及边框颜色 3. 可以设置渐变颜色 4. 可以放大或缩小图形 5. 可以将绘制的图形转换成json保存,并且可以根据保存的json转换成图形
HTML5canvas元素的出现填补了这种不足,开发人员可以使用JavaScript脚本语言在canvas中进行一系列基于命令的图形绘制操作,本文将通过讲解如何使用canvas元素进行基本绘图操作,以及完成简单的动画和用户交互任务,...
Skia Canvas是Node.jsHTML Canvas绘图API的无浏览器实现。 Skia Canvas Skia Canvas是Node.jsHTML Canvas绘图API的无浏览器实现。 它基于Google的Skia图形引擎,因此产生的结果与Chrome的结果非常相似 元素。 尽管该...
虽然Canvas提供了强大的绘图功能,但满足不了高级开发的需要。利用CasualJS的显示对象架构及渲染机制,你可以轻松的在Canvas中操控各种位图、图形、影片剪辑等显示对象,就如同在用AS3开发一样愉快。
一种特效图形 使用TChart ...绘图 翻转位图 读EXE文件主图标 转换BMP为ICO 转换BMP为JPEG 转换BMP为RTF代码 转换BMP为WMF 转换ICO为BMP 转换JPEG为BMP 转换RGB为BGR 转换WMF为BMP 转换彩色图像为灰色