判断一个点是否在矩形内PtInRegion-解决PtInRect不能正确判断不同形式TRent的情况
2012-02-06 13:39
417 查看
PtInRegion
API说明:
BOOL PtInRegion(
HRGN hrgn, // handle of region
int X, // x-coordinate of point
int Y // y-coordinate of point
);
Parameters
hrgn
Identifies the region to be examined.
X
Specifies the x-coordinate of the point.
Y
Specifies the y-coordinate of the point.
Return Values
If the specified point is in the region, the return value is nonzero.
Delphi代码:
unit Unit2;
interface
//{$DEFINE LEFTBOTTOM} //注释调此编译开关 PtInRect不能正确判断在该区域的点,PtInRegion能够正确判断
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
p1, p2: TPoint; //p1, p2构成矩形
FRect: TRect;
FRgn: HRGN;
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
//从p1点向p2点方向画矩形(两个点画矩形有4中可能的情况:即p1为左上,左下,右下,右上坐标点)
{$IFDEF LEFTBOTTOM}
//p1为左下坐标,此时PtInRect能够正确判断在该区域的点
p1.X := 30;
p1.Y := 30;
p2.X := 200;
p2.Y := 110;
{$ELSE}
//p1为右上坐标,此时PtInRect不能正确判断在该区域的点
p1.X := 200;
p1.Y := 110;
p2.X := 30;
p2.Y := 30;
{$ENDIF}
FRect.Left := p1.X;
FRect.Right := p2.x;
FRect.Top := p1.y;
FRect.Bottom:= p2.y;
FRgn := CreateRectRgnIndirect(FRect);
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
DeleteObject(FRgn);
end;
procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if PtInRegion(FRgn, X, Y) then {判断鼠标当前点是否在区域内}
ShowMessage('该点在矩形区域内');
end;
procedure TForm2.FormPaint(Sender: TObject);
begin
Canvas.Rectangle(FRect);
end;
end.
API说明:
BOOL PtInRegion(
HRGN hrgn, // handle of region
int X, // x-coordinate of point
int Y // y-coordinate of point
);
Parameters
hrgn
Identifies the region to be examined.
X
Specifies the x-coordinate of the point.
Y
Specifies the y-coordinate of the point.
Return Values
If the specified point is in the region, the return value is nonzero.
Delphi代码:
unit Unit2;
interface
//{$DEFINE LEFTBOTTOM} //注释调此编译开关 PtInRect不能正确判断在该区域的点,PtInRegion能够正确判断
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
p1, p2: TPoint; //p1, p2构成矩形
FRect: TRect;
FRgn: HRGN;
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
//从p1点向p2点方向画矩形(两个点画矩形有4中可能的情况:即p1为左上,左下,右下,右上坐标点)
{$IFDEF LEFTBOTTOM}
//p1为左下坐标,此时PtInRect能够正确判断在该区域的点
p1.X := 30;
p1.Y := 30;
p2.X := 200;
p2.Y := 110;
{$ELSE}
//p1为右上坐标,此时PtInRect不能正确判断在该区域的点
p1.X := 200;
p1.Y := 110;
p2.X := 30;
p2.Y := 30;
{$ENDIF}
FRect.Left := p1.X;
FRect.Right := p2.x;
FRect.Top := p1.y;
FRect.Bottom:= p2.y;
FRgn := CreateRectRgnIndirect(FRect);
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
DeleteObject(FRgn);
end;
procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if PtInRegion(FRgn, X, Y) then {判断鼠标当前点是否在区域内}
ShowMessage('该点在矩形区域内');
end;
procedure TForm2.FormPaint(Sender: TObject);
begin
Canvas.Rectangle(FRect);
end;
end.
相关文章推荐
- 判断一个点是否在矩形内PtInRect
- 判断制定位置是否在矩形范围内的API函数PtInRect
- 创建右键菜单;加载菜单资源; WM_CONTEXTMENU;PtInRect(判断点是否在矩形内);ScreenToClient;DefWindowProc
- WinAPI: PtInRect - 判断点是否在矩形中
- 判断鼠标是否在某个控件范围内 ScreenToClient PtInRect
- 经典算法 | 给定n个矩形,判断这些矩形是否在不重合的情况下组成一个大矩形的算法
- 关于js正则表达式判断一个字符串是否是正确的有数字和小数点组成的金钱形式和 判读数值类型的正则表达式
- js正则表达式判断一个字符串是否是正确的有数字和小数点组成的金钱形式和 判读数值类型的正则表达式
- js正则表达式判断一个字符串是否是正确的有数字和小数点组成的金钱形式和 判读数值类型的正则表达式
- js正则表达式判断一个字符串是否是正确的有数字和小数点组成的金钱形式和 判读数值类型的正则表达式
- 用jquery判断一个对象是否存在不能用
- 判断两矩形是否交叉(包括包含的情况)
- 判断鼠标或者手指是否点击在UI上(用于应对不能点击UI的情况)
- 简单编程(十四)定义一个方法能够判断并返回两个整数的最大值,并调用自己的方法测试是否正确。
- 给定四条线段判断是否可以构成一个矩形
- 判断一个点是否在旋转过任意角度的矩形内
- Lettcode_9_Palindrome Number ——判断一个数字是否回文(不能申请额外空间)
- 判断一个页面中的URL是否是可以正确访问
- 判断一个自然数是否是某个数的平方。当然不能使用开方运算—谷歌
- 浦发银行出现:部件'InstallCertListAx.ocx'或其附件之一不能正确注册:一个文件丢失 解决