VCL kontrole nisu UNICODE, pa ćeš morati da se igraš sa kodnim stranama i
vidiš da li će to pomoći. (Postoje i komercijalne VCL UNICODE komponente za
BCB, ali to je već druga tema)
Prvo: INSTALIRANA TASTATURA nije isto što i INSTALIRANA KODNA STRANA ZA KONVERZIJU.
Probaj ovako (za XP):
OTVORI APLET: Control Panel / Regional and Language Options
a) KARTICA: Languages
TASTER: Details...
TASTER: Add...
PADAJUĆA LISTA: Dodaj tvoju matičnu latiničnu tastaturu, ako već nije bila u spisku, dakle:
"Serbian (Latin)" ili
"Slovenian" ili
"Croatian" ili
"Bosnian (Latin, Bosnia and Herzegovina)" ili
"Serbian (Latin, Bosnia and Herzegovina)" ili
"Croatian (Bosnia and Herzegovina)".
b) KARTICA: Advanced (OVO JE NAJVAŽNIJE !!!)
PADAJUĆA LISTA: Izaberi tvoju matičnu kodnu stranu, dakle:
"Serbian (Latin)" ili
"Slovenian" ili
"Croatian" ili
"Bosnian (Latin, Bosnia and Herzegovina)" ili
"Serbian (Latin, Bosnia and Herzegovina)" ili
"Croatian (Bosnia and Herzegovina)".
TASTER: OK (da prihvatiš izmene)
TASTER: OK (da učitataš kodnu stranu direktno sa HD-a)
TASTER: OK (da restartuješ Windows).
Programski:
• koja je (grupna) kodna strana aktivna na računaru možeš proveriti sa:
GetACP(),
i eventualno obavestiti korisnika da treba da je promeni (tebi treba 1250);
Code:
bool __fastcall TForm1::IsCodePage1250()
{
if ( ::GetACP() == 1250 )
return ( true );
return ( false );
}
• koja je tastatura aktivna na računaru možeš proveriti sa
GetKeyboardLayoutName().
Code:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char KLID[KL_NAMELENGTH+1] = {0};
GetKeyboardLayoutName( KLID );
ShowMessage( KLID );
}
Konstante možeš da pogledaš ovde:
http://msdn.microsoft.com/libr...ibrary/en-us/intl/nls_238z.asp
• da na računaru postaviš drugu tastaturu (koju uparuješ sa kodnom stranom),
možeš sa
LoadKeyboardLayout().
Code:
// ako je kodna strana 1250, onda postavi SVOJU tastarturu (srpsku, hrvatsku, bosansku,
//... tj. onu koju imaš u tray-u, sve odgovaraju), a ako nije, postavi EN
AnsiString CP;
if ( IsCodePage1250() )
CP = "0000" + GetSysLanguage();
else
CP = "00000409";
LoadKeyboardLayout( CP.c_str(), KLF_ACTIVATE );
... sad ti treba (zbog gornjeg koda) kako da saznas TVOJU matičnu kodnu stranu:
• instalirana TAČNA kodna strana:
Code:
AnsiString GetSysLanguage()
{
char buffer[5] = {0};
::GetLocaleInfo( LOCALE_SYSTEM_DEFAULT, LOCALE_IDEFAULTLANGUAGE , buffer, 5 );
return AnsiString( buffer );
}