PDA

View Full Version : کلیک در یک مکان؟



Delphi-Man
جمعه 16 فروردین 1387, 20:26 عصر
سلام
چطوری می شه در یک جا با دادن x و y به یک دستور دلفی کلیک کرد. مثلا نشانه گر ماوس رو به 0,0 منتقل و سپس با استفاده از یک دستور کلیک کنیم؟

lord_viper
جمعه 16 فروردین 1387, 23:12 عصر
با تابع SetCursorPos(x,y) میتونین مکانمای موس رو به نقطه دلخواه ببرین
برای کلیک هم با تابع WindowFromPoint(p) که p از نوع پوینتر بوده و مکان جاری موس هست هندل جایی رو که موس درش قرار داره به دست میاریم اون handleو با تابع


sendmessage(handle,wm_lbuttondown,0,0);
sendmessage(handle,wm_lbuttonup,0,0);

رو ارسال میکنیم

Delphi-Man
یک شنبه 18 فروردین 1387, 19:59 عصر
با تابع SetCursorPos(x,y) میتونین مکانمای موس رو به نقطه دلخواه ببرین
برای کلیک هم با تابع WindowFromPoint(p) که p از نوع پوینتر بوده و مکان جاری موس هست هندل جایی رو که موس درش قرار داره به دست میاریم اون handleو با تابع


sendmessage(handle,wm_lbuttondown,0,0);
sendmessage(handle,wm_lbuttonup,0,0);
رو ارسال میکنیم
ولی با WindowFromPoint فقط هندل پنجره ها مشخص میشه نه مکان ماوس، لطفا راهنمایی کنید.

Cave_Man
یک شنبه 18 فروردین 1387, 20:50 عصر
برای گرفتن مکان موس میتونی از خود شیء موس استفاده کنی

mouse.CursorPos
,ولی تا جایی که من از سوالت متوجه شدم سوالت اصلا این نبود

Delphi-Man
یک شنبه 18 فروردین 1387, 22:40 عصر
نه، جناب CyberFox فرمودند که handle مکان ماوس، من منظورم handle مکان ماوس بود.
WindowFromPoint هندل پنجره ای رو به دست میاره که زیر ماوس قرار داره.
حالا اگه ممکنه منو راهنمایی کنید.

Cave_Man
دوشنبه 19 فروردین 1387, 12:55 عصر
اگه منظورت هندل کنترلی هست که زیر موس قرار داره متونی با ApplicationEvents
این رو به دست بیاری
توی رویداد ONMessage اون میتونی این کد رو قرار بدی

if MSG.message=WM_MOUSEMOVE then
msg.hwnd //this is the handle of control u need!توی همون Event هم میتونی با این کد نام اون کامپوننت رو بدست بیاری


if MSG.message=WM_MOUSEMOVE then

if ControlAtPos(SCreentoClient(mouse.CursorPos),true, true)<>nil then
Memo1.Lines.Add(ControlAtPos(SCreentoClient(mouse. CursorPos),true,true).Name);

Delphi-Man
دوشنبه 19 فروردین 1387, 23:18 عصر
نه! بازم این کاری نبود که من می خواستم انجام بدم، من خیلی ساده می خواستم با یک برنامه رویداد کلیک ماوس را اجرا کنم، مثلا با SetCursorPos مکان ماوس رو تغییر بدم و بعد به جای این که خودم با ماوس کلیک کنم، توسط یک برنامه با دلفی این کار رو انجام بدم.

Cave_Man
سه شنبه 20 فروردین 1387, 16:06 عصر
procedure Click_XY(x,y:integer);
begin
SetCursorPos(X+Screen.ActiveForm.Left+GetSystemMet rics(SM_CXSIZEFRAME),Y+Screen.ActiveForm.Top+GetSy stemMetrics( SM_CYCAPTION)+GetSystemMetrics(SM_CXSIZEFRAME));
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) ;
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
end;
این پروسیجر رو باید فراخوانی کنید و طول و عرض فرم رو بهش بدید تا اونجا رو کلیک کنه.دقیقه:چشمک: