PDA

View Full Version : ایجاد رویداد OnmouseLeave



Hsimple11
جمعه 06 مهر 1386, 23:46 عصر
با سلام.
میخوام برای چند تا از کنترلام رویداد onmouseleave بنویسم. میشه راهنمایی کنید؟
آیا بهتره این رویدادو خودم بنویسم یا از مشخصات ماوس استفاده کنم؟

Arman_1367
شنبه 07 مهر 1386, 00:21 صبح
با سلام.
میخوام برای چند تا از کنترلام رویداد onmouseleave بنویسم. میشه راهنمایی کنید؟
آیا بهتره این رویدادو خودم بنویسم یا از مشخصات ماوس استفاده کنم؟

باید از پیغام WM_MOUSELEAVE استفاده کنید

مثال :

unit Unit1;

interface

uses
Windows, Messages{This unit Most Be Used}, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
private
Procedure WMMOUSELEAVE(Var MSG:TMessage);message{Windows Send This Message To The WinControl} WM_MOUSELEAVE;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.WMMOUSELEAVE(var MSG: TMessage);
begin
{Your Code Most Be Here}
ShowMessage('Hello');
end;

end.


موفق باشید.:چشمک:

Hsimple11
شنبه 07 مهر 1386, 01:23 صبح
من متوجه نشدم. آقا آرمان میشه بیشتر توضیح بدی؟
مثلا اگه بخوام واسه یه دکمه onmouseleave بنویسم چیکار کنم؟
کدی که نوشته بودی رو استفاده کردم ولی جوابی نداشت.
ممنون.....

manvaputra
شنبه 07 مهر 1386, 02:48 صبح
سلام دوست عزیز براحتی می تونی اینکارو بکنی برات یه مثال می زنم مثلا می خوای یه button داشته باشی که این خاصیت هایی که گفته بودی رو داشته باشه:
توی دلفی از منوی new قسمت unit رو انتخاب کن.
حالا این کد رو توی یونیتت بنویس:

unit pbutton;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls,StdCtrls;

type
putrabutton = class (Tbutton)
private
{ Private declarations }
FOnMouseLeave: TNotifyEvent;
FOnMouseEnter: TNotifyEvent;
procedure CMMouseEnter(var msg: TMessage);
message CM_MOUSEENTER;
procedure CMMouseLeave(var msg: TMessage);
message CM_MOUSELEAVE;
protected
{ Protected declarations }
procedure DoMouseEnter; dynamic;
procedure DoMouseLeave; dynamic;
public
{ Public declarations }
published
{ Published declarations }
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('manvaputra', [putrabutton]);
end;

{ putrabutton }

procedure putrabutton.CMMouseEnter(var msg: TMessage);
begin
DoMouseEnter;
end;

procedure putrabutton.CMMouseLeave(var msg: TMessage);
begin
DoMouseLeave;
end;

procedure putrabutton.DoMouseEnter;
begin
if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
end;

procedure putrabutton.DoMouseLeave;
begin
if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);
end;

end.و اونو ذخیره کن.
حالا یه فایل pas. داری این که شئ از جنس Button با این تفاوت که رویداد مورد نظرت بهش اضافه شده. برای اشیای دیگه کلاسو عوض کن مثلا کلاس رو می تونی از جنس Timage معرفی کنی.
حالا می تونی این فایل رو بصورت کامپوننت نصب کنی و استفاده کنی.
توی این مثال وقتی نصبش می کنی یه تب می سازه به اسم manvaputra که button رو اونجا می تونی پیدا کنی.

Arman_1367
شنبه 07 مهر 1386, 13:15 عصر
کاربر manvaputra فکر کنم من هم از همین روش استفاده کرده بودم.

manvaputra
شنبه 07 مهر 1386, 13:42 عصر
جناب آرمان عزیز سو تفاهم نشه من نگفتم روشم فرق داره فقط چون دوستمونگفنه بود متوجه نشده و مثلا پرسیده بود برای یک کلید باید چکار کنم من این مثال رو گذاشتم اگه دقت کنید کد من و شما اساسا یکیه جایی هم نگفتم روش من سا روش شما فقط توضیحات تکمیلی بود امیدوارم سو تفاهم بر طرف شده باشه