名前 題名 ▼ Mr.XRAYさん > 上のコードではローカルなマウスフックを使用しています. > このフックのメッセージ処理を使用すれば,クリックした画像位置を検出できます. > そのようにしたコードです. > このコードにすれば, > > procedure TForm1.Item_0Click(Sender: TObject); > > の処理は不要です. > > //----------------------------------------------------------------------------- > // ローカルマウスフックのメッセージを受信 > // マウスカーソルの座標値を取得して表示 > // クリックした画像の番号を表示 > //----------------------------------------------------------------------------- > procedure TForm1.WMApp100(var Message: TMessage); > var > X : Integer; > Y : Integer; > hPopup : HWND; > aRect : TRect; > i : Integer; > begin > X := LOWORD(Message.LParam); > Y := HIWORD(Message.LParam); > > //PopupMen1のウィンドウの領域内の時だけ処理 > //Windwosのポップアップメニューのクラス名は#32768(16進数では$8000) > hPopup := FindWindow(PChar(#32768), nil); > GetWindowRect(hPopup, aRect); > if PtInRect(aRect, Point(X, Y)) then begin > Panel1.Caption := 'X: ' + IntToStr(X) + ' Y: ' + IntToStr(Y); > > if (Message.WParam = WM_LBUTTONDOWN) > or (Message.WParam = WM_MBUTTONDOWN) > or (Message.WParam = WM_RBUTTONDOWN) then begin > if hMouseHook <> 0 then begin > UnhookWindowsHookEx(hMouseHook); > hMouseHook := 0; > end; > > if (Message.WParam = WM_LBUTTONDOWN) or (Message.WParam = WM_RBUTTONDOWN) then begin > for i := 0 to Length(RectImage) - 1 do begin > if PtInRect(RectImage[i], Point(X, Y)) then begin > ShowMessage(IntToStr(i + 1) + ' 番目の画像クリック'); > break; > end; > end; > end; > > Panel1.Caption := 'クリックで閉じた'; > end; > end else begin > Panel1.Caption := ''; > end; > end; GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link