ورود

View Full Version : فارسی کردن پنجره های محاوره‌ای(Dialoge) دلفی 7.



mrahda
پنج شنبه 16 شهریور 1385, 13:59 عصر
روش اول:
سه فایل به ضمیمه خدمتتان ارسال شده است. هر سه را در شاخه پروژه کپی کنید و آنها را جزء فایلهای پروژه اضافه نمایید.(منوی Projectزیر منوی Add to project)
فایل Dialoge.pas همان یونیت Dialoge است که در سورس برنامه هرجا که از فرمانهای محاوره‌ای مثل MessageDlg و یا InputBox استفاده کنید Use می شود. منتهی به دلیل اینکه مشکلاتی در حالت فارسی نویسی در این فرمانها بوجود می‌آورد، بنده حقیر آن را دستکاری کرده‌ام. برای همین باید نسخه دستکاری شده را در شاخه پروژه داشته باشید تا خدای ناکرده دلفی هنگام ساختن پروژه از فایل اصلی استفاده ننماید.

واما ادامه ماجرا؛ در فایل اصلی پروژه (منوی Project زیر منوی View Source) فرمان SetLanguage(1); را بعد از خط Application.Initialize;
اضافه نمایید.
بعد از آن، فرمان زیر را در رخداد OnCreate فرم اصلی(Main Form) بنویسید.
Application.BiDiMode := bdRightToLeft;
این فرمان باعث می شود که کل پروژه در حالت راست به چپ (اصل مورد نیاز برای فارسی نویسی) قرار بگیرد.

تمام.
بدین ترتیب پس از اجرای برنامه و استفاده از دو فرمان محاوره‌ای فوق الذکر، مشاهده خواهید فرمود که اولا عبارات فرنگی Yes No جای خود را به کلمات سلیس بلی و خیر فارسی داده‌اند و ثانیاپنجره ها در حالت راست به چپ بوده و مشکلی در عبارات فارسی نخواهید داشت! البته باید بگویم «همچو من سوخته‌ای سوز دل من داند». برخی دوستان هستند که اصلا به مسائل نمایش عبارات فارسی اهمیتی نمی‌دهند و شاید بگویند: «خوب حالا که جه؟».
بگذریم.

حال چرا راه حل دوم را خدمتتان عرض می کنم؟ دلیل آن اینست که تازمانی که پروژه شما در حالت Build with Run Time package نباشد(یعنی حالت پیش فرض دلفی) مشکلی نخواهید داشت. ولی اگر بخواهید تیک کنار این عبارت در پنجره Project Options برگه‌ی Packages را فعال نموده و از خاصیت آن استفاده نمایید، اوضاع به هم می‌ریزد. چرا؟ چون دیگر جناب دلفی عنایتی به Dialoges دستکاری شده ما نداشته و از فایل vcl.bpl خودش بهره می برد. حقیر بسیار کوشیدم تا بتوانم این فایل bpl کذایی را دوباره بسازم ولی نشد (مراجعه بفرمایید به این پست...). دست آخر مجبور شدم روش دوم را اختراع کنم.

mrahda
پنج شنبه 16 شهریور 1385, 14:02 عصر
روش دوم:
فایل ahDialoges.pas ضمیمه را در شاخه پروژه ذخیره کنید. در کلیه یونیتهای پروژه، هرجا که در صدر یونیت فایل Dialoges استفاده(Use) شده است را بیابید و آنرا به ahDialoges تغییر دهید.
توجه داشته باشید که مانند روش قبل در فرم اصلی پروژه فرمان زیر را در رخداد OnCreate اضافه نمایید.
Application.BiDiMode := bdRightToLeft;
بدین ترتیب دستکاری های ما در فایل exe نهایی ثبت خواهند شد و مشکل پیش آمده برطرف میگردد.

البته یک سوال دارم که بعدا می پرسم.:گیج:

mrahda
پنج شنبه 16 شهریور 1385, 14:06 عصر
این سوال برمی‌گردد به مطالبی که در http://barnamenevis.org/forum/showthread.php?t=52290 (http://barnamenevis.org/forum/showthread.php?t=52290)عرض کرده‌ام.
در مورد عملکرد فرمان SetLanguage یک سوال دارم.اینطور که از ظاهر این procedure برمی‌آید، مقادیر اختصاص داده شده به متغیرهای حافظه‌ای تغییر میکنند. یعنی اگر چه مقدار متغیر SYesButton در جایی از برنامه برابر 'Yes' است توسط این فرمان مقدار آن به 'بله' تغییر می‌یابد. درست است؟
حال این سوال در ذهن بنده بوجود می آید که آیا این امکان دارد که متن یک procedure را هم مانند مقدار یک متغیر حافظه‌ای تغییر دهیم. مثلا در جایی از برنامه (فایل Dialoges یا فایل vcl.bpl) تابع MessageDlg به یک نحوی تعریف شده است. ما میخواهیم عملکرد این تابع را تغییر دهیم. آیا امکان دارد؟ چگونه؟
در صورت مثبت بودن جواب فوق، روش دوم - که البته پر دردسر است- دیگر مردود است و همان روش اول را می‌توان بهینه ساخت.

SoftDevCo
پنج شنبه 16 شهریور 1385, 14:56 عصر
من امتحان کردم ، شما به جز چند تا استرینگ ، تغییر خاص دیگه ای ندادی.

zolgharnayn
جمعه 10 دی 1389, 23:35 عصر
اين پروسيجر را Overload كن

AliReza Vafakhah
شنبه 11 دی 1389, 00:59 صبح
اين پروسيجر را Overload كن

دوست عزیز اگر به تاریخ پست قبل از پست خودتون نگاه کنید ، شما تاپیک رو بعد از 4 سال بالا آوردید!