喫茶XRAYトップページ

[スレッド全体
]

[8052] マウスフックのコードを利用したコード返信 削除
2014/10/2 (木) 18:20:29 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;


[8054] メニューの再描画返信 削除
2014/10/3 (金) 07:47:06 Mr.XRAY
> 上のコードではローカルなマウスフックを使用しています.
> このフックのメッセージ処理を使用すれば,クリックした画像位置を検出できます.
> そのようにしたコードです.


画像メニューの再描画のテストをしてみました.
マウスカーソル下の描画を変更する例です.
マウスカーソルが移動する度に再描画するとチラつきます.
そこで,OnMouseEnter, OnMouseLeave イベントのような機能を実装しています.
コードはダウンロードしたファイルで確認してください.

(再掲) 2,311 KB (EXE ファイル同梱)  2014年10月03日 PM 5時20分版
http://mrxray.on.coocan.jp/Delphi/zip/PopupMenu_ImageItem.zip


[8060] Re:メニューの再描画返信 削除
2014/10/4 (土) 14:08:12 Mr.XRAY
Delphi Forum にも投稿しておきました.

[TPopupMenu のメニューを画像にする]
http://ht-deko.minim.ne.jp/delphiforum/?vasthtmlaction=viewtopic&t=1540.0

やっぱり,途中にも画像が入れられるというのはいいですねぇ.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82