-
توابع کار با موس
سلام به همه.می دونم که دلفی 7 اختیارات کاملی روی کار با موس در اختیار کاربر قرار می ده.*
مشکل من اینه که نمی دونم با چه تابعی میشه، روی جا یا پبکسل خاصی از صفحه کلیک کرد؟
اگر کسی می دونه راهنمایی کنه.
اگر هرچیزی درباره ی کار با موس می دونید بنویسید تا استفاده کنیم.
با تشکر.
-
سلام.
در مورد کار با موس ما* Event های مختلفی داریم.
یکی از آنها OnMouseDown است که همان رویداد کلیک کردن می باشد، شما می توانید در این رویداد از آرگومانهای خودش استفاده کنید مثلا با این کد نشان دهید که در کدام نقطه کلیک کرده اید :
کد:
کد:
ShowMessage("X="+IntToStr(X) + "...Y="+IntToStr(Y));
و همچنین با این کد شرط می گذارید که اگر فلان نقطه بود فلان کار را انجام بده :
کد:
کد:
if (X=100) and (Y=100) then
ShowMessage("Goal");
رویدادهای دیگه ای هم موس دارد که به شرح زیر می باشد :
ابتدا براي انتخاب يك رويداد از پنجره Object Inspector قسمت Events را انتخاب كنيد تا ليستي از رويدادها ظاهر شوند .
OnMouseDown : وقتي يكي از كليدهاي ماوس فشار داده شود اين رويداد فراخواني مي شود .
OnMouseMove: هنگامي كه اشارهگر ماوس روي فرم حركت مي كند ، اين رويداد فراخواني مي گردد .
OnMouseUp : زماني كه كاربر كليد فشرده شدة ماوس را رها مي كند اين رويداد فراخواني مي شود .
OnMouseWheel :زمانی که دکمه ی چرخان موس در حال چرخاندن است فراخوانی می شود.
OnMouseWheelDown : زمانی که دکمه ی چرخان موس را در حالت Down(در واقع به سمت عقب) قرار بدهیم فراخوانی می شود.
OnMouseWheelUp : زمانی که دکمه ی چرخان موس را که در حالت Up (در واقع رو به جلو ) قرار بدهیم فراخوانی می شود.
-
این هم کد یونیت مورد نظر :
کد:
کد:
unit Unit1;
interfaceuses
* Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,* Dialogs, StdCtrls;
type*
TForm1 = class(TForm)**
* procedure FormMouseDown(Sender: TObject; Button: TMouseButton;***** Shift: TShiftState; X, Y: Integer);*
** procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;*
**** WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
*** procedure FormMouseWheelDown(Sender: TObject; Shift: TShiftState;**
*** MousePos: TPoint; var Handled: Boolean);
*** procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState;**
*** MousePos: TPoint; var Handled: Boolean);*
** procedure FormMouseUp(Sender: TObject; Button: TMouseButton;***
** Shift: TShiftState; X, Y: Integer);*
* procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,***** Y: Integer);*
** procedure FormCreate(Sender: TObject);*
private*
** { Private declarations }*
public***
{ Public declarations }*
end;
var
* Form1: TForm1;
implementation
uses
Math;{$R *.dfm}
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
* Shift: TShiftState; X, Y: Integer);
begin
ShowMessage("X="+IntToStr(X) + "...Y="+IntToStr(Y));
if (X=100) and (Y=100) then
ShowMessage("Goal");
end;
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
* WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
* ShowMessage("FormMouseWheel");
end;
procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
* MousePos: TPoint; var Handled: Boolean);
begin*
ShowMessage("FormMouseWheelDown");
end;
procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
* MousePos: TPoint; var Handled: Boolean);
begin
*ShowMessage("FormMouseWheelUp");
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;*
Shift: TShiftState; X, Y: Integer);
begin
ShowMessage("FormMouseUp");
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState;
X,* Y: Integer);
begin
*if (X=100) and (Y=100) then
ShowMessage("FormMouseMove");
end;
end.
البته شما می تونید هر کاری رو که مد نظرتون هست در این مابین begin* و* end ها انجام بدید ...
-
خیلی ممنونم دوست عزیز.ولی منظورم رو بد رسوندم. و وقت شما رو گرفتم.
ببینین من دارم برنامه ای می نویسم که لازمه روی پیکسل خاصی از صفحه کلیک کنه. یعنی در واقع خود اون برنامه ای که نوشتم عمل کلیک کردن رو شبیه سازی کنه.
ممنون میشم راهنمایی کنید.
البته از event هایی که نوشتید، استفاده بردم ها![برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید]
راستی یک سوال دیگه هم دارم:
برنامه می تونه موقعیت موس تو صفحه ی ویندوز رو تشخیص بده؟ حتا اگه خارج از فرم اصلی باشه؟
-
این کار رو تو جاوا با Robot انجام میدیم.
تو هر فرمی میتونه این کار رو بکنه .کد زیر رو امتحان کنید :
کد:
کد:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,* Y: Integer);
*var
* sc,new,scr:tpoint;
begin*
scr.x:=Mouse.CursorPos.x;
* scr.y:=Mouse.CursorPos.y;*
new:=form1.ScreenToClient(scr);
* sc:=form1.ClientToScreen(new);*
Label1.Caption:="Original Form position : "+inttostr(X)+","+inttostr(Y);*
Label2.Caption:="calculated form position : "+inttostr(new.X)+","+inttostr(new.Y);*
Label3.Caption:="Screen position : "+inttostr(scr.X)+","+inttostr(scr.Y);
* Label4.Caption:="calculated screen position : "+inttostr(sc.X)+","+inttostr(sc.Y);
*if ((X>100) and (x<150)) and ((Y>100) and (y<150)) then
Form1.Button1Click(Button1);
end;
procedure TForm1.Button1Click(Sender: TObject);
beginShowMessage("Hi IranDelphi ...");
end;
البته قبلش یک Button و چهار* lable رو روی صفحه قرار بدید.