PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : توابع کار با موس



adanayi
19 / July / 2013, 09:07 PM
سلام به همه.می دونم که دلفی 7 اختیارات کاملی روی کار با موس در اختیار کاربر قرار می ده.*
مشکل من اینه که نمی دونم با چه تابعی میشه، روی جا یا پبکسل خاصی از صفحه کلیک کرد؟
اگر کسی می دونه راهنمایی کنه.
اگر هرچیزی درباره ی کار با موس می دونید بنویسید تا استفاده کنیم.
با تشکر.

admin
19 / July / 2013, 09:51 PM
سلام.
در مورد کار با موس ما* 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 (در واقع رو به جلو ) قرار بدهیم فراخوانی می شود.

admin
19 / July / 2013, 10:03 PM
این هم کد یونیت مورد نظر :
کد:


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 ها انجام بدید ...

adanayi
20 / July / 2013, 04:01 AM
خیلی ممنونم دوست عزیز.ولی منظورم رو بد رسوندم. و وقت شما رو گرفتم.
ببینین من دارم برنامه ای می نویسم که لازمه روی پیکسل خاصی از صفحه کلیک کنه. یعنی در واقع خود اون برنامه ای که نوشتم عمل کلیک کردن رو شبیه سازی کنه.
ممنون میشم راهنمایی کنید.
البته از event هایی که نوشتید، استفاده بردم ها!<span style="font-family: trebuchet ms"><font size="3"><font color="Indigo"><b><font color="red">[فقط اعضاء انجمن قادر به مشاهده لینکها و عکسها می باشند <a href="/reg_iran.php" target="_blank">برای عضویت در سایت کلیک کنید</a>]</font></b></font></font></span>
راستی یک سوال دیگه هم دارم:
برنامه می تونه موقعیت موس تو صفحه ی ویندوز رو تشخیص بده؟ حتا اگه خارج از فرم اصلی باشه؟

admin
21 / July / 2013, 04:13 PM
این کار رو تو جاوا با 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:=&quot;Original Form position : &quot;+inttostr(X)+&quot;,&quot;+inttostr(Y);*
Label2.Caption:=&quot;calculated form position : &quot;+inttostr(new.X)+&quot;,&quot;+inttostr(new.Y);*
Label3.Caption:=&quot;Screen position : &quot;+inttostr(scr.X)+&quot;,&quot;+inttostr(scr.Y);
* Label4.Caption:=&quot;calculated screen position : &quot;+inttostr(sc.X)+&quot;,&quot;+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(&quot;Hi IranDelphi ...&quot;);
end;

البته قبلش یک Button و چهار* lable رو روی صفحه قرار بدید.