Delphi实例之橡皮筋画图的实现
Delphi实例之橡皮筋画图的实现
在《Delphi7基础教程》这本书的练习中提到过一个橡皮筋画图的例子,书上的源码是错误的!不知道是打印的错误还是本身源码就有问题,我将它改了过来。
在Form1上放置一个Image组件,Image1的Align设为Client。
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls; type
TForm1 = class(TForm)
Image1: TImage;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1;
Prior,Origin:TPoint;{Oringin用于记录起始位置也就是鼠标按下的位置,Prior用于记录最后的位置也就是放开鼠标的位置}
IsDown:boolean=false;{用于判断鼠标是否仍处于按下的状态} implementation {$R *.dfm} procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IsDown:=true;
Image1.Canvas.Moveto(x,y);
Origin:=Point(x,y);
Prior:=Point(x,y){记录下按下时的位置,此时Origin和Prior重合}
end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); var
pX,pY:integer;
begin
Form1.DoubleBuffered:=true;
if isDown then
begin
pX:=Prior.X;
pY:=prior.Y;{着两个值用于保存上一次的位置}
Prior:=Point(x,y);
Image1.Canvas.MoveTo(Origin.x,origin.Y);
Image1.Canvas.Lineto(Prior.X,Prior.Y);{显示现在的线}
Image1.Canvas.Pen.Mode:=pmNotXor;{通过异或操作删掉上一条线}
Image1.Canvas.MoveTo(Origin.x,origin.Y);
Image1.Canvas.Lineto(pX,pY); end; end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IsDown:=false ;
Image1.Canvas.Pen.Mode:=pmCopy; Image1.Canvas.MoveTo(Origin.x,origin.Y);
Image1.Canvas.Lineto(Prior.X,Prior.Y); {放开鼠标,画出最后的线} end; end.
Delphi实例之橡皮筋画图的实现的更多相关文章
- (转载)delphi实例TDBGrid用右键菜单复制行粘贴行
delphi实例TDBGrid用右键菜单复制行粘贴行 这个从本质上来说就是DBGrid后台数据库的插入 右键复制当前行的相关数据到临时变量点粘贴时,覆盖数据或插入数据! db为数据库: 字段名id,n ...
- Delphi实例之一个简易的浏览器的实现
Delphi实例之一个简易的浏览器的实现 Delphi7的WebBrowser组件提供了很多不错的网页设计的功能,下面做一个简单的浏览器.组件很简单按照下面摆放就行了. 这是运行后的效果 源代码 主页 ...
- Delphi实例之绘制正弦函数图像
Delphi实例之绘制正弦函数图像 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphic ...
- Delphi实例-IdTCPServer和IdTCPClient的使用(支持文件发送)
相关资料: http://blog.csdn.net/earbao/article/details/46514313 结果注意: 1.Use IdContext.IdGlobal 这两个单元2.不能使 ...
- Delphi实例之一个较复杂的记事本的实现
http://www.mamicode.com/info-detail-110813.html delphi中控件位置及自动排版的问题 http://blog.csdn.net/avan_lau/ar ...
- Delphi实例分析:远程传输数据和文件
在Windows操作系统的平台上,WinSock是首选的网络编程接口,用于在网络上传输数据和交换信息,它构成了Windows操作系统进行网络编程的基础.对于编写网络应用程序来说,WinSock是一门非 ...
- 调用DLL窗体-Delphi实例
(一)通过向导DLL Wizard新建一个动态链接库,取名为:DLLPro.dpr.说明:当在DLL工程文件中使用了String类型时,要有 uses ShareMem ,不过建议使用PChar类型. ...
- canvas实例_在线画图工具
fadsfklasdjfklasjdklfjasdlk;fjasd;lfjaskl;dfjal
- [delphi]运行cmd命令,并取得输出字符
http://blog.csdn.net/nerdy/article/details/8969189 [delphi]运行cmd命令,并取得输出字符 标签: delphiCMD命令 2013-05- ...
随机推荐
- Webstorm 添加新建.vue文件功能并支持高亮vue语法和es6语法
添加新建.vue文件功能 ①Webstorm 右上角File-Plugins 搜索vue如果没有就去下载 点击serch in repositories ②点击安装vue.js ③安装成功后点击右下角 ...
- SyncUI跨设备同步
SynUI控制代码 <script type="text/javascript"> /* SyncUI script (Learn more at http://syn ...
- Java8函数之旅 (六) -- 使用lambda实现Java的尾递归
前言 本篇介绍的不是什么新知识,而是对前面讲解的一些知识的综合运用.众所周知,递归是解决复杂问题的一个很有效的方式,也是函数式语言的核心,在一些函数式语言中,是没有迭代与while这种概念的,因为此类 ...
- uCOS-II消息邮箱的使用
具体使用方法与信号量的方式大同小易. 首先建立一个OS_EVENT结构体(事件控制块)的指针: OS_EVENT *MSBOX; 然后建立消息邮箱,返回值为事件控制块的指针: MSBO ...
- react(三):容器组件和傻瓜组件
让一个组件只专注于一件事,如果发现让一个组件做的事情太多,就可以把这个组件拆分成多个组件让每一个组件只专注于一件事 <深入浅出react和redux> ---程墨 一个react组件最基本 ...
- Java实现桶排序
public class BucketSort { public static void main(String[] args) { int[] list = {1000, 192, 221, 12, ...
- Qt数据库编程1
Qt中数据编程主要分为以下两点:1.利用qt提供类 访问数据库或者成为简单的数据库编程2.数据库编程中引入model/view编程模型 qt中数据库编程的步骤: 1.加载数据库驱动 QSqlDatab ...
- Django模板简介
在settings.py中有个TEMPLATES的设置,其中BACKEND用来配置Django模板引擎, DIRS 定义了一个目录列表,模板引擎按列表顺序搜索这些目录以查找模板源文件 一般我们都会把模 ...
- Lintcode算法
题目: 给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数. 样例 给出 [1, 20, 23, 4, 8],返回组合最大的整数应为8423201. 思路:直接交换两个数,然后判断交换之后的 ...
- 编辑文件出现:E212 can’t open file for writing
前面目录没有创建 还可能是权限问题