View Full Version : ارسال Event
مهدی فهمیده غلامی
چهارشنبه 27 اسفند 1382, 21:03 عصر
با تشکر از راهنمایی دوستان
اما این کامپوننت image وقتی که ماوس از وری ان خارج می شود و رویداد OnMouseLeave رخ می دهد پی در پی فراخوانی می شود و کد مربوط به Handler انرا
اجرا می کند که متاسفانه موجب درگیر شدن سیستم با این رویداد می شود ایا رویدادی وجود ندارد که به محض خارج شدن ماوس دیگر رخ ندهد؟
البته با یه متغیر flag میشه اونو کنترل کرد که فقط یه بار اجرا شود ولی باز کارایی و هر دفعه شرط چک می شه!!.(مربوط به افزودن رویداد های onmouse enter ,onmouse leave(
مهدی کرامتی
چهارشنبه 27 اسفند 1382, 21:44 عصر
1- آقا شما مثل اینکه قصد ترور زبان مارو کردیدها، چند بار بگیم تیتر سوال رو مرتبط انتخاب کنید؟ :?
2- نمونه کد و یا سورس پروژه سادهای که این مشکل در آن وجود داشته باشد را اینجا بنویسید تا بررسی شود.
moradi_am
پنج شنبه 28 اسفند 1382, 07:31 صبح
اما این کامپوننت image وقتی که ماوس از وری ان خارج می شود و رویداد OnMouseLeave رخ می دهد
اما کامپوننت Image اصلا رویداد OnMouseLeave ندارد :متفکر:
آقا شما مثل اینکه قصد ترور زبان مارو کردیدها،
:lol: :lol:
آقای کرامتی یک login Script بنویسید که موقعی که آقای فهمیده login میشود چک کند نارنجک به کمر نداشته باشد .
(با عرض معذرت از آقای فهمیده یک شوخی بود).
__________________________________________
http://www.qazvin-ed.co.ir/happy.gif
jirjirakk
پنج شنبه 28 اسفند 1382, 14:04 عصر
آقای مرادی اگه شما پاتون رو روپاش نزاری و اون نیفته هیچ اتفاق خاصی نخواهد افتاد :wink: :P
Mehdi_FT
جمعه 29 اسفند 1382, 03:07 صبح
سلام
فکر کنم جوابت با این کد بگیری
اول یک کلاس از timage مشتق می کنی و دو رویداد Cm_mouseenter , Cm_mouseleave را بهش اضافه می کنی کد زیر :
Timage2=class(Timage)
procedure imageenter(var msg : TMessage); message cm_mouseenter;
procedure imageleave(var msg : TMessage); message cm_mouseleave;
end;
خوب حالا باید یک نمونه از کلاس جدید (Timage2) را ایجاد کنی معمولا هم در رویداد FormCreate این کار می کنن
مهدی فهمیده غلامی
جمعه 29 اسفند 1382, 12:11 عصر
اقا منظورم این کد مشکل را در اولین قسمت صفحه گفتم لطفا حالا پاسخ دهید؟
unit MyImage;
interface
uses
SysUtils, Classes, Controls, ExtCtrls, Messages;
type
TMyImage = class(TImage)
private
FOnEnter: TNotifyEvent;
FOnLeave: TNotifyEvent;
protected
procedure CMMouseEnter( var Msg: TMessage ); message CM_MOUSEENTER;
procedure CMMouseLeave( var Msg: TMessage ); message CM_MOUSELEAVE;
public
{ Public declarations }
published
property OnEnter: TNotifyEvent read FOnEnter write FOnEnter;
property OnLeave: TNotifyEvent read FOnLeave write FOnLeave;
end;
procedure Register;
implementation
//*********************************************
//
//*********************************************
procedure TMyImage.CMMouseEnter( var Msg: TMessage);
begin
inherited;
if assigned(FOnEnter) then
FOnEnter(self);
end;
procedure TMyImage.CMMouseLeave( var Msg: TMessage);
begin
inherited;
if assigned(FOnLeave) then
FOnLeave(self);
end;
//*********************************************
// Register Component
//*********************************************
procedure Register;
begin
RegisterComponents('Behzad', [TMyImage]);
end;
end.
مهدی فهمیده غلامی
جمعه 29 اسفند 1382, 12:15 عصر
مشکل کد بالا اینه که وقتی ماوس از روی کنترل IMAGE خارج می شه مرتبا رویداد ONMOUSELEAVE بطور پی در پی صدا زده میشه که این خیلی ناجوره
در ضمن
بابا حالا ما یه اشتباهی کردیم اینقدر خرابمون نکیند دیگه !!! دمتون گرم
Mehdi_FT
جمعه 29 اسفند 1382, 17:55 عصر
سلام مجدد
آقا مهدی من شرمنده به خاطر جواب قبلیم.
مشکل تکرار رویداد ONMOUSELEAVE در یک حالت خاص هست
یکی از این حالتهای خاص اینکه شما یه پیغام روی صفحه نمایش دهید مثلا با دستور ShowMessage
چون این پنجره به حالت modal باز می شه باعث می شود از این رویداد خارج نشه و دوباره کاری کند
حل مشکل--> کد زیر
procedure TForm1.MyImage1Leave(Sender: TObject);
begin
MyImage1.OnLeave:=nil;
showmessage('test');
MyImage1.OnLeave:=MyImage1Leave;
end;
البته این مشکل یک مشکل خاصه و اگر نمی خواهید یه پنجره modal باز کنید احتیاج به کد بالا نیست.
انشا الله که این جواب بدرد بخوره
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.