ホーム >プログラム >Delphi 6 ローテクTips

Windows APIメモ PtInRect

Windows APIのメモ。
PtInRect。

参考サイト

PtInRectの古いAPIヘルプによると

>PtInRect関数は、 指定された点が、 指定された長方形内にあるかどうかを調べます。
>点が左辺か上辺の上、 または4辺の内側にあるときは、 点は長方形内にあることになります。
>点が右辺か底辺の上にあるときは、 点は長方形外にあることになります。

とあります。
「点が右辺か底辺の上にあるとき」とはつまりRectが(0, 0, 100, 200)であるときXが200であるときかYが100であるときのことです。

下の例ではButton1を押しても「点が右辺か底辺の上にあるとき」に該当するので範囲外となりBeepは鳴りません。
Button2を押すと鳴ります。
Button3を押すと「点が左辺か上辺の上」にあるときはRect内にあるということなので鳴ります。

procedure TApp_BugsEye.Button1Click(Sender: TObject);
var
  lrc_Rect: TRect;
  lpt_Pos:  TPoint;
begin
  lrc_Rect := Rect (0, 0, 100, 200);
  lpt_Pos  := Point(100, 200); //範囲外なのでBeepは鳴らない。
  if (PtInRect(lrc_Rect, lpt_Pos)) then begin
    Beep;
  end;
end;

procedure TApp_BugsEye.Button2Click(Sender: TObject);
var
  lrc_Rect: TRect;
  lpt_Pos:  TPoint;
begin
  lrc_Rect := Rect (0, 0, 100, 200);
  lpt_Pos  := Point(99, 199); //範囲内なのでBeepは鳴る。
  if (PtInRect(lrc_Rect, lpt_Pos)) then begin
    Beep;
  end;
end;

procedure TApp_BugsEye.Button3Click(Sender: TObject);
var
  lrc_Rect: TRect;
  lpt_Pos:  TPoint;
begin
  lrc_Rect := Rect (0, 0, 100, 200);
  lpt_Pos  := Point(0, 0); //範囲内なのでBeepは鳴る。
  if (PtInRect(lrc_Rect, lpt_Pos)) then begin
    Beep;
  end;
end;