PDA

View Full Version : eventدر نوشتن کامپوننت



lord_viper
دوشنبه 14 خرداد 1386, 22:15 عصر
با سلام
چطور میتونم تو رویدادهایی که برای کامپوننت تعریف میکنم چند پارامتر تعریف کنم مثل رویداد onkeydown که چند پارامتر داره
با تشکر

Arman_1367
سه شنبه 15 خرداد 1386, 00:03 صبح
مثال زیر را نگاه کن:

Type TSampleOnEvent=Procedure (Sender:TObject;X,Y:Integer;SS:String)of Object;
TSampleComponent=Class(TComponent)
Private
fEvent:TSampleonevent;
Procedure UseEvent;
Published
Property OnEvent:TSampleOnEvent Read FEvent Write FEvent;
End;
.
.
.
Procedure TSampleComponent.UseEvent;
Begin
If Assigned(FEvent) then
FEvent(Self,10,10,'Hello from event');
End;

lord_viper
جمعه 18 خرداد 1386, 15:24 عصر
با سلام
بعضی وقتا یه سری متد تعریف میکنیم برای فورم برای کارهای خاص مثل
private
procedure exit(var msg:twmclose);message wm_close;
یا
procedure tryicon(var Msg: TMessage); message WM_user+1
اکه بخوایم این قابلیتهاها رو برای کامپوننتمون قرار بدیم چکار باید کرد

m-khorsandi
جمعه 18 خرداد 1386, 16:24 عصر
خوب همین رو برای کلاس مورد نظرت بنویس!

Hamid_PaK
جمعه 18 خرداد 1386, 16:28 عصر
در تایید حرف آقای خورسندی ، خوب اینسری روالها یا باید در کلاس والد باشه که شما بتونید ازش استفاده کنید (مثلا Override) و
یا همونطوری که خودتون فرمودید باید از طریق پیامهای ویندوز (TMessage) و تعریف پیامهای دستی کاربری ازشون استفاده کرد ...

یا حق ...

Arman_1367
جمعه 18 خرداد 1386, 22:41 عصر
خوب همین رو برای کلاس مورد نظرت بنویس!

فکر کنم این حرف در صورتی درست باشه که شما یک Handle درست کنید تا پیغام های از طریق آن برای شما ارسال شود.اگر کمپاننت شما از کلاس TwinControl باشه دیگه نیازی به این کار نباشه.البته راه های دیگری برای مدیریت پیغام ها وجود داره.:متعجب:

lord_viper
جمعه 18 خرداد 1386, 22:49 عصر
خب من کلاس کامپوننت رو tcomponeent میگزارم وقتی مستقیم براش کد نویسی میکنم رویدادهاش اجرا نمیشه یه تیکه کد دیدم که تو کامپوننت طرف یه windowsproc جدید ایجاد کرد برای فورم تو کتمپوننت و اونو از قدیمی به جدیدی منتقل کرد تا مسیجهای ی مورد نظرش رو بگیره

Arman_1367
شنبه 19 خرداد 1386, 00:17 صبح
این کار هم کاملاً درسته و مشکل خاصی نداره.
اما من قبلاً یه FormDesigner برای برنامه هام نوشتم که با اون می شد اجزا را جابه جا کرد و ... اما اگر من اون موقع می خواستم از این روش استفاده کنم و برای هر کمپاننت در فرم یک پروسه به این روش درست کنم اونقت اگر مثلاً 100 تا کمپاننت روی فرم من بود باید صد بار تابع فراخوانی می شد تا از آخرین به اوین جابه جا بشه و فرم والد پروسه را تکمیل کنه.در این صورت اگر تعداد فرم ها هم زیاد می شد برنامه قاط می زد توپ توپ پس اگر به موارد اینجوری مربوط می شه از روش من بری بهتره در غیر اینصورت روش شما ساده تره و بهتره به نظر من باز هم بستگی به موقعیت و کار کمپاننت و ... داره.:تشویق: