Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Fare Hareketi Yakalamak : Mouse.CursorPos.X
#1
Merhabalar,

Form da OnMouseMove eventı tetiklenmeden, farenin tüm desktop koordinatını alabilirmiyim.

araştırmalarımda ve testlerimde timer ın intervalı 1 yapılarak 
   
lbMouseX.Caption := InttoStr(  Mouse.CursorPos.X );
lbMouseY.Caption := InttoStr(  Mouse.CursorPos.Y );

bu kodla sürekli canlı alınabiliyor.
ancak timer benim için maliyetli bir çözüm.

bunu timersız,  bir event tetiklenerek yapamaz mıyım ?

Teşekkürler.
Kalan ömrünün en genç build’indesin.
Counter artar, deadline sabit.
Age++ çalışıyor, rollback yok.
Her yer exception
Cevapla
#2
Timer yerine SetWindowLong WinAPI & Subclassing a Window özelliği ile yapabilirsiniz. Dikkatli kullanılması gerekir...

https://learn.microsoft.com/en-us/window...indowlonga

https://learn.microsoft.com/en-us/window...procedures

.
Cevapla
#3
(20-06-2024, Saat: 00:46)anemos Adlı Kullanıcıdan Alıntı: Timer yerine SetWindowLong WinAPI & Subclassing a Window özelliği ile yapabilirsiniz. Dikkatli kullanılması gerekir...

https://learn.microsoft.com/en-us/window...indowlonga

https://learn.microsoft.com/en-us/window...procedures

.


Desteğin için teşekkür ederim kardeşim, 
İncelediğimde ve araştırdığımda da bu amaç için nasıl kullanacağımı pek anlayamadım açıkçası. 
anladığım kadarıyla  bu methot belirli bir pencerenin  özelliklerini değiştirmeye yarıyor,
benim ihtiyaç, formdan bağımsız olarak farenin tüm desktop hareketlerini algılamak, sadece formun üzerindeki değil.
biraz daha detay paylaşabilir misiniz.
Kalan ömrünün en genç build’indesin.
Counter artar, deadline sabit.
Age++ çalışıyor, rollback yok.
Her yer exception
Cevapla
#4
(19-06-2024, Saat: 16:49)bydelphi Adlı Kullanıcıdan Alıntı: Merhabalar,

Form da OnMouseMove eventı tetiklenmeden, farenin tüm desktop koordinatını alabilirmiyim.

araştırmalarımda ve testlerimde timer ın intervalı 1 yapılarak 
   
lbMouseX.Caption := InttoStr(  Mouse.CursorPos.X );
lbMouseY.Caption := InttoStr(  Mouse.CursorPos.Y );

bu kodla sürekli canlı alınabiliyor.
ancak timer benim için maliyetli bir çözüm.

bunu timersız,  bir event tetiklenerek yapamaz mıyım ?

Teşekkürler.

Merhabalar,

procedure WMMouseMove(var Msg: TWMMouseMove); message WM_MOUSEMOVE;

API ile denermisiniz lütfen. Umarım yardımcı olur.

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#5
(20-06-2024, Saat: 11:13)hi_selamlar Adlı Kullanıcıdan Alıntı:
(19-06-2024, Saat: 16:49)bydelphi Adlı Kullanıcıdan Alıntı: Merhabalar,

Form da OnMouseMove eventı tetiklenmeden, farenin tüm desktop koordinatını alabilirmiyim.

araştırmalarımda ve testlerimde timer ın intervalı 1 yapılarak 
   
lbMouseX.Caption := InttoStr(  Mouse.CursorPos.X );
lbMouseY.Caption := InttoStr(  Mouse.CursorPos.Y );

bu kodla sürekli canlı alınabiliyor.
ancak timer benim için maliyetli bir çözüm.

bunu timersız,  bir event tetiklenerek yapamaz mıyım ?

Teşekkürler.

Merhabalar,

procedure WMMouseMove(var Msg: TWMMouseMove); message WM_MOUSEMOVE;

API ile denermisiniz lütfen. Umarım yardımcı olur.

Kolay gelsin.



Teşekkür ederim dostum ancak sadece form üzerinde algılıyor, form dışı desktop yok, acaba kullanımımda mı sorun var örnekleyebilir misin.

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   procedure WMMouseMove(var Msg: TWMMouseMove); message WM_MOUSEMOVE;
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMMouseMove(var Msg: TWMMouseMove);
begin
  Caption := msg.XPos.ToString  + ' - ' +  msg.YPos.ToString
end;

end.
Kalan ömrünün en genç build’indesin.
Counter artar, deadline sabit.
Age++ çalışıyor, rollback yok.
Her yer exception
Cevapla
#6
(20-06-2024, Saat: 11:48)bydelphi Adlı Kullanıcıdan Alıntı:
(20-06-2024, Saat: 11:13)hi_selamlar Adlı Kullanıcıdan Alıntı: Merhabalar,

procedure WMMouseMove(var Msg: TWMMouseMove); message WM_MOUSEMOVE;

API ile denermisiniz lütfen. Umarım yardımcı olur.

Kolay gelsin.



Teşekkür ederim dostum ancak sadece form üzerinde algılıyor, form dışı desktop yok, acaba kullanımımda mı sorun var örnekleyebilir misin.

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   procedure WMMouseMove(var Msg: TWMMouseMove); message WM_MOUSEMOVE;
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMMouseMove(var Msg: TWMMouseMove);
begin
  Caption := msg.XPos.ToString  + ' - ' +  msg.YPos.ToString
end;

end.

Merhabalar,

   


.zip   test.zip (Dosya Boyutu: 868 Bayt / İndirme Sayısı: 13)

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#7
Örnek kod için Çok Teşekkür ederim kardeşim , tam arzu ettiğim gibi
Kalan ömrünün en genç build’indesin.
Counter artar, deadline sabit.
Age++ çalışıyor, rollback yok.
Her yer exception
Cevapla
#8
klavyeli versiyonu

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, StdCtrls;

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   Memo2: TMemo;
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure Timer1Timer(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

Type
 KeybdLLHookStruct = record
   vkCode      : cardinal;
   scanCode    : cardinal;
   flags       : cardinal;
   time        : cardinal;
   dwExtraInfo : cardinal;
 end;
 MouseLLHookStruct = record
   pt          : TPoint;
   mouseData   : cardinal;
   flags       : cardinal;
   time        : cardinal;
   dwExtraInfo : cardinal;
 end;

var
 mHook : cardinal;
 kHook : cardinal;

function LowLevelKeybdHookProc(nCode, wParam, lParam : integer) : integer; stdcall;
// possible wParam values: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP
var
 info : ^KeybdLLHookStruct absolute lParam;
 lpChar : word;
 kState : TKeyboardState;
begin
result := CallNextHookEx(kHook, nCode, wParam, lParam);
with info^ do
case wParam of
 wm_keydown : begin
   GetKeyboardState(kState);
   if ToAscii(vkCode, scanCode, kState, @lpChar, 0) > 0 then Form1.Memo2.Lines.Append(format('pressed key -- %s', [char(lpChar)]));
 end;
end;
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
case wParam of
 wm_lbuttondown : Form1.Memo1.Lines.Append(format('pressed left button (%d, %d)'    , [pt.x, pt.y]));
 wm_lbuttonup   : Form1.Memo1.Lines.Append(format('released left button (%d, %d)'   , [pt.x, pt.y]));
 wm_mbuttondown : Form1.Memo1.Lines.Append(format('pressed middle button (%d, %d)'  , [pt.x, pt.y]));
 wm_mbuttonup   : Form1.Memo1.Lines.Append(format('released middle button (%d, %d)' , [pt.x, pt.y]));
 wm_rbuttondown : Form1.Memo1.Lines.Append(format('pressed right button (%d, %d)'   , [pt.x, pt.y]));
 wm_rbuttonup   : Form1.Memo1.Lines.Append(format('released right button (%d, %d)'  , [pt.x, pt.y]));
 wm_mousewheel  : begin
   if smallInt(mouseData shr 16) > 0
   then Form1.Memo1.Lines.Append('scrolled wheel (up)')
   else Form1.Memo1.Lines.Append('scrolled wheel (down)');
 end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
const
 wh_keybd_ll = 13;
 wh_mouse_ll = 14;
 
begin
kHook := SetWindowsHookEx(wh_keybd_ll, @LowLevelKeybdHookProc, hInstance, 0);
mHook := SetWindowsHookEx(wh_mouse_ll, @LowLevelMouseHookProc, hInstance, 0);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnhookWindowsHookEx(kHook);
UnhookWindowsHookEx(mHook);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
form1.caption:='0';
end;

end.
Cevapla
#9
Harika
Kalan ömrünün en genç build’indesin.
Counter artar, deadline sabit.
Age++ çalışıyor, rollback yok.
Her yer exception
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Mouse Orta tuşu ile Dbgrid Scroll unu hareket ettirme stevenskat 2 1.019 22-08-2023, Saat: 22:37
Son Yorum: stevenskat
  Mouse Tıklatma apachi2006 7 3.465 08-02-2022, Saat: 11:57
Son Yorum: apachi2006
  Mouse Up eventinda click sayımı kofmaster 7 3.404 08-04-2021, Saat: 00:57
Son Yorum: savasabd
  windows 10 üzerinde klavye mouse ve dokunmatiği devre dışı bırakmak suleymangul0 1 1.565 09-03-2021, Saat: 20:05
Son Yorum: Tuğrul HELVACI
  Formun tamamında geçerli mouse sağ click olayı yakalama cinarbil 4 2.505 07-11-2020, Saat: 20:34
Son Yorum: Mr.Developer



Konuyu Okuyanlar: 2 Ziyaretçi