View Full Version : مقاله: ShowMessage فارسی، راست به چپ، همراه با قابلیت های دیگر
یوسف زالی
دوشنبه 12 خرداد 1393, 22:38 عصر
سلام.
دوستان امروز تابعی رو می گذارم که اکثرمون بنا به نیاز، خودمون ورژن هایی ازش تولید کردیم.
این تابع ShowMessgae یا به طور دقیق تر، DialogeMessage هست.
امکانات تابع به زبان ساده :
------------------------------
قابلیت انتخاب انگلیسی، یا فارسی بودن دکمه ها
قابلیت افزودن دکمه های دلخواه، از جمله دکمه "پرینت" برای پرینت گرفتن ارور
قابلیت کپی با دکمه های Ctrl+C هنگام اجرا روی کلیپ بورد، برای پیست کردن اون در مثلا نوت پد
امکان تنظیم اتوماتیک طول و عرض متن نمایش داده شده بطور دقیق، مخصوصا در نمایش متن های چند خطی (از این امکان می تونید استفاده های دیگه ای هم کنید)
امکان اضافه کردن پخش صدای مرتبط با نوع ارور، یا مسیج یا سوال
امکان تغییر رفتار فرم نمایش داده شده، رنگ اون، فونت اون، دکمه های اون، متن نمایش داده شده و ... بطور کامل
امکان تبدیل تابع به نمایش، ارور، سوال
و ..
کامپوننت مربوطه هم اضافه شد. با این کامپوننت به راحتی می تونید تنظیمات رو انجام بدید. البته من با این مدلی کردنش خیلی موافق نبودم. (محض گل روی حمزه و هادی، ای تنبلا !!)
در کامپوننت متد مربوطه Execute هست.
اما بدون گذاشتن یا ساختن کامپوننت و فقط با ذکر نام کلاس هم می تونید از امکاناتش همچنان استفاده کنید.
لطفا ایرادات و نظراتتون رو بدید.
دوستان دلگرمی بدید یکم بابا!
آدم اصلا ذوق نداره دو تا تابع بذاره.
:بامزه:
با احترام - زالی
SayeyeZohor
دوشنبه 12 خرداد 1393, 23:34 عصر
دوستان دلگرمی بدید یکم بابا!
آدم اصلا ذوق نداره دو تا تابع بذاره.
http://bornanews.ir/Image/News/2012/8/100809_634814016075160961_l.jpg
*جیگرم*
سه شنبه 13 خرداد 1393, 00:29 صبح
دوستان دلگرمی بدید یکم بابا!
سپاسگزار تلاش بی منت شما هم هستیم:قلب:
*جیگرم*
سه شنبه 13 خرداد 1393, 00:33 صبح
یه مطلب بی ربط!، خوب بود یه طرح و پروژه کاربردی تعریف می شد و دوستان ضمن مشارکت در آن از محضر اساتید و یکدیگر هم بهره مند می شدند. و در این بین با نحوه کدنویسی، منطق و تحلیل و... جدید آشنا می شدیم.
Mask
سه شنبه 13 خرداد 1393, 10:37 صبح
حاجی عالی بود.
فقط چنتا نکته :
چرا بیپ پخش نمیشه؟
و چقدر جالبتر میشد ، اینو کامپوننت میکردید، که کاربر فقط با تغییر در ایونت ها و نمایش، سریع به جواب میرسید.
و اینکه اون قضیه Showmodal نبودن هم اگه بهش اضافه میشد، خوب بود.
اما جالب بود و ممنون.
یوسف زالی
سه شنبه 13 خرداد 1393, 12:59 عصر
بیپ تیک داره. اگه زدید و پخش نمی شه، ستینگ ویندوز رو ببینید.
در مورد شو مودال، به جای دستور مربوطه یه if بگذارید حل می شه.
اما در مورد کامپوننت کردن باید توضیحاتی بدم:
این طور نیست که هرچیزی رو کامپوننت کنیم، بعد بهتر شده باشه. کامپوننت در زمان طراحی به درد می خوره، شما در زمان طراحی نباید شی مسیج ای داشته باشی، این شی یک فرمه، می شه بعضی از خصیصه هاش رو لیست کرد اما باز همچنان یک نسخه ازش در برنامه وجود خواهد داشت.
برای فراخوانی یک تابع با این حجم درست نیست سربار شی کامپوننت رو هم تحمیل کرد.
یوسف زالی
سه شنبه 13 خرداد 1393, 16:04 عصر
در سورس ارسال شده می تونید جای RichEdit از لیبل هم استفاده کنید.
hadisalahi2
دوشنبه 09 تیر 1393, 17:05 عصر
یوسف جان دستت طلا کارت حرف نداره خداییش
ولی این سمپلت یک اشکال کوچولو داره
چرا رنگ متن پیام خاکستریه؟
اینطوری اصلا قابل خوندن نیست
یعنی سخته خوندنش
یوسف زالی
دوشنبه 09 تیر 1393, 17:08 عصر
یوسف جان دستت طلا
تشکر دکمه داره هادی جان! :چشمک:
به این دلیله که از Richاستفاده شده. شما لیبلش کنی حل می شه.
کافیه جای TRichEdit از TLabel بگیریش. اگه نتونستی بگو کدش رو سروقت بذارم.
hadisalahi2
دوشنبه 09 تیر 1393, 17:19 عصر
تشکر دکمه داره هادی جان!
:چشمک:
ما یک بابای کارگر ، چه کنیم دیگه ، فکر میکنیم اون دکمه برای خوشگلیه سایته :لبخند:
یوسف جان چند جا ،
TRichEdit داشت که همه رو Tlable کردم
اما نتیجه کار فاجعه انگیز بود
:گیج:
یوسف زالی
دوشنبه 09 تیر 1393, 20:51 عصر
فایل مورد نظر اصلاح شد. از همون لینک اول دان کن.
gbg
دوشنبه 09 تیر 1393, 23:18 عصر
من فقط فایل اجراییش رو اجرا کردم
به نظرم نوشته از آیکون کمی بیشتر فاصله بگیره بهتره
یوسف زالی
سه شنبه 10 تیر 1393, 00:07 صبح
آره به نظر بهتر می شه. ممنون
hadisalahi2
سه شنبه 10 تیر 1393, 10:00 صبح
یوسف جان تو که این همه زحمت کشیدی
اگه همین رو یک کامپوننت کنی بزاری خیلی راحت تر میشه باهاش کار کرد:لبخند:
یوسف زالی
سه شنبه 10 تیر 1393, 10:27 صبح
حمزه هم همین رو گفت.
از نظر من کامپوننت کردنش اشتباهه، اما اوکی سر فرصت این کار رو می کنم.
یوسف زالی
سه شنبه 10 تیر 1393, 16:21 عصر
کامپوننت مرتبط اضافه شد.
hadisalahi2
سه شنبه 10 تیر 1393, 17:15 عصر
پسر تو طلایی به مولا
ما XE2 نصب کردم ، ایول نصب شد در حد تیم ملی
اما جیگرم ، فک کنم توی پروپرتی ها ، Title رو فراموش کردی بزاری :بامزه:
مرده این سه تابعتم :لبخند:
U30MsgDlg1.ErrorMessage('خطا');
U30MsgDlg1.QuestionMessage('سوال');
U30MsgDlg1.AnnounceMessage('توجه');
فقط تابع اخطار یا همون Warning کم داره .
BORHAN TEC
سه شنبه 10 تیر 1393, 19:10 عصر
با سلام،
کار خوبی کردی ولی یه مشکلی داره و اون هم اینه که توی سیستمی که زبان پیش فرض فارسی نیست کاراکترها به صورت علامت سوال و کاراکتر های عجیب و غریب نشون داده میشه. :ناراحت: پیشنهاد می کنم برای ساخت کامپوننتهایی که فارسی هستند از سیستمی استفاده کنید که زبان پیش فرض اون انگلیسی باشه و تنظیمات اصلاً روی فارسی ست نشده باشه! یادمه این مشکل توی Solar Calendar هم وجود داشت. اگه این مشکل رو هم حل کنی خیلی عالی میشه. :چشمک:
موفق باشید...
hadisalahi2
سه شنبه 10 تیر 1393, 19:34 عصر
خوب شاهین جان وقتی فارسی نصب نباشه ، چطوری پیام ها رو فارسی نمایش بده ؟ :متفکر:
اصولا این کامپوننت برای زبان فارسیه
پس نصب بودن زبان دیگه کاریه اجتناب ناپذیر
BORHAN TEC
سه شنبه 10 تیر 1393, 20:00 عصر
خوب شاهین جان وقتی فارسی نصب نباشه ، چطوری پیام ها رو فارسی نمایش بده ؟
اگه از نسخه های یونیکدی دلفی استفاده کنی (یعنی دلفی 2009 و نسخه های جدیدتر) حتی بدون نصب بودن زبان فارسی کلمات فارسی باید به درستی نمایش داده بشه. اینجا هم شرایط گوناگونی وجود داره که این رو توضیح میدم:
1- در مورد ویندوز XP اگر زبان فارسی روی اون نصب باشه کاراکترها و کلمات به درستی نمایش داده میشه ولی اگه نصب نباشه کلمات درست نمایش داده نمیشه و از آخر به اول نمایش داده میشوند ، به صورتی که کاراکترها جدا از هم نمایش داده میشه.
2- در ویندوزهای بعد از XP (مثل ویندوز 7 و ...) حتی با نصب نبودن زبان فارسی، به شرطی که از نسخه های دلفی سازگار با یونیکد استفاده کنیم کلمات به درستی نمایش داده خواهد شد.
3- حتی در ویندوز XP هم در صورت نصب نبودن زبان فارسی می توان کلمات را به درستی نمایش داد، به عنوان مثال کامپوننت های tms این مشکل رو ندارند و این موضوع در مورد XP به ساختار RTL مربوط به دلفی بر می گردد.
4- برنامه های دات نتی هم این مشکل رو دارند ولی برنامه هایی که با Qt ساخته می شوند تحت هیچ بدترین شرایط این مشکل را ندارند. :لبخندساده:
5- نکته دیگری که هست این است که در به روز ترین نسخه های XP این مشکل وجود ندارد و طبیعی است که در ویندوزهای بعد از XP هم کلاً چنین مشکلی نیست. :لبخند:
6- در کدی که یوسف نوشته مشکل اینه که متون فارسی به صورت Ansi توی یونیتهای کد قرار گرفته و نه به صورت Unicode.
7- در تمامی نسخه های ویندوز XP فقط با فعال کردن گزینه Install files for complex ... متون زبان فارسی برنامه هایی که با دلفی 2009 و نسخه های جدیدتر دلفی ساخته شده اند به درستی به نمایش در می آید و حتی به نصب زبان فارسی هم نیازی نیست.(شکل ضمیمه شده)
باز هم اگه نکته دیگه ای به ذهنم برسه توی همین پست اضافه می کنم .....
پس نصب بودن زبان دیگه کاریه اجتناب ناپذیر
با توجه با توضیحاتی که دادم اینگونه نیست :)
یوسف زالی
سه شنبه 10 تیر 1393, 22:21 عصر
حق با شاهینه و این ایراد وارده.
وقت کنم یه اصلاحیه تو برنامه های قدیمیم می دم، با اون اوکی می شه.
سر فرصت اصلاحش می کنم.
BORHAN TEC
دوشنبه 27 مرداد 1393, 09:56 صبح
با سلام،
امروز داشتم با پکیج i18n کار می کردم، دیدم که یک کامپوننت خیلی خوب برای Dialog داره، گفتم خیلی خوب میشه که این کامپوننت رو به دوستان هم معرفی کنم. این پکیج توسط آقای کامبیز خجسته ساخته شده و از آدرس زیر قابل دسترس است:
http://www.delphiarea.com/products/delphi-packages/i18n/
به عنوان مثال اگر کامپوننت TMessageDialog را روی فرم قرار دهید و سپس از کد زیر استفاده کنید نتیجه ای شبیه به عکس ضمیمه شده را خواهید دید:
const FKeyEr = 'با عرض پوزش، شما نمی توانید این رکورد را حذف کنید چرا که رکورد دیگری به آن وابسته است.';
procedure TForm2.Button1Click(Sender: TObject);
begin
MessageDialog1.Captions.Error := 'خطا';
MessageDialog1.CheckBox.Visible := True;
MessageDialog1.ButtonCaptions.OK := 'تأیید';
MessageDialog1.CheckBox.Caption := 'دیگر این پیام را نمایش نده';
MessageDialog1.BiDiMode := bdRightToLeft;
MessageDialog1.ShowError(FKeyEr);
end;
موفق باشید...
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.