当前位置:主页>仓库管理软件> 列表

●●用 IntersectRect 获得矩形交集得不到正确 找分销

仓库管理软件版1楼: var
lprcDst: TRect;
begin
if IntersectRect(lprcDst, Rect(20, 10, 40, 60), Rect(80, 80, 30, 30)) then
ShowMessage('''');
end;
显然 Rect(20, 10, 40, 60), Rect(80, 80, 30, 30) 这两个矩形有交集,可是结果呢,返回 False!包括 IsRectEmpty 函数在内。
在使用 IntersectRect 必须把矩形正规化(left < right, top < bottom),否则得不到正确结果,妈的看来某些 API 函数也不怎么样。

2楼: 帮顶!

╭=========================================╮

80G海量源代码,控件,书籍全免费狂下不停!

http://www.source520.com

╰=========================================╯ 如分销

3楼: 那位进来我把分分了。

4楼: 那楼主为什么就不能先把矩形正式化呢,难道还一定要让人倒立了再来比较那个高呀

5楼: 正规化也不是什么难题呀,写个函数变一下就行了

6楼: 用RectInRegion判断看看
unit Unit1;

interface

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

type
TForm1 = class(TForm)
btn1: TBitBtn;
procedure FormPaint(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
RGN: HRGN;
Rect: TRect;
implementation

{$R *.dfm}

procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Rectangle(10, 10, 100, 100);
Canvas.Ellipse(50, 50, 150, 150);
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
if RectInRegion(RGN, rect) then
ShowMessage(''in'');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
RGN := CreateEllipticRgn(50, 50, 150, 150);
SetRect(Rect, 10, 10, 100, 100);
end;

end.

仓库管理软件版7楼: 帮顶!

╭=========================================╮

80G海量源代码,控件,书籍全免费狂下不停!

http://www.source520.com

╰=========================================╯

8楼: 多人接受答案了。