PDA

View Full Version : Component Programing



MH2538
شنبه 03 مرداد 1383, 18:50 عصر
سلام
برای کنترل کلیه event های ماوس برای چند image در یک کامپننت چه راه حلی دارید ؟
برای توضیح بیشتر . :
فرض کنید روی یک کامپننت که از کلاس Panel به ارث برده شده است بخواهید 3 تا Imageقرار دهید . و نیاز به کنترل کردن کلیه event های ماوس روی آن image ها داشته باشید . برای حل این موضوع چه می کنید

neo_matrix
یک شنبه 04 مرداد 1383, 17:03 عصر
یک می نویسیم و کارهایی را که می خواهیم انجام دهد را در ان قرار می دهیم و سپس به eventهایی که می خواهیم یک کار انجام دهند این تابع را نسبت می دهیم. بطور مثال :

;procedure sayhello
begin
;('showmessage('salam
; end
حال این تابع را به تمام eventهای onmousedown نصبت می دهیم.
البته نمی دانم این روش تا چه حد کار ساز است لطفا نقد کنید.

MH2538
یک شنبه 04 مرداد 1383, 17:37 عصر
سلام دوست عزیز
ببینید وقتی شما کامپننت می نویسید . در حالت عادی فقط event های self (خود کامپننت و نه اشیاء داخل آن) قابل دسترس است . د رمورد مثال شما مشکل این است که ما نمی دانیم چه event ای و از طرف چه object ای رخ داده است بنا براین نمی توانیم ان را فراخوانی نمائیم

_alish_
دوشنبه 05 مرداد 1383, 10:08 صبح
با سلام
یک نوع داده رویه ای با همان پارامترها در رویه مورد نظر بنویس سپس یک رویه با نام دلخواه بنویس بعد در Construct
مثلا
FImage1.onclick:=Proc;
FImage2.onclick:=Proc
...

فقط آرگومانهای تابع Proc با Onclick حتما باید یکی باشد
موفق باشی
end.

MH2538
دوشنبه 05 مرداد 1383, 20:34 عصر
سلام دوست عزیز
شاید من متوجه روش شما نشدم .
اما تا آنجا که من می دانم و همانطور که گفتم شما فقط فراخوانی event های self را شاهد خواهید بود . به عبارتی (برای مثال ) شما اصلا متوجه کلیک شدن روی image ای که در پانل کامپننت خود قرار داده اید نمی شوید تا بخواهید آن را با نوع داده ای که شما فرموده بودید مدیریت کنیم .
ضمنا اگر برای شما ممکن است یک نمونه کوچک را که عملا کار می کند در کنار پاسخ خود قرار دهید تا من و دیگران هم از آن بهره ببریم .
بماند . پاسخ هر سئوال را 7 تا 10 روز بعد (در صورتی که جواب صحیحی داده نشده باشد ) همراه با یک فایل نمونه در همان بخش قرار می دهم .
موفق باشید

SReza1
دوشنبه 05 مرداد 1383, 22:21 عصر
من این کد رو از برای یک Image نوشتم. میشه برای n تا Image نوشت. (کد رو از قسمتی از کامپوننتهای خودم تغییر دادم)
کل Propertyها و رفتار این کامپوننتو ننوشتم(مثل Destructor و ... که معمولا همه دارند)
در این کد با یاجاد یک Property بنام Image1 و ظاهر شدن Combo براس آون میشه یک Image رو انتخاب کرد و کارهای مربوطه رو انجام داد. :shock:
من شبیه این کامپوننتو برای یک لیست باکس نوشتم


TMyPanel = class(TPanel)
private
FImage : TImage;
public
{ Public declarations }
procedure ImageMouseDown(Sender: TObject; Button:TMouseButton;Shift: TShiftState;X, Y: Integer);
procedure ImageMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState;X, Y: Integer);
Procedure ImageMouseMove (Sender: TObject; Shift: TShiftState; X,Y: Integer);
published
{ Published declarations }
property Image1 : TImage Read FImage Write SetFImage;
End;

///////////تعریف رویدادها اینجا انجام میشه////////////////
procedure TMyPanel.ImageMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
////////////// Your Code For MouseDown/////////////
end;

procedure TMyPanel.ImageMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
////////////// Your Code For MouseUp/////////////
end;

Procedure TMyPanel.ImageMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
////////////// Your Code For MouseMove/////////////
end;

///////////ربط رویدادها اینجا انجام میشه////////////////
procedure TMyPanel.SetFImage(MyImage,Value : TImage);
Begin
FImage := Value;
FImage.OnMouseDown:= ImageMouseDown;
FImage.OnMouseMove:= ImageMouseMove;
FImage.OnMouseUp := ImageMouseUp;
End;

MH2538
دوشنبه 05 مرداد 1383, 22:26 عصر
So Good- really good
سلام
این دقیقا یکی از روش هاست.
روش دومی هم می مونه که یه کم مشکل تره که اون رو هم چون مسئه حل شده خودم با اجازه تون فردا می ذارم در همین بخش.

SReza1
دوشنبه 05 مرداد 1383, 22:31 عصر
روش دوم هم اجازه بده بگم
اینکه شما Image رو بصورت دستی در Componnet بسازید(Create کنید). یعنی در Constructor این کار رو بکنید و در destructor اونو free کنید. که البته هر کدوم بستگی به جاش میشه استفاده کرد :shock:

MH2538
سه شنبه 06 مرداد 1383, 18:14 عصر
سلام
مسئله که حل شد
فقط اگه فکر می کنین sample لازم داره بگین تا من یه نمونه کامل و کوچک رو بذارم وگرنه هم که تا سئوال بعد خداحافظ
موفق باشین

josef
چهارشنبه 11 شهریور 1383, 11:14 صبح
سلام و خسته نباشید :flower:
اگه لطف کنید ممنون میشم من هم تازه کارم هم تازه وارد :oops:

عقاب طلایی
شنبه 21 شهریور 1383, 17:53 عصر
سلام

اگه فکر می کنین sample لازم داره بگین تا من یه نمونه کامل و کوچک رو بذارم
اگه ممکنه این کار رو بکنید.
خیلی ممنون می شم.
:flower:

مهرداد برنامه نویس
جمعه 27 شهریور 1383, 16:22 عصر
من یک سوال دارم
چه توری به Image1 دو رویداد cm_mouselave و cm_mouseenter اضافه کنم؟

MH2538
جمعه 10 مهر 1383, 08:21 صبح
سلام من حدود یک ماهی دسترسی به اینترنت نداشتم .اگه جواب ندادم به حساب بدقولی نذارین
ولی چشم من سریعا اون sample رو میذارم و به سئوال این دوستمون هم جواب میدم .
فعلا خدانگهدار