PDA

View Full Version : کلیک خوردن Button در یک MessageDialog



MY DEAR DELPHI
جمعه 18 بهمن 1387, 23:28 عصر
سلام
من یک MessageDialog نوشتم که در اون از یک Combo و یک Button استفاده کردم.کد کلیک خوردن Button رو هنگامی که MessageDialog نمایش داده می شه رومی خواستم که یک عمل خاصی رو انجام بده .

MY DEAR DELPHI
شنبه 19 بهمن 1387, 09:00 صبح
از مدیران ارشد خواهشمندم که لطف کنند جواب بدن من از دیشب تا حالا بخاطر همین کد کارم خوابیده تا اینجاشو نوشتم

If (ShowModal = ID_YES) then
begin
از این به بعد که MessageDialog نمایش داده می شه کد کلیک Button رو می خواستم

جواد ملاولی
شنبه 19 بهمن 1387, 12:35 عصر
سلام.

Button1.OnClick(Button1);
نمی دونم منظورتون این بود یا نه؟

MY DEAR DELPHI
شنبه 19 بهمن 1387, 17:06 عصر
من این کد رو می خوام که بعد نمایش MessageDialog اگه کاربر Button رو کلیک کرد کدهایی که براش می نویسم رو اجرا کنه.شاید سوالم خیلی ابتدایی باشه ولی فعلا فکرم به جایی نمی رسه...شما ببخشید و جوابم رو بدید

vcldeveloper
شنبه 19 بهمن 1387, 18:00 عصر
اگر خودتون MessageBox را طراحی کردید؛ یعنی یک فرم با چند کنترل که بصورت DialogBox نمایش داده میشه. در اون صورت، با توجه به شرطی که در پست 2 گذاشتید، دکمه شما باید مقدار ModalResult مربوط به فرم نمایش داده شده را مساوی ID_YES بکنه، تا وقتی مقدار ModalResult را چک می کنید، همین مقدار ID_YES برگشت داده بشه.

hojjatcroos
شنبه 19 بهمن 1387, 18:27 عصر
سلام می خواهی وقتی روی دکمه ok کلیک بشه عمل خاصی رو انجام بده حالا توی قسمت Type کد زیر رو بنویسید

Procedure Messageclick(Sender:Tobject);

حالا این Procedure رو تعریف کن

Procedure Tform1.Messageclick(Sender:Tobject);
begin
appilication.terminat;
end;

حالا فرض کن دکمه مسیجی که ساختی کپشنش Yes هست

Tbutton(messagedlg.Findcomponnetn('Yes')).onclick: =MessageClick

با کلیلک برنامه بسته میشه

MY DEAR DELPHI
شنبه 19 بهمن 1387, 21:09 عصر
با تشکر از همه شما. این مشکل من از اینجا ناشی می شه که در یکی از فرمهای برنامم که حدود 200 Edit در اون بکار رفته و چندین کلید با محتوای ثبت و بازیابی و گزارش و .... برای هر کدوم از کلید ها یک Panel جداگانه طراحی کردم که با زدن هر کلیک Panel مربوطه با یک سری مشخصات نمایش داده می شه که این کار با توجه به شلوغی فرم تصویر بدی از فرم رو به وجود می آره.من فکرم به اینجا رسید که همون مشخصات Panel ها رو با MessageDialog به نمایش در بیارم که تا اینجاش نشد.به نظر شما دوستان آیا از کدام روش استفاده کنم
1- Panel
2-MessafeDialog
3- یا از یک فرم جداگانه
که روش سوم رو نمی دونم ولی به نظر خودم روش بهتری هم هستش.اما چند سوال از همین روش
1- فرض کنید کلیدی رو از فرم 1 زدم بعد فرم 2 ShowModal می شه در فرم 2 کاربر اطلاعاتی رو پر می کنه از جمله تاریخ.وقتی در اون رم کلید تایید رو زد فیلدهای مربوط به رکورد اون تاریخ بیاد تو Edit های فرم 1 نمایش داده بشه
2-می خوام برای تمام کلید های مثلا بازیابی یک فرم طراحی کنم.وقتی از هر فرمی که اون فرم بازیابی به نمایش در اومد Panel مربوط به اون فرم به نمایش در بیاد

از اینکه سرتون رو درد آوردم ببخشید

nassim_20
یک شنبه 20 بهمن 1387, 05:17 صبح
شما در قسمت اول که فرم 2 بصورت showmodal نمایش داده میشه این فرم رو خودتون ساختید یا از MessageDialog دلفی استفاده کردید که معمولا دو کلید yes , no داره
اگه خودتون ساختید پس به رویدادهای کلیدتون دسترسی دارید و می تونید روی کلید دابل کلیک کنید و کدش رو بنویسید
اگه حالت دومه می تونید از کد زیر استفاده کنید:
if MessageDlg('Your Message',mtConfirmation,[mbYes,mbNo],0)=mrYes then
و کدهای خود را بنویسید
که در مورد پارامترهای این دستور خود helpe دلفی توضیح داده

راهنمایی در مورد نمایش panelها
من هم یکبار همچین فرمی داشتم که هر بار باید یکی از panel ها رو نشون می دادم
مثلا اگه روی button1کلیک می شد باید panel1 نشون داده می شد تا 10 کلید
من در رویداد هر کلید ابتدا visible
تمام panel ها رو false می کردم و سپس اون panel مربوطه رو true می کردم و برای اینکه فرمم قشتگتر جلوه کنه خصوصیت autosiza مربوط به فرمم رو true می کردم

mafazel
یک شنبه 20 بهمن 1387, 07:35 صبح
سلام دوستان
دوست عزیز MY DEAR DELPHI به نظر من استفاده از Panel و مخفی و ظاهر کردن آن ساده است اما کمی که برنامه پیچیده و تعداد کامپوننتها زیاد شود هنگام طراحی فرم فوق العاده شلوغی خواهید داشت و احتمال خطا بالا می رود.
استفاده از Dialog هم معمولا فقط برای گرفتن انتخاب با دکمه بکار می رود یا حد اکثر گرفتن یک ورودی از کاربر (InputBox ) و اگر دو یا چند ورودی میخواهید بگیرید استفاده از فرمهای دیالوگ استاندارد مناسب نیست.
بنابراین بهترین راه پیشنهاد سوم خودتون یعنی استفاده از فرم های مختلف است. فعلا برنامه تون رو با این روش طراحی و پیاده سازی کنید.( با توجه به اینکه به فرمایش خودتون تجربه خیلی زیادی در دلفی ندارید). بعضی ها هم از Frame استفاده می کنند که فعلا به شما توصیه نمی شود.
در مورد نحوه استفاده از فرم 2 بعد از ShowModal به این ترتیب است که مثلا فرم 2 شما شامل چند Edit و یک دکمه تایید و یک دکمه انصراف است. در حالت ساده شما مشخصه ModalResult دکمه تایید را برابر mrOk و برای دکمه انصراف این مشخصه را روی mrCancel تنظیم می کنید.
بعد کدی شبیه به این می نویسید


if FrmPersonInfo.ShowModal=mrOk then
begin
LbName.Caption := FrmPersonInfo.EdName.Text;
LbFamily.Caption := FrmPersonInfo.EdFamily.Text;
end;

دقت کنید که داخل دکمه تایید یا انصراف چیزی نمی نویسید. در فرم صدا زننده از نتیجه ShowModal که مقدار ModalResult است استفاده می کنید.بعد از بسته شدن فرم و عبور از ShowModal ، با نام فرم و نام Edit به مقادیر آن دسترسی دارید.
نکته دیگر اینکه بهتر است از همین الان نام گذاری اشیاء را مناسب انتخاب کنید. همانطور که در این مثال نام ادیت ها با Ed شروع می شوند.

MY DEAR DELPHI
یک شنبه 20 بهمن 1387, 17:03 عصر
سلام به همه
با راهنمایی های شما عزیزان مشکلم حل شد
با تشکر از همه شما