Delphi实例之橡皮筋画图的实现

Delphi实例之橡皮筋画图的实现

在《Delphi7基础教程》这本书的练习中提到过一个橡皮筋画图的例子,书上的源码是错误的!不知道是打印的错误还是本身源码就有问题,我将它改了过来。

在Form1上放置一个Image组件,Image1的Align设为Client。

 1 unit Unit1;
 2
 3 interface
 4
 5
 6 uses
 7   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 8   Dialogs, ExtCtrls;
 9
10 type
11   TForm1 = class(TForm)
12     Image1: TImage;
13     procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
14       Shift: TShiftState; X, Y: Integer);
15     procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
16       Y: Integer);
17     procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
18       Shift: TShiftState; X, Y: Integer);
19   private
20     { Private declarations }
21   public
22     { Public declarations }
23   end;
24
25 var
26   Form1: TForm1;
27   Prior,Origin:TPoint;{Oringin用于记录起始位置也就是鼠标按下的位置,Prior用于记录最后的位置也就是放开鼠标的位置}
28   IsDown:boolean=false;{用于判断鼠标是否仍处于按下的状态}
29
30 implementation
31
32 {$R *.dfm}
33
34 procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
35   Shift: TShiftState; X, Y: Integer);
36 begin
37   IsDown:=true;
38   Image1.Canvas.Moveto(x,y);
39   Origin:=Point(x,y);
40   Prior:=Point(x,y){记录下按下时的位置,此时Origin和Prior重合}
41 end;
42
43 procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
44   Y: Integer);
45
46 var
47   pX,pY:integer;
48 begin
49   Form1.DoubleBuffered:=true;
50   if isDown then
51   begin
52     pX:=Prior.X;
53     pY:=prior.Y;{着两个值用于保存上一次的位置}
54     Prior:=Point(x,y);
55     Image1.Canvas.MoveTo(Origin.x,origin.Y);
56     Image1.Canvas.Lineto(Prior.X,Prior.Y);{显示现在的线}
57     Image1.Canvas.Pen.Mode:=pmNotXor;{通过异或操作删掉上一条线}
58     Image1.Canvas.MoveTo(Origin.x,origin.Y);
59     Image1.Canvas.Lineto(pX,pY);
60
61
62   end;
63
64 end;
65
66 procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
67   Shift: TShiftState; X, Y: Integer);
68 begin
69   IsDown:=false ;
70   Image1.Canvas.Pen.Mode:=pmCopy;
71
72     Image1.Canvas.MoveTo(Origin.x,origin.Y);
73     Image1.Canvas.Lineto(Prior.X,Prior.Y); {放开鼠标,画出最后的线}
74
75 end;
76
77 end.

Delphi实例之橡皮筋画图的实现

时间: 2024-10-11 05:35:28

Delphi实例之橡皮筋画图的实现的相关文章

Delphi实例之一个较复杂的记事本的实现

Delphi实例之一个较复杂的记事本的实现 by Chaobs 一.概述 前几天在学习Delphi时照着书上的练习做了一个记事本程序,自己略加改进,将过程记录下来也是方便初学者学习,其中多有错误还望指点. 功能: (1).基本实现了Windows自带的记事本的功能: (2).具有字体设置.字体颜色和自动排版的设计: (3).加入了日历的功能. 运行界面(UI做的很丑诃): 设计思想: 通过Delphi组件中的RichEdit实现文本的编辑,OepnDialog和SaveDialog用于打开和保存

Delphi实例之一个简易的浏览器的实现

Delphi实例之一个简易的浏览器的实现 Delphi7的WebBrowser组件提供了很多不错的网页设计的功能,下面做一个简单的浏览器.组件很简单按照下面摆放就行了. 这是运行后的效果 源代码 主页面 1 unit Unit1; 2 3 interface 4 5 uses 6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 Dialogs, StdCtrls, Buttons, ComC

Delphi实例-IdTCPServer和IdTCPClient的使用(支持文件发送)

相关资料: http://blog.csdn.net/earbao/article/details/46514313 结果注意: 1.Use IdContext.IdGlobal 这两个单元2.不能使用string类型,在分存分配时会出错的.3.手机中不支持string[20]. 实例代码: 1 unit Unit1; 2 3 interface 4 5 uses 6 System.SysUtils, System.Types, System.UITypes, System.Classes, S

调用DLL窗体-Delphi实例

(一)通过向导DLL Wizard新建一个动态链接库,取名为:DLLPro.dpr.说明:当在DLL工程文件中使用了String类型时,要有 uses ShareMem ,不过建议使用PChar类型.其代码如下: library DLLPro; //编译生成DLLPro.dll文件. uses ActiveX, Forms, Windows, SysUtils, Classes, DLLUnt in 'DLLUnt.pas'; {$R *.res} var DllApp:TApplication

Delphi 2007体验!

Delphi 2007体验! baidu 内容摘要:CodeGear(From Borland) 公司公布了最新的Delphi 2007 For Win32版本号.作为一个 Delphi 的使用者,第一时间下载.安装并进行了体验,现将一些使用感受记录例如以下 CodeGear(From Borland) 公司公布了最新的Delphi 2007 For Win32版本号.作为一个 Delphi 的使用者,第一时间下载.安装并进行了体验,现将一些使用感受记录例如以下: 注:以下的对照主要是针对Del

[C#]画图全攻略(饼图与柱状图)(转)

http://blog.chinaunix.net/uid-15481846-id-2769484.html 首先建立一个c#的类库.   打开vs.net,建立一个名为Insight_cs.WebCharts新的类库工程,将解决方案的名称改为Insight,将Class.cs文件名改为Insight_cs.WebCharts.cs,最后打开Insight_cs.WebCharts.cs文件.其中代码如下:   /*自定义类,通过输入不同的参数,这些类可以画不同的图形 */      using

吐血整理 Delphi系列书籍 118本(全)

Delphi 教程 系列书籍 网友(老帅)整理 001_<Delhpi6数据库设计思想与实践> 002_<Delphi6应用开发指南> 003_<Delphi6开发人员指南> 004_<Delphi6数据库开发典型实例> 005_<Delphi6组件大全> 006_<深入Delphi6 网络编程> 007_<Delphi6数据库深入编程技术> 008_<Delphi6程序设计教程> 009_<Delphi

经典------------------------------delphi教程网!

http://bbs.guanjia.qq.com/forum.php?mod=forumdisplay&fid=63; 电脑管家误报,提交地址. 自己公司网址 http://www.kaideruixin.icoc.cc/ 本本驱动网站   http://www.dell800.com/thread-57450-1-1.html 有技术能成为老板赚大钱的 100万分之一 有理想+志同道合的人+取长补短去协同工作=完美团队一流的项目 + 三流的执行者 = 垃圾项目 三流的项目 + 一流的执行者

python快速入门实例

实例001:数字组合题目 有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析 遍历全部可能,把有重复的剃掉. total=0for i in range(1,5): for j in range(1,5): for k in range(1,5): if ((i!=j)and(j!=k)and(k!=i)): print(i,j,k) total+=1print(total) 简便方法 用itertools中的permutations即可. import