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

涂孟超

``````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

``````

### 涂孟超

Windows桌面应用程序(1-2-4-7th) DPI和设备无关的像素

qq_37422196
01/12
0
0

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

jungege1216
2014/05/07
0
0
C#中基于GDI+(Graphics)图像处理系列之任意角度旋转图像

lhtzbj12
2017/01/05
0
0
GDI绘制时钟效果，与系统时间保持同步，基于Winform

01/23
0
0
Direct2D教程（十）绘制文本

2017/10/17
0
0

oh-my-zsh 自定义

GitHub 地址 基于 oh-my-zsh 的自定义配置，增加了一些个人常用插件与皮肤。 采用的是 git submodule 来维护，包括 oh-my-zsh，之所以这么搞，主要是手头有多台 linux 需要维护， 每台机器、...

58分钟前
4
0
Docker安装踩坑：E_FAIL 0x80004005的解决

karma123

4
0
js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理：是当变量进入环境时，将这个变量标记为“...

Jack088

17
0

em_aaron

27
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南，原来access_token是直接当作parameter的（写在url之后），scene参数一定要...

31
0