[BCB2007] Znaki UNICODE na bmp

0

[MS Wnd XP]
Witam,

mam Memo. Wklejam do niego jakiś tekst po rosyjsku. Chcę go następnie przekleić na BMP.

Problem: pokazują się - ??????

Z tego co się orientuję CG 2007 nie obsługuje UNICODE'a, a CG 2009 już tak. Ale czy koniecznie muszę się przesiąść na nowy?
Próbowałem używać na początku programu:

SetThreadLocale( MAKELCID( MAKELANGID(LANG_RUSSIAN, SUBLANG_DEFAULT), SORT_DEFAULT ) )

Nie zwraca błędu.
Ustawiałem fonty w dialogu i bmp->Canvas->Font na "MS Shell Dlg".

Czy jest jakiś sposób, żeby zmienić sobie język / przełączyć stronę kodową i pisząc normalnie na klawiaturze wpisywać np. rosyjskie znaki do Memo a funkcjami typu DrawText poprawnie rysować teksty?

0

Posługuj się WINAPI, funkcjami z sufiksem W - TextOutW, DrawTextW itd. HDC gdzieś tam w obiekcie siedzi.

0

Próbowałem DrawTextW i nie działa.

Robię tak:

wchar_t wNazwa [100];
ZeroMemory(wNazwa, 200);
MultiByteToWideChar(CP_ACP, MB_COMPOSITE, "БВГДЖЗИЙКЛМПЯЮ", -1, wNazwa, 99);
RECT r = {0, 0, 200, 200};
::DrawTextW(bmp->Canvas->Handle, wNazwa, 10, &r, DT_CENTER);

Próbowałem z tekstem na sztywno lub wyciągany z Memo podczas działania programu i dalej to samo.

0
L"БВГДЖЗИЙКЛМПЯЮ"
0

0x666
Działa, dzięki, ale dla sztywno wpisanego tekstu.
Co oznacza L? Locale??

No i pozostaje najważniejsze pytanie jak zmienić język podczas działania programu, aby wpisywać normalnie rosyjskie znaki.

Próbuję zmienić stronę kodową:

if(!setlocale(LC_ALL, "russian")){
	ShowMessage("Nyny");
}
if(_setmbcp(_MB_CP_LOCALE)){
       	ShowMessage("Nyny 2");
}

Wykonują się bez błędu, ale i tak jak wpisuje to znaki są polskie.


Heh, najlepsze znalazłem to w helpie CG:

#include <locale.h>
#include <stdio.h>
int main(void)
{
   char *old_locale;
   /* The only locale supported in CodeGear C++ is "C" */ // !!!!!!!!!!!!!!!!
   old_locale = setlocale(LC_ALL,"C");
   printf("Old locale was %s\n",old_locale);
   return 0;
}
0

L

0

No i pozostaje najważniejsze pytanie jak zmienić język podczas działania programu, aby wpisywać normalnie rosyjskie znaki.

Pisać wszystko w unikodzie, po to on jest.

Próbuję zmienić stronę kodową:

Tylko nie wziąłeś jednej rzeczy pod uwagę. setlocale to funkcja, która nijak ma się do trybu pracy API windowsa, które domyślnie pracuje w kodowaniu takim, jak system - polska wersja CP1250. Po więcej informacji odsyłam tu ---> National Language Support.

0

NLS czytałem. Ale nie doczytałem. Chciałem za szybko to zrobić :). Niepotrzebnie używałem SetThreadLocale.
Teraz trochę doczytałem i jest cudna funkcja LoadKeyboardLayout i już sobie wpisuję po rosyjsku.
Teraz znowu muszę się pomęczyć z wklejaniem do bmp. Bo wkleja ??????

1 użytkowników online, w tym zalogowanych: 0, gości: 1