Yorumları: 277
Konuları: 50
Kayıt Tarihi: 05-08-2019
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 1.294 Programcı
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
Yorumları: 89
Konuları: 9
Kayıt Tarihi: 14-08-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 305 Acemi
20-06-2024, Saat: 00:46
(Son Düzenleme: 20-06-2024, Saat: 00:46, Düzenleyen: anemos.)
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
.
Yorumları: 277
Konuları: 50
Kayıt Tarihi: 05-08-2019
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 1.294 Programcı
(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
Yorumları: 852
Konuları: 40
Kayıt Tarihi: 11-11-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.327 Uzman
(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.
Yorumları: 277
Konuları: 50
Kayıt Tarihi: 05-08-2019
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 1.294 Programcı
(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
Yorumları: 852
Konuları: 40
Kayıt Tarihi: 11-11-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.327 Uzman
20-06-2024, Saat: 13:55
(Son Düzenleme: 20-06-2024, Saat: 13:56, Düzenleyen: hi_selamlar.)
(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,
test.zip (Dosya Boyutu: 868 Bayt / İndirme Sayısı: 13)
Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Yorumları: 277
Konuları: 50
Kayıt Tarihi: 05-08-2019
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 1.294 Programcı
Ö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
Yorumları: 124
Konuları: 2
Kayıt Tarihi: 31-08-2021
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 550 Acemi
23-06-2024, Saat: 02:23
(Son Düzenleme: 23-06-2024, Saat: 02:23, Düzenleyen: vedat35.)
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.
Yorumları: 277
Konuları: 50
Kayıt Tarihi: 05-08-2019
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 1.294 Programcı
Harika
Kalan ömrünün en genç build’indesin.
Counter artar, deadline sabit.
Age++ çalışıyor, rollback yok.
Her yer exception
|