Gönderen Konu: Mouse butonlarını kontrol etmek  (Okunma sayısı 704 defa)

Çevrimdışı Zoroaster

  • Profesyonel Üye
  • *****
  • İleti: 1325
Mouse butonlarını kontrol etmek
« : 07 Eylül 2017, 01:48:46 »
Formumuzun dışını göstermekte olan mouseun butonlarının basılı olup olmadıgını nasıl öğrenirim?
חור השטן יוצא

Çevrimdışı SercanTEK

  • Emektar
  • *****
  • İleti: 655
  • 3L3CTRO
    • Kişisel Blog
Ynt: Mouse butonlarını kontrol etmek
« Yanıtla #1 : 27 Eylül 2017, 07:01:14 »
Faydası dokunur mu bilmem ama böyle birşey buldum. kendim denemedim.

https://www.thoughtco.com/advanced-mouse-processing-1058399
Hayat sadece bir araçtır amaca ulaşmak için; Amaç ise Hayata birşeyler Katmaktır Benim için.. www.sercanca.com

Çevrimdışı Klein

  • stm32
  • Profesyonel Üye
  • *
  • İleti: 3626
    • mikrosim
Ynt: Mouse butonlarını kontrol etmek
« Yanıtla #2 : 27 Eylül 2017, 17:30:20 »
Kod: [Seç]
procedure TForm5.Timer1Timer(Sender: TObject);
var x, y:integer;
begin


x := Mouse.CursorPos.X;
y := Mouse.CursorPos.y;

Caption := IntToStr(x)+ ':' + IntToStr(y);

end;


Çevrimdışı Klein

  • stm32
  • Profesyonel Üye
  • *
  • İleti: 3626
    • mikrosim
Ynt: Mouse butonlarını kontrol etmek
« Yanıtla #3 : 27 Eylül 2017, 17:32:49 »
:) Abi sen butonları sormuşsun, ben koordinat örneği yazmışım.
Birazdan (Delphi açılırsa) yazarım.

Çevrimdışı Klein

  • stm32
  • Profesyonel Üye
  • *
  • İleti: 3626
    • mikrosim
Ynt: Mouse butonlarını kontrol etmek
« Yanıtla #4 : 27 Eylül 2017, 17:47:07 »
Kod: [Seç]
unit Unit5;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls;

type
  TForm5 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    Memo1: TMemo;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    { Public declarations }
  end;

  MouseLLHookStruct = record
    pt          : TPoint;
    mouseData   : cardinal;
    flags       : cardinal;
    time        : cardinal;
    dwExtraInfo : cardinal;
  end;

 function LowLevelMouseHookProc(nCode, wParam, lParam : integer) : integer; stdcall;

var
  Form5: TForm5;
  mHook : cardinal;
implementation

{$R *.dfm}

procedure TForm5.FormCreate(Sender: TObject);
const
  WH_MOUSE_LL = 14;
begin

  mHook := SetWindowsHookEx(WH_MOUSE_LL, @LowLevelMouseHookProc, hInstance, 0);
end;

function LowLevelMouseHookProc(nCode, wParam, lParam : integer) : integer; stdcall;
// possible wParam values: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN, WM_RBUTTONUP
var
  info : ^MouseLLHookStruct absolute lParam;
begin
  result := CallNextHookEx(mHook, nCode, wParam, lParam);
  with info^ do begin
    Form5.Label1.Caption := 'X: '+IntToStr(pt.x)+'  Y: '+ IntToStr(pt.y);
    case wParam of
      wm_lbuttondown : Form5.Memo1.Lines.Append(format('pressed left button (%d, %d)'    , [pt.x, pt.y]));
      wm_lbuttonup   : Form5.Memo1.Lines.Append(format('released left button (%d, %d)'   , [pt.x, pt.y]));
      wm_mbuttondown : Form5.Memo1.Lines.Append(format('pressed middle button (%d, %d)'  , [pt.x, pt.y]));
      wm_mbuttonup   : Form5.Memo1.Lines.Append(format('released middle button (%d, %d)' , [pt.x, pt.y]));
      wm_rbuttondown : Form5.Memo1.Lines.Append(format('pressed right button (%d, %d)'   , [pt.x, pt.y]));
      wm_rbuttonup   : Form5.Memo1.Lines.Append(format('released right button (%d, %d)'  , [pt.x, pt.y]));
      wm_mousewheel  : begin
        if smallInt(mouseData shr 16) > 0
        then Form5.Memo1.Lines.Append('scrolled wheel (up)')
        else Form5.Memo1.Lines.Append('scrolled wheel (down)');
      end;
    end;
  end;
end;
end.


Orijinal örnek:
http://lazplanet.blogspot.com.tr/2016/06/how-to-detect-mouse-events-outside-your.html