PDA

نسخه کامل مشاهده نسخه کامل : کمکککک--نحوه نوشتن فارسی در برنامه های win32



rf.ariyapoor
13-04-2008, 01:46
دوستان یه خواهشی داشتم
میشه یکی به من توضیح بده که اگه بخوام تو برنامه های console application فارسی بنویسم باید چه کار کنم
تو خود کد که میذارم بعد که اجرا می کنم یه سری کاراکتر میاره
یه توضیحی بدید که باید چی کار کنم
ممنون:3::33:

rf.ariyapoor
13-04-2008, 23:46
آقا هیچکس نیست اینجا جواب مارو بده:18::18:
:9:

someone
14-04-2008, 18:57
سلام.
دو API برای این کار وجود داره که باید از اونها استفاده کنین.

SetConsoleCP
SetConsoleOutputCP

که برای تغییر CodePage برنامه تون به کار میره.
مثلا از CodePage = 1256 استفاده کنین. (Arabic)

rf.ariyapoor
15-04-2008, 12:16
دوست عزیز میشه یه کم بیشتر توضیح بدی چون من اصلا با Api ها کار نکردم
اگه میشه یه بر نامه ساده که یه جمله فارسی رو چاپ کنه برام مثال میزنی
ممنون

cpplover
15-04-2008, 23:42
خوب دوست من همونطوری که گفته شد شما باید از این توابع استفاده کنید که از توابع SDK هستند.
تابع اول رو با بررسی که در msdn انجام دادم برای شما توضیح میدم :
درحقیقت صفحه کد ورودی بکار رفته با کنسول را با فراخوانی پروسه ست میکند. SetConsoleCPتابع
یک برنامه کنسول بکار میبرد صفحه کد ورودی اش را تا ورودی کیبرد را به مقدار کاراکتر مطابق ترجمه کند.
تابع یک آرگومان داره و به این صورت به کار میره :



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اما wCodePageID در حقیقت شناسه ای از کدی است که باید ست شود .
هدر های مورد نیاز شما Wincon.hو Windows.h. هستند.
اگر تابع با موفقیت انجام شود مقداری غیر صفر بر میگرداند.
واقعیتش اینه که من زیاد کنسول کار نکردم و اینا رو هم از msdn ترجمه کردم امیدوارم مفید واقع بشه.

rf.ariyapoor
16-04-2008, 09:22
مرسی
مثلا واسه کد زیر

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدمن باید چه تغییراتی بدم تا خروجی برنامم درست باشه
cpplover من وقتی windows.h و wincon.h رو include میکنم و تو main از تابع SetConsoleCP() استفاده میکنم موقع کامپایل حدود 82 تا error میده که وقتی error ها رو میبینم میره تو خود کد های header فایل های windows.h و wincon.h ارور میگیره
البته ورودی setconsoleCP() رو هم 1256 مذارم که someone تو چند پست قبل گفته بود که کد پیج arabic هست
ممنون میشم بازم راهنماییم کنید

cpplover
16-04-2008, 10:01
دو نکته رو بگم

اگه از ویژوال 2005 استفاده کنی و پروژه کنسول درست کنی هدر هایی رو که گفتم رو میشناسه چون در ویژوال 6 بعضی از هدر ها قدیمی هستند.

به این آدرس رجیستری برو :

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Nls\CodePage

احتمالا مقادیری که در این تابع باید قرار بدی اعدادی هستند که مقدار این زیر کلیدها رو تعیین میکنه . . .
چند تا رو تست کن.

rf.ariyapoor
16-04-2008, 20:59
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدمن برنامه رو تو محیط visual stadio 2005 اجرا می کنم
به مسیری که گفتی هم رفتم و یه سری از اون ها رو واسه setconsolecp() فرستادم اما بازم موقع کامپایل 82 خطا میگیره که وقتی خطا ها رو بررسی میکنم میره تو هدر فایل wincon و از اونجا مشکل میگیره
بازم ممنون میشم راهنماییم کنید

cd3
17-04-2008, 08:40
سلام. به نظر من فايل wincon.h وجود نداره .

cpplover
17-04-2008, 11:01
به نظر من فايل wincon.h وجود نداره

من که این هدر رو در برنامه میارم مشکلی ایجاد نمیشه و 82 error هم نداره اما در ویژوال 6 دقیقا 82 error بوجود می اومد.
در هر حال در وبلاگ [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) مطلبی تحت عنوان طراحی برنامه های فارسی در ++C وجود داره به این آدرس حتما رجوع کنید .امیدوارم نتیجه بگیرید.
موفق باشید.

someone
20-04-2008, 18:43
دوباره سلام.

متاسفانه کمتر وقت میکنم به Forum برسم.
اول از راهنمایی های دوستم خوبم که واقعا عالی بود cpplover تشکر میکنم.

در برنامه های نوشته شده باید چند نکته رو رعایت کنین :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


در کد بالا ، دو اشتباه بزرگ وجود داره.
1- باید به برنامه Windows.h اضافه بشه نه WinCon.h
Wincon خودش در Windows.h وجود داره و قبل از صدا زدن اون باید به این نکته دقت کنین
که باید پیش نیاز هاش رو صدا بزنین. بنابراین صرفا استفاده از Wincon.h در برنامه خطا ایجاد میکنه.


2- SetConsoleCP در کد بالا به صورت محلی دوباره تعریف شده. SetConsoleCP یک API هست.
و باید مستقیما شما اون رو صدا بزنین. نه اینکه prototype اون رو دوباره بنویسین.


ضمنا باید از SetConsoleOutupCP هم استفاده بشه.
علاوه بر اینها ، شما باید font مربوط به Command promp رو هم عوض کنین که اینکار رو با تغییر
در رجیستری باید انجام بدین.

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

rf.ariyapoor
22-04-2008, 12:46
someone جان دستت درد نکنه ممنون