如何將滑鼠的觸發區域加大? |
答題得分者是:jow
|
harktrip
一般會員 發表:30 回覆:30 積分:12 註冊:2007-04-11 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
試試小動作...
[code delphi] procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var P: TPoint; r: TRect; begin r := Image1.BoundsRect; InflateRect(r, 5, 5); Canvas.Brush.Style := bsClear; Canvas.Rectangle(r); GetCursorPos(P); if PtInRect(r, ScreenToClient(P)) then Label1.Caption := 'PtInRect' else Label1.Caption := '--------'; end; [/code] |
harktrip
一般會員 發表:30 回覆:30 積分:12 註冊:2007-04-11 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
Mouse 動作發生在TImage BoundsRerct 以外的區域
應該何者來處理比較洽當?! 即使改寫 TImage 中, 與Mouse 相關的Method, 上述的考量點也無法避免吧?! 隨文貼附的程式碼, 只是建議一個思考的方向而已... [code delphi] unit fMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); private FActiveImage: TImage; procedure SetActiveImage(const Value: TImage); public property ActiveImage: TImage read FActiveImage write SetActiveImage; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var I: Integer; P: TPoint; r: TRect; O: TImage; begin GetCursorPos(P); P := ScreenToClient(P); O := nil; for I := 0 to ControlCount-1 do if Controls[I] is TImage then begin r := Controls[I].BoundsRect; InflateRect(r, 5, 5); if PtInRect(r, P) then begin O := TImage(Controls[I]); Break; end; end; ActiveImage := O; end; procedure TForm1.SetActiveImage(const Value: TImage); var r: TRect; begin if Value <> FActiveImage then begin FActiveImage := Value; Repaint; if Assigned(FActiveImage) then begin r := FActiveImage.BoundsRect; InflateRect(r, 5, 5); Canvas.DrawFocusRect(r); end; end; end; procedure TForm1.FormCreate(Sender: TObject); var r: TRect; I, col, row, w, h: Integer; begin Width := 320; Height := 350; w := 100; h := 100; for I := 0 to 8 do begin with TImage.Create(Self) do begin Tag := I; col := I mod 3; row := I div 3; r := Rect(w*col, h*row, w*(col 1), h*(row 1)); InflateRect(r, -6, -6); BoundsRect := r; Parent := Self; OnMouseMove := FormMouseMove; end; end; end; [/code]
編輯記錄
jow 重新編輯於 2007-12-14 09:55:07, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |