PDA

View Full Version : سوال در مورد کد نویسی



mehdi_moosavi
دوشنبه 14 اردیبهشت 1383, 18:52 عصر
سلام به همه‏ی دوستان ( مخصوصا آقای مدیر )

یک سوال در مورد کدنویسی :
فرض کنید روی یک فرم یک Main Menu داریم که وقتی روی یکی از آیتمهای اون کلیک می کنیم یک منوی عمودی باز میشه که 30 حالت داره و وقتی روی هر یک از این 30 حالت کلیک می‏کنیم یک فانکشن بنام MyFunc اجرا میشه.
تنها فرقی که هست اینه که وقتی روی اولین حالت کلیک می‏کنیم فانکشن MyFunc با پارامتر 1 و وقتی روی دومین حالت کلیک می‏کنیم با پارامتر 2 و همینطور تا آخر یعنی وقتی روی حالت
30ام کلیک می‏کنیم فانکشن با پارامتر 30 فراخوانی میشه.

راهی که برای کدنویسی وجود داره ( یعنی همون راهی که من بلدم ) اینه که 30 بار در ایونت
Click هرکدوم از حالتهای منو ، فانکشن MyFunc با پارامتر 1 تا 30 فراخوانی بشه.

در حالت اول:

MyFunc(1)
در حالت دوم:

MyFunc(2)
و همینطور در حالت سی‏ام:

MyFunc(30)
حالا با توجه به اینکه تنها فرقی که وجود داره پارامتر ارسالیه، آیا راه حل ساده تری برای کدنویسی وجود داره؟

چطور میتونیم بگیم فانکشن MyFunc اجرا بشه وپارامتر اون شماره هرکدوم از حالتهای منوی عمودی باشه که روی اون کلیک شده مثلا:


MyFunc(شماره منویی که روی اون کلیک شده)

متشکرم

سار
دوشنبه 14 اردیبهشت 1383, 19:59 عصر
تو VB خودش Array Control رو ابجکتها میزاره ولی من تو دلفی این رو ندیدم.
اتفاقا یه پروژه هم داشتم که شدیدا نیاز به Array Control داشت که در آخر به این نتیجه رسیدم که با VB کار کنم بهتره چون تا اونجایی که من یافتم در دلفی Array Control رو باید خودم با کد نویسی پیاده کنم.
اگر دوستان راه بهتری سراغ دارن لطفا بگن چون مسلئه جالبی هستش.

hotice
سه شنبه 15 اردیبهشت 1383, 00:58 صبح
سلام
یک راه خیلی آسونی هست که از ابجکت Sender کمک بگیری این ابجکت مشخصات شئ فرستنده پیغام رو داره اول این رو بگم که هر یک از منوهات یک اسم دارن Sender بوسیله اونا شئ رو میشناسه خوب بریم سر برنامه :

procedure TForm1.FNewClick(Sender: TObject);
begin
if sender=FNew then
my func 1
else if sender=FOpen then
my founc 2
.
.
.
end;
به همین راحتی فقط توی event منوی open (که خاصیت name اون fnew است)در رخداد onclick رو انتخاب کن یعنی برای تمام 30 منوت این فانکشن رو انتخاب کن
این رو میخام بگم که با Sender می شه ابجکت هارو شناسایی کنی حتی ایتم های منو رو
موفق باشی :flower:<span dir=ltr></span>

mehdi_moosavi
سه شنبه 15 اردیبهشت 1383, 05:24 صبح
سلام HOTICE جان
بابا ایولا، دمت گرم، خیلی واردی، عجب راه جالبی بود، فکر نمی‏کردم اینقدر ساده باشه
ممنون از کمکت، با کمک شما مشکل کلا حل شد.
دلفی هیچوقت آدمو ناامید نمی‏کنه :lol:

hotice
سه شنبه 15 اردیبهشت 1383, 08:30 صبح
خوشحالم که مشکلتون حل شد. :)
اگه راه دیگری پیدا کردی به ما هم بگو !

mehdi_moosavi
سه شنبه 15 اردیبهشت 1383, 12:04 عصر
سلام HOTICE جان
چیزی که بنظرم رسید بگم اینه که در کدی که شما نوشتید یک شرط مقدار موجود در Sender رو
چک می‏کنه و چون 30 تا آیتم داریم حداقل 30 خط کد لازمه ولی اگه این شرط رو داخل یک حلقه بذاریم که 30 بار تکرار بشه ، کدی که باید نوشته بشه باز هم کمتر میشه، البته بجای مقدار Name باید مقدار Tag آیتمها چک بشه ( باید قبلا Tag آیتمها رو از 1 تا 30 قرار بدیم ) با این روش مقدار کدی که نوشته میشه خیلی خیلی کم میشه مثلا:


procedure TForm1.N1Click&#40;Sender&#58; TObject&#41;;
var i&#58;Integer;
begin
for i&#58;=1 to 30 do if &#40;Sender as TMenuItem&#41;.Tag=i then begin MyFunc&#40;i&#41;; Break; End;
end;


باز هم از کمکی که کردید متشکرم

سار
پنج شنبه 17 اردیبهشت 1383, 06:25 صبح
حالا یه چیز دیگه.
من میخوام تو برنامه امکان ساخت انواع آبجکتها رو بدم.
و برای هر آبجکتی که میزاره امکان تایین یک کد از ییش تعریف شده.
یه چیزی تو مایه های مولتی مدیا بیلدر.
چه باید کرد؟

hotice
پنج شنبه 17 اردیبهشت 1383, 09:31 صبح
سلام
ببخشید من سوال دوم شما رو متوجه نشدم :roll:
اگه ممکن هست واضح تر توضیح بدید .
من MMB کار نکردم :|
موفق باشید. :)

سار
پنج شنبه 17 اردیبهشت 1383, 23:41 عصر
یه چیزی تو همون مایه های محیط طراحی دلفی.
فقط اینجا کدهای ایونتها از قبل نوشته شده و فقط به با ابجکت ارتباط داده میشه.