PDA

View Full Version : تغییر کدپیج در ویندوز XP



DrDelphi2003
سه شنبه 20 مرداد 1383, 12:34 عصر
با سلام
همانطور که می دونید وقتی توی یک برنامه دلفی فارسی می نویسید و bidimode رو راست به چپ می کنید باید در قسمت Regenal and language Options توی control panel بخش Standards and formats رو روی فارسی تنظیم کنید و هم قسمت code page رو روی فارسی بذارید.
خوب حالا اگه ما یه برنامه نوشتیم و می خواستیم رو هر کامپیوتری جواب بده نیاز داریم که خودمون این تغییرات رو انجام بدیم. من فکر می کنم یه دستور API داشته باشه! یا یه Registery .
اگه کسی می دونه و می تونه اینو به من بگه!!!!!! که کجاست یا چه جوری میشه اینو تنظیم کرد!
الگه میدونید لطفا کمک کنید چون کارم گیره! از خجالتتون در می یام.

مهدی کرامتی
سه شنبه 20 مرداد 1383, 12:40 عصر
راهی غیر از نصب توسط روش فوق نیست، چون ویندوز برای نصب پشتیبانی راست به چپ حدود 400 مگابایت درایور، فونت، و ... نصب میکند و تغییرات زیادی در سیستم میدهد.

Mohammad S
سه شنبه 20 مرداد 1383, 13:06 عصر
اگر نصب شده باشه ولی در سربرگ Advanced ، زبان فارسی انتخاب نشده باشه چی؟ باز هم نمی شه اونو فارسی کرد؟ آیا میشه تشخیص داد که آیا این درایورها و فونت ها نصب شده اند یا نه؟

_alish_
چهارشنبه 21 مرداد 1383, 14:55 عصر
داداش من source دلفی اش را نمی دونم کجاست ولی C++ Biulder آن را برات می فرستم نمی گم 100% کار می کنه چون خودم بیشتر دستی انجام می دم وزیاد تستش نکردم ولی چند بار که در Xp امتحان کردم درست بود تو هم امتحان کن و نتیجه را برای بقیه ذکر کن تا اشتباه نباشه


void TMainFrm::AddFarsiLanguage(void)
{
TRegistry *Reg=new TRegistry();
Reg->RootKey = HKEY_LOCAL_MACHINE;
Reg->OpenKey("\\SYSTEM\\CurrentControlSet\\Control\\keyboard layouts\\00000429",true);
Reg->WriteString("Layout File","KBDFA.DLL");
Reg->WriteString("Layout Text","Farsi");

Reg->OpenKey("\\SYSTEM\\CurrentControlSet\\Control\\Nls\\Locale",true);
Reg->WriteString("00000429","d");

Reg->OpenKey("\\SYSTEM\\CurrentControlSet\\Control\\Nls\\Languag e Groups",true);
Reg->WriteString("d","1");

Reg->OpenKey("\\SYSTEM\\CurrentControlSet\\Control\\Nls\\Languag e",true);
Reg->WriteString("0429","l_intl.nls");
Reg->WriteString("Default","0429");
Reg->CloseKey();
Reg->Free();

/* TMemoryStream *stream = new TMemoryStream();
stream->LoadFromFile(exePath+"dat\\kbdfa.dll");
stream->Position = 0;
stream->SaveToFile(SystemDir);
stream->Position = 0;
stream->Clear();*/
CopyFile((exePath+"dat\\kbdfa.dll").c_str(),(SystemDir).c_str(), TRUE);


/*stream->LoadFromFile(exePath+"dat\\l_intl.nls");
stream->Position = 0;
stream->SaveToFile(SystemDir);
stream->Position = 0;
stream->Clear();*/
CopyFile((exePath+"dat\\l_intl.nls").c_str(),(SystemDir).c_str(), TRUE);


}

DrDelphi2003
چهارشنبه 21 مرداد 1383, 15:14 عصر
با تشکر از همه دوستان
alish فکر کنم دستورات شما کار کنه می رم امتحانش کنم.
ممنون