文档章节

Delphi 的绘图功能[12] - TPen 类(下) : 学习橡皮线

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 286
阅读 2
收藏 0
//奇妙的异或运算, 就这些简单的代码, 反复点击按钮...

procedure TForm1.Button1Click(Sender: TObject);
begin
  Canvas.Pen.Color := clYellow; {指定笔颜色为黄色}
  Canvas.Pen.Width := 20;       {笔宽 20}
  Canvas.Pen.Mode := pmXor;     {指定画笔模式为: 画笔色与背景色的异或运算}

  {画线}
  Canvas.MoveTo(0,0);
  Canvas.LineTo(ClientWidth,ClientHeight);
end;

 
 
 
 
 

 

 

  
//效果图:

//做一个橡皮线的示例:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  x1,y1,x2,y2: Integer; {直线两个端点的坐标}
  f: Boolean;           {判断鼠标是否点下}


procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  x1 := X; y1 := Y;
  x2 := X; y2 := Y;
  Canvas.Pen.Color := clRed;
  Canvas.Pen.Width := 2;
  Canvas.Pen.Mode := pmXor;
  f := True;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if f then
  begin
    {擦除}
    Canvas.MoveTo(x1, y1);
    Canvas.LineTo(x2, y2);

    x2 := X; y2 := y;

    {重绘}
    Canvas.MoveTo(x1, y1);
    Canvas.LineTo(x2, y2);
  end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if f then
  begin
    {画出确定的线}
    Canvas.Pen.Mode := pmCopy;
    Canvas.MoveTo(x1, y1);
    Canvas.LineTo(x2, y2);
    f := not f;
  end;
end;

end.

 
 
 
 
 

 

 

  
//效果图:


本文转载自:http://www.cnblogs.com/del/archive/2008/02/18/1072335.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
GO 语言 UI 组件库 - govcl

由于现有第三方的Go UI库不是太大就是用的不习惯,或者组件太少。就萌生了自己写一个UI库的想法Delphi(Lazarus)有些许多优秀的VCL(LCL)组件,不拿来使用太可惜了。所以就索性做了一套。目前支...

不在乎y
2017/10/10
6.9K
17
支持.NET和移动设备的XLS读写控件XLSReadWriteII控件介绍

XLSReadWriteII 相关文章 在Delphi中使用XlsReadWrite xlsreadwriteII对excel进行读取操作的几点提示 解决 XLSReadWriteII 解析Excel95格式的文件乱码的问题 Excel读写方案XLSReadWriteII使用...

yidongkaifa
2014/06/04
0
0
Delphi 使用 Duilib 库--Duilib for Delphi

导读 什么是Duilib for Delphi? Duilib for Delphi是一个基于C++Duilib的开源工程,主要致力于在Delphi中使用Duilib库构建漂亮的UI。 怎么学习?首先对Duilib有基本的了解,特别是XML构建的U...

不在乎y
2015/11/30
1K
0
牌Exel文件xls读写和生成控件Bytescout Spreadsheet SDK for.NET

Bytescout Spreadsheet SDK for.NET能在Delphi和.NET下访问Excel文件的完美解决方案。 读写任何单元值 数字型、字符型、布尔型以及错误型。但是你了解日期和时间型单元吗?在Excel中没有这样...

netkongjian
2014/06/03
0
0
推荐Pascal-Delphi、软件工程;数据库开发 一些编程书

HTF 阅读器下载 IT技术 注意:下面的RAR文件名是网页链接,不RAR源文档,如果弹出下载软件,请单击右键打开新页面再下载。 Pascal-Delphi更新日期:2009-12-514:45:59 总数:12 订阅RSS 《D...

jfyes
2009/12/05
317
0

没有更多内容

加载失败,请刷新页面

加载更多

iOS个人中心渐变动画、微信对话框、标签选择器、自定义导航栏、短信验证输入框等源码

iOS精选源码 简单的个人中心页面-自定义导航栏并予以渐变动画 程序员取悦女票的正确姿势---Tip1(iOS美容篇) iOS 前台重启应用和清除角标的问题 微信原生提醒对话框3.0 JHLikeButton - 有趣...

Android爱开源
8分钟前
0
0
Yii2使用驼峰命名的形式访问控制器

yii2在使用的时候,访问控制器的时候,如果控制器的名称是驼峰命名法,那访问的url中要改成横线的形式。例如: public function actionRoomUpdate(){//}//访问的时候就要www.test.co...

dragon_tech
11分钟前
0
0
Navicat使用教程:使用Navicat Query Analyzer优化查询性能(第2部分)

下载Navicat Monitor最新版本 Navicat Monitor 是一套安全、简单而且无代理的远程服务器监控工具。它具有强大的功能使你的监控发挥最大效用。受监控的服务器包括 MySQL、MariaDB 和 Percona ...

电池盒
17分钟前
0
0
Python3 读写utf-8文本文件

with open('testRead.txt', 'r', encoding='utf-8') as f: for each_line in f: Passwith open('testWrite.txt', 'w', encoding='utf-8') as f: f.write('写入的内容'......

编程老陆
20分钟前
0
0
Linux syslog相关函数详解

介绍 syslog是Unix系统的日志系统。可以将日志记录在本地系统中。 一个完整的syslong日志包含如下信息:程序模块 | 严重性 | 时间 | 主机名 | 进程名 | 进程ID | 正文。 syslong相关函数 1....

RongJinhui0
24分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部