1 unitUnit1;2

3 interface

4

5 uses

6 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,7 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;8 type

9 TCanvasData = record //定义绘制数据数组

10 //画笔可设置的参数

11 PenStartSize: Integer; //画笔开始大小

12 PenMinSize: Integer; //画笔最小大小

13 PenMaxSize: Integer; //画笔最大大小

14 PenMobileBorder: Integer; //移动界限,超过这个值就改变笔大小值

15 PenChangeValue: Integer; //画笔每次改变的大小

16 PenSizeChangeSpeed: Integer;//笔的改变速度,越小改变的速度越快

17 //画图用到的参数

18 PenCurrentSize: Integer; //画笔当前大小

19 PenLastPoint: TPoint; //画笔最后的点

20 PenMobileDistance: TPoint; //画笔移动了多少距离

21 MouseDownTab:Boolean; //鼠标按下标记

22 Yadd:Integer;23 end;24

25 type

26 TForm1 = class(TForm)27 LEPenStartSize: TLabeledEdit;28 LEPenChangeValue: TLabeledEdit;29 LEPenMinSize: TLabeledEdit;30 LEPenMaxSize: TLabeledEdit;31 LEPenMobileBorder: TLabeledEdit;32 LEPenSizeChangeSpeed: TLabeledEdit;33 IMCanvas: TImage;34 Timer1: TTimer;35 IMOriginal: TImage;36 Button1: TButton;37 procedure LEPenStartSizeKeyPress(Sender: TObject; varKey: Char);38 procedureLEPenStartSizeMouseLeave(Sender: TObject);39 procedureLEPenStartSizeChange(Sender: TObject);40 procedureIMCanvasMouseDown(Sender: TObject; Button: TMouseButton;41 Shift: TShiftState; X, Y: Integer);42 procedureFormCreate(Sender: TObject);43 procedureIMCanvasMouseMove(Sender: TObject; Shift: TShiftState; X,44 Y: Integer);45 procedureIMCanvasMouseUp(Sender: TObject; Button: TMouseButton;46 Shift: TShiftState; X, Y: Integer);47 procedureTimer1Timer(Sender: TObject);48 procedureButton1Click(Sender: TObject);49 private

50 {Private declarations}

51 public

52 {Public declarations}

53 end;54

55 var

56 Form1: TForm1;57 MYCanvasData: TCanvasData;//定义画笔数据变量

58

59 implementation

60 uses Winapi.GDIPAPI, Winapi.GDIPOBJ{, Winapi.GDIPUTIL};61 {$R *.dfm}

62

63 procedureTForm1.Button1Click(Sender: TObject);64 begin

65 IMCanvas.Picture := nil;66 end;67

68 procedureTForm1.FormCreate(Sender: TObject);69 begin

70 IMOriginal.Height :=IMCanvas.Height;71 IMOriginal.Width :=IMCanvas.Width;72 IMOriginal.Top := 0;73 IMOriginal.Left := 0;74 IMOriginal.SendToBack;75

76 LEPenStartSize.Text := '5';77 LEPenMinSize.Text := '4';78 LEPenMaxSize.Text := '10';79 LEPenMobileBorder.Text := '5';80 LEPenChangeValue.Text := '1';81 LEPenSizeChangeSpeed.Text := '3';82

83 MYCanvasData.PenStartSize := 5;84 MYCanvasData.PenMinSize := 4;85 MYCanvasData.PenMaxSize := 10;86 MYCanvasData.PenMobileBorder := 5;87 MYCanvasData.PenChangeValue := 1;88 MYCanvasData.PenSizeChangeSpeed := 3;89

90 LEPenStartSize.OnChange :=LEPenStartSizeChange;91 LEPenMinSize.OnChange :=LEPenStartSizeChange;92 LEPenMaxSize.OnChange :=LEPenStartSizeChange;93 LEPenMobileBorder.OnChange :=LEPenStartSizeChange;94 LEPenChangeValue.OnChange :=LEPenStartSizeChange;95 LEPenSizeChangeSpeed.OnChange :=LEPenStartSizeChange;96 end;97

98 procedureTForm1.LEPenStartSizeChange(Sender: TObject);99 begin

100 MYCanvasData.PenStartSize := StrToInt(LEPenStartSize.Text); //开始笔头大小

101 MYCanvasData.PenMinSize := StrToInt(LEPenMinSize.Text); //最小笔头

102 MYCanvasData.PenMaxSize := StrToInt(LEPenMaxSize.Text); //最大笔头

103 MYCanvasData.PenMobileBorder := StrToInt(LEPenMobileBorder.Text); //移动距离 超过值时 改变笔头大小

104 MYCanvasData.PenChangeValue := StrToInt(LEPenChangeValue.Text); //每次大小变动的单位

105 MYCanvasData.PenCurrentSize := StrToInt(LEPenSizeChangeSpeed.Text); //笔头 大小 改变的速度 越小速度越快

106 end;107

108 procedure TForm1.LEPenStartSizeKeyPress(Sender: TObject; varKey: Char);109 begin

110 if not ((Key in ['0'..'9']) or (Key=#8)) then Key:=#0;111 end;112

113 procedureTForm1.LEPenStartSizeMouseLeave(Sender: TObject);114 begin

115 if Length((Sender as TLabeledEdit).Text)<1 then (Sender as TLabeledEdit).Text:='1';116 end;117

118 procedureTForm1.IMCanvasMouseDown(Sender: TObject; Button: TMouseButton;119 Shift: TShiftState; X, Y: Integer);120 begin

121 case Button of

122 mbLeft:begin

123 MYCanvasData.PenCurrentSize :=MYCanvasData.PenStartSize;124 MYCanvasData.PenMobileDistance.X := -1;125 MYCanvasData.PenLastPoint.X :=X;126 MYCanvasData.PenLastPoint.Y :=Y;127 //Yadd:=1;

128 MYCanvasData.MouseDownTab :=True;129 end;130 mbRight: ;131 mbMiddle:;132 end;133 end;134

135

136 procedureTForm1.IMCanvasMouseMove(Sender: TObject; Shift: TShiftState; X,137 Y: Integer);138 var

139 graphics: TGPGraphics;140 pen: TGPPen;141 begin

142 Form1.Caption:='当前笔头大小:' +IntToStr(MYCanvasData.PenCurrentSize);143 if MYCanvasData.MouseDownTab then

144 begin

145 graphics := TGPGraphics.Create(Canvas.Handle);146 try

147 pen := TGPPen.Create(aclBlack, MYCanvasData.PenCurrentSize);148 try

149 pen.SetStartCap(LineCapRound); //设置线帽,让线看起来更圆润

150 pen.SetEndCap(LineCapRound);151 graphics.SetSmoothingMode(SmoothingModeHighQuality); //抗锯齿

152 graphics.DrawLine(pen, MYCanvasData.PenLastPoint.X, MYCanvasData.PenLastPoint.Y, X, Y); //画线

153 MYCanvasData.PenLastPoint.X :=X;154 MYCanvasData.PenLastPoint.Y :=Y;155 finally

156 pen.Free;157 end;158 finally

159 graphics.Free;160 end;161 end;162 end;163

164 procedureTForm1.IMCanvasMouseUp(Sender: TObject; Button: TMouseButton;165 Shift: TShiftState; X, Y: Integer);166 begin

167 case Button of

168 mbLeft: MYCanvasData.MouseDownTab :=False;169 mbRight: ;170 mbMiddle:;171 end;172 end;173

174 procedureTForm1.Timer1Timer(Sender: TObject);175 begin

176 if MYCanvasData.MouseDownTab then

177 Begin178 if MYCanvasData.PenMobileDistance.X > -1 then

179 begin

180 Inc(MYCanvasData.Yadd);181 if (Abs(MYCanvasData.PenMobileDistance.X - MYCanvasData.PenLastPoint.X) < MYCanvasData.PenMobileBorder) and

182 (Abs(MYCanvasData.PenMobileDistance.Y - MYCanvasData.PenLastPoint.Y) < MYCanvasData.PenMobileBorder) then

183 Begin184 if (MYCanvasData.Yadd >= MYCanvasData.PenSizeChangeSpeed) then

185 if (MYCanvasData.PenCurrentSize < MYCanvasData.PenMaxSize) then

186 begin

187 MYCanvasData.PenCurrentSize := MYCanvasData.PenCurrentSize +MYCanvasData.PenChangeValue;188 MYCanvasData.Yadd:=1;189 end;190 end

191 else

192 begin

193 if (MYCanvasData.Yadd >= MYCanvasData.PenSizeChangeSpeed) then

194 if (MYCanvasData.PenCurrentSize > MYCanvasData.PenMinSize) then

195 begin

196 MYCanvasData.PenCurrentSize := MYCanvasData.PenCurrentSize -MYCanvasData.PenChangeValue;197 MYCanvasData.Yadd := 1;198 end;199 end;200 end;201 MYCanvasData.PenMobileDistance.X :=MYCanvasData.PenLastPoint.X;202 MYCanvasData.PenMobileDistance.Y :=MYCanvasData.PenLastPoint.Y;203 End;204 end;205

206

207 end.

计算机中丢失vcl190,VCL画图实例相关推荐

  1. 无法安装软件计算机中丢失,解决安装软件系统提示“丢失vcruntime140.dll”的方法...

    最近有很多的用户在电脑中安装wamp的时候都遇到了这样的一个故障,每次点击安装系统就会弹出提示:无法启动此程序,因为计算机中丢失vcruntime140.dl.尝试重新安装该程序以解决此问题" ...

  2. 无法启动此程序,因为计算机中丢失 MSVCP120.dll。尝试安装该程序以解决此问题

    无法启动此程序,因为计算机中丢失 MSVCP120.dll.尝试安装该程序以解决此问题 参考文章: (1)无法启动此程序,因为计算机中丢失 MSVCP120.dll.尝试安装该程序以解决此问题 (2) ...

  3. PB程序“无法启动此程序,因为计算机中丢失PBvm90.dll。尝试重新安装该程序以解决此问题”的解决方法

    PB程序"无法启动此程序,因为计算机中丢失PBvm90.dll.尝试重新安装该程序以解决此问题"的解决方法 参考文章: (1)PB程序"无法启动此程序,因为计算机中丢失P ...

  4. 电脑安装python为什么显示的是程序丢失-python报错:无法启动此程序,因为计算机中丢失...

    原标题:python报错:无法启动此程序,因为计算机中丢失 python报错:无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-|1-1-0.dll api-ms-win- ...

  5. 无法启动此程序因为计算机中丢失msvcr110,无法启动此程序因为计算机中丢失msvcr110,教您无法运行程序提示计算机中丢失...

    用户在一次运行某程序时,运到"无法启动此程序,因为计算机中丢失msvcr.dll.尝试重新安装该程序以解决此问题."的提示,当时很无语,因为系统是刚刚安装好的,怎么处理呢?下面,小 ...

  6. python无法启动该程序因为计算机中丢失_python报错:无法启动此程序,因为计算机中丢失...

    原标题:python报错:无法启动此程序,因为计算机中丢失 python报错:无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-|1-1-0.dll api-ms-win- ...

  7. 无法启动程序,因为计算机中丢失msvcp.dll

    当出现无法启动程序,因为计算机中丢失msvcp.dll时 解决上述问题只需三步: 1.复制文件"msvcp100d.dll"到系统目录下. 2.系统目录一般为:C:\WINNT\S ...

  8. 无法启动程序,因为计算机中丢失msvcr.dll

    当出现无法启动程序,因为计算机中丢失msvcr.dll时 解决上述问题只需三步: 1.复制文件"msvcr100d.dll"到系统目录下. 2.系统目录一般为:C:\WINNT\S ...

  9. python无法启动此程序因为计算机中丢失_python报错:无法启动此程序,因为计算机中丢失...

    原标题:python报错:无法启动此程序,因为计算机中丢失 python报错:无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-|1-1-0.dll api-ms-win- ...

  10. 安装apache服务出错,无法启动此程序,因为计算机中丢失VCRUNTIME140.dll 尝试重新安装此程序以解决此问题...

    错误信息:无法启动此程序,因为计算机中丢失VCRUNTIME140.dll 尝试重新安装此程序以解决此问题 错误场景:在使用["D:\Program Files\httpd-2.4.20-x ...

最新文章

  1. python能在excel运行吗-用ExcelPython在Excel中调用Python
  2. java 导出excel二维表,如何轻松将EXCEL二维统计表转为数据清单?
  3. cmd小游戏_使用pygame制作Flappy bird小游戏
  4. Integer包装类特殊之处
  5. 计算机 子分数 游戏图形,Windows7下如何开启和关闭系统分级功能.doc
  6. usermod命令,用户密码管理,makpasswd
  7. LineBasedFrameDecoder 行解码器,回车换行符解决 TCP 粘包
  8. Linux CentOS上用iptables设置防火墙遇到的问题
  9. js连接mysql数据库
  10. 前端技术文档及工具汇总
  11. Cadence学习之路(三)STM32芯片原理图绘制
  12. 聊聊NPS-提升用户体验的终极问题
  13. 经典语录(个人喜欢)
  14. D - Hangar Hurdles(kruskal重构树+树上倍增)
  15. 2020年新疆旅游市场遭遇滑铁卢,旅游消费跌至992.12亿元[图]
  16. Java有序数组——原地去重——不使用额外空间
  17. 互联网+背景下给旅行社的重大挑战
  18. string字符串常见用法
  19. java mf文件怎么打开_安卓手机如何打开.MF文件?
  20. Ubuntu系统在终端查看一些软硬件版本或文件大小的指令!

热门文章

  1. 信息与计算机科学学校排名,2021中国信息与计算科学专业大学排名 最好的高校排行榜...
  2. c语言挂科 合工大,合工大计算机学院程序设计01程序设计与C语言初步.ppt
  3. 利用华为手机给台式机提供网络
  4. windows自带截图键(ctrl + win + s)失灵如何恢复,无需重启电脑方法!
  5. word如何删除页脚页眉?
  6. 困扰了很久的ubuntu下智能拼音输入法
  7. 多样加密功能全面升级细数猖獗作恶“五宗罪”
  8. 斯坦福大学乔布斯演讲之后的感悟
  9. pandas学习之df.sample
  10. Android P如何去掉电池图标和固定电量显示