![]() |
|
Fare Hareketi Yakalamak : Mouse.CursorPos.X - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3) +--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6) +--- Konu Başlığı: Fare Hareketi Yakalamak : Mouse.CursorPos.X (/showthread.php?tid=7770) |
Fare Hareketi Yakalamak : Mouse.CursorPos.X - bydelphi - 19-06-2024 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. Fare Hareketi Yakalamak : Mouse.CursorPos.X - anemos - 20-06-2024 Timer yerine SetWindowLong WinAPI & Subclassing a Window özelliği ile yapabilirsiniz. Dikkatli kullanılması gerekir... https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowlonga https://learn.microsoft.com/en-us/windows/win32/winmsg/using-window-procedures . Cvp: Fare Hareketi Yakalamak : Mouse.CursorPos.X - bydelphi - 20-06-2024 (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... 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. Cvp: Fare Hareketi Yakalamak : Mouse.CursorPos.X - hi_selamlar - 20-06-2024 (19-06-2024, Saat: 16:49)bydelphi Adlı Kullanıcıdan Alıntı: Merhabalar, Merhabalar, procedure WMMouseMove(var Msg: TWMMouseMove); message WM_MOUSEMOVE; API ile denermisiniz lütfen. Umarım yardımcı olur. Kolay gelsin. Cvp: Fare Hareketi Yakalamak : Mouse.CursorPos.X - bydelphi - 20-06-2024 (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, 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.
Cvp: Fare Hareketi Yakalamak : Mouse.CursorPos.X - hi_selamlar - 20-06-2024 (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, Merhabalar, [attachment=2725] [attachment=2727] Kolay gelsin. Fare Hareketi Yakalamak : Mouse.CursorPos.X - bydelphi - 20-06-2024 Örnek kod için Çok Teşekkür ederim kardeşim , tam arzu ettiğim gibi Fare Hareketi Yakalamak : Mouse.CursorPos.X - vedat35 - 23-06-2024 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.
Fare Hareketi Yakalamak : Mouse.CursorPos.X - bydelphi - 24-06-2024 Harika |