首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

再學GDI+[51]: 路徑點擊測試 - IsVisible 內部判斷與 IsOutlineVisible 邊緣判斷

     編輯:Delphi

前言

路徑的點擊測試是互動式圖形應用的基礎。GDI+ 提供兩個互補方法:IsVisible 判斷點是否在填充區域內部,IsOutlineVisible 判斷點是否在路徑邊緣線條上(考慮畫筆寬度)。

兩大測試方法簽名

方法參數判斷對象考慮畫筆寬度
IsVisible(pt: TGPPoint)點座標填充內部區域否
IsVisible(x, y: Single)浮點座標填充內部區域否
IsOutlineVisible(x, y, pen)座標 + 畫筆路徑邊緣線條是(核心差異)

三形狀滑鼠即時測試範例

  • path1:對角線(測試線條邊緣)
  • path2:矩形(測試內部與邊框)
  • path3:橢圓(測試曲線邊緣)
  • 滑鼠移動時即時更新視窗標題顯示命中結果

核心實作

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  Caption := '';
  if path2.IsVisible(MakePoint(X,Y)) then Caption := '在矩形內';
  if path3.IsVisible(MakePoint(X,Y)) then Caption := '在橢圓內';
  if path1.IsOutlineVisible(X, Y, p) then Caption := '在直線上';
  if path2.IsOutlineVisible(X, Y, p) then Caption := '在矩形的邊線上';
  if path3.IsOutlineVisible(X, Y, p) then Caption := '在橢圓的圓周線上';
end;

執行效果預覽

點擊測試效果

關鍵技術細節

  • 畫筆寬度影響:IsOutlineVisible 使用的畫筆寬度決定命中容差(範例用 3px)
  • 填充模式影響:IsVisible 受 SetFillMode 影響(Alternate/Winding)
  • 座標系統:均使用世界座標,若有 Graphics 變換需先反變換滑鼠座標
  • 效能:單次測試極快,可支援即時滑鼠追蹤

實戰應用場景

場景使用方法畫筆設定建議
物件選取IsVisible不適用
邊緣吸附IsOutlineVisible寬度 3~5px
線條點擊IsOutlineVisible與實際繪製畫筆一致
複雜形狀熱區IsVisible不適用
繪圖工具捕捉兩者結合外框用 Outline

表單定義檔

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 206
  ClientWidth = 339
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesktopCenter
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  OnMouseMove = FormMouseMove
  OnPaint = FormPaint
  PixelsPerInch = 96
  TextHeight = 13
end
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved