文档章节

再学 GDI+[12]: 准备工作 - 矩形命中

涂孟超
 涂孟超
发布于 2014/09/26 15:38
字数 305
阅读 11
收藏 0
点赞 0
评论 0
本例效果图:



代码文件:
unit Unit1;

interface

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

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);
    procedure FormPaint(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses GDIPOBJ, GDIPAPI;

var
  f: Boolean;
  x1,y1,x2,y2: Integer;
  RectArr: array of TRect;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  f := True;
  x1 := X;
  y1 := Y;
  x2 := X;
  y2 := Y;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  i: Integer;
begin
  if f then
  begin
    Canvas.DrawFocusRect(Rect(x1,y1,x2,y2));
    x2 := X;
    y2 := Y;
    Canvas.DrawFocusRect(Rect(x1,y1,x2,y2));
  end else begin
    Text := '';
    for i := Low(RectArr) to High(RectArr) do
      if PtInRect(RectArr[i], Point(X,Y)) then
        Text := Format('在第 %d 个矩形中', [i+1]);
  end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if not f then Exit;
  SetLength(RectArr, Length(RectArr)+1);
  RectArr[High(RectArr)] := Rect(x1,y1,x2,y2);
  f := False;
  Repaint;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  g: TGPGraphics;
  p: TGPPen;
  i: Integer;
begin
  g := TGPGraphics.Create(Canvas.Handle);
  p := TGPPen.Create(aclRed, 1);
  g.Clear(aclWhite);

  for i := Low(RectArr) to High(RectArr) do
    g.DrawRectangle(p, MakeRect(RectArr[i]));

  g.Free;
  p.Free;
end;

end.

 
 
 
 
 

 

 

  
窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 179
  ClientWidth = 277
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesktopCenter
  OnMouseDown = FormMouseDown
  OnMouseMove = FormMouseMove
  OnMouseUp = FormMouseUp
  OnPaint = FormPaint
  PixelsPerInch = 96
  TextHeight = 13
end

 
 
 
 
 

 

 

  

© 著作权归作者所有

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
Windows桌面应用程序(1-2-4-7th) DPI和设备无关的像素

要使用Windows图形进行有效编程,您必须了解两个相关的概念: 每英寸点数(DPI) 设备无关像素(DIP)。 我们从DPI开始。这将需要短暂的绕行排版。在印刷术中,类型的大小以称为点的单位来测量。一点...

qq_37422196 ⋅ 01/12 ⋅ 0

C#中基于GDI+(Graphics)图像处理系列之任意角度旋转图像

简介 图像旋转功能在实际使用中出现得不多,Image自带RotateFlip方法可以简单的实现90、180等角度的旋转或者翻转,但是如果要实现任意角度的旋转该怎么做?对于一个有经验的同学估计不到半天...

lhtzbj12 ⋅ 2017/01/05 ⋅ 0

强大的http加速器------varnish

varnish 简介 varnish是一款强大的http加速器,其设计初衷因为计算机越来越复杂,不像那个只有内存与硬盘的存储媒介的年代,如今的计算机系统除了内存外还有cpu的L1、L2、L3快取,因此当初的...

jungege1216 ⋅ 2014/05/07 ⋅ 0

Direct2D教程(十)绘制文本

概述 在Direct2D中,文本的绘制是通过DirectWrite来实现的,DirectWrite实际上已经是一个独立的DirectX组件了。关于DirectWrite,我摘录了MSDN的一段文字。 DirectWrite介绍 当今的应用程序应...

吞吞吐吐的 ⋅ 2017/10/17 ⋅ 0

怎样得到一个任意角度倾斜的矩形区域

rt:在windows界面开发中,我想用directui方式实现一个可以任意角度倾斜的控件。那么问题就来了,当创建一个矩形,并给它设置一个倾斜角度,可以使用GDI或者GDI+很很方便的画出来,但我该怎么...

全球变冷 ⋅ 2016/03/24 ⋅ 0

GDI绘制时钟效果,与系统时间保持同步,基于Winform

这是直接在Winform的基础上进行绘制的。接下来,我对时钟进行了封装,封装成一个名为CSharpQuartz的类,效果如下: 这是把时钟封装后,实现的一种效果,CSharpQuartz内部开辟了一个线程,与系...

李朝强 ⋅ 01/23 ⋅ 0

ASP.NET 如何做出简单的验证码

如果说要做验证码,那不得不提的就是GDI+绘图了。我们都知道验证码是以图片形式展示的,而且是动态生成的,这样就需要我们去画出它。 科普一下,什么是GDI+? GDI+是图形设备接口(GDI)的高...

我不会抽烟 ⋅ 2014/07/29 ⋅ 0

【Visual C++】游戏开发笔记之四——游戏画面绘图(一)基本图形绘制

本系列文章由zhmxy555编写,转载请注明出处。 http://blog.csdn.net/zhmxy555/article/details/7333886 作者:毛星云 邮箱: happylifemxy@qq.com 欢迎邮件交流编程心得 从本篇文章开始笔锋一...

长平狐 ⋅ 2012/11/12 ⋅ 0

CDC绘图总结

GDI总结:http://dingchaoqun12.blog.163.com/blog/static/11606250420112213396361/ 对话框 控件 视图类 应用程序框架都会调用该CWnd的消息响应成员函数(的覆盖)来绘制窗口客户区。 在Win...

长平狐 ⋅ 2012/10/08 ⋅ 0

GDI Remote 简介

概要 基本的显示驱动工作在单线程模式下,GDI有一个全局锁(光标工作在另一个线程,不在GDI的全局锁范围内)。 GDI | | V Display driver <----> Server--->Client. GDI指令先用标准的软件驱...

xtxb ⋅ 2012/06/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

iExec Blockchain Marketplace for Cloud

iExec Releases the First-Ever Blockchain Marketplace for Trading Cloud Computing Berlin, Germany, May 29, 2018. iExec has released its blockchain-based decentralized cloud marke......

openthings ⋅ 32分钟前 ⋅ 0

OSChina 周二乱弹 —— 加班的代码不要枉费了我的童子功

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《29》- 未完成乐队 《29》- 未完成乐队 手机党少年们想听歌,请使劲儿戳(这里) @FalconChen :#看球提醒# 02:00 巴西v...

小小编辑 ⋅ 51分钟前 ⋅ 15

Docker Swarm的前世今生

概述 在我的《Docker Swarm集群初探》一文中,我们实际体验了Docker Swarm容器集群技术的魅力,与《Kubernetes实践录》一文中提到的Kubernetes集群技术相比,Docker Swarm没有Kubernetes显得...

CodeSheep ⋅ 今天 ⋅ 0

骰子游戏代码开源地址

因为阿里云现在服务器已经停用了,所以上面的配置已经失效。 服务端开源地址:https://gitee.com/goalya/chat4.git 客户端开源地址:https://gitee.com/goalya/client4.git 具体运行界面请参考...

算法之名 ⋅ 今天 ⋅ 0

设计模式--装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 通用类图 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比...

gaob2001 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部