![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как пункты меню и captions писать unicod-ом ? [D6, Win95/98, Win2k]
Dimedrol © (2004-11-05 12:29:00)Собственно, коллеги, - сабж!
Можно ли пункты меню (TMenu) и надписи на кнопочках,
сообщения в MessageBox-ах писать уникодом, чтобы при разных
региональных установках я смог бы отображать специфические
для неких языков символы ?
VMcL (2004-11-17 07:51:00) [1]>> Piter © (17.11.04 00:36) [16]
См. [14].
Defunct (2004-11-17 00:47:00) [2]Dimedrol © (05.11.04 12:29)
Или вы делаете поддержку корейского и китайского языков?
Defunct (2004-11-17 00:42:00) [3]>ну не будешь же каждого клиента заставлять качать это?
Пишите в системных требованиях для вашей программы: CP 1251, 866
и нафих не нужен юникод. ;>
Piter (2004-11-17 00:36:00) [4]VMcL © (16.11.04 21:33) [12]
Не знаю, 276128 байт - это много или мало?
Это мало. Неужели вся поддержка в 300 Kb умещается? Невероятно... там же столько функций...
wnew © (16.11.04 22:27) [13]
Я порыскал по и-нету и выяснил, что WinNT тоже справляется с Unicode
А WinME поддерживает?
wnew (2004-11-16 23:02:00) [5]http://www.unicode.org/
http://fundementals.sourceforge.net/unicode.html
wnew (2004-11-16 22:47:00) [6]VMcL © (16.11.04 10:50) [10]
> Тайные источники сообщают, что можно скачать с сайта
> MS и установить Microsoft Layer for Unicode.
Тайные источники раскололись без пыток:)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanchor/html/anch_mslu.asp
wnew (2004-11-16 22:27:00) [7]Piter © (16.11.04 11:42) [11]
> Только код использует UNICODE в windows 2000 и выше
Всё-таки NT тоже. Я порыскал по и-нету и выяснил, что WinNT тоже справляется с Unicode.
VMcL (2004-11-16 21:33:00) [8]>> Piter © (16.11.04 11:42) [11]
> ну не будешь же каждого клиента заставлять качать это?
Включи в дистрибутив своего софта (если это позволяется лицензией MS).
> А она не бось немало весит и вместе с программой тоже ее распространять не очень...
Не знаю, 276128 байт - это много или мало?
Piter (2004-11-16 11:42:00) [9]Суслик © (16.11.04 10:44) [9]
Если не ошибаюсь, то русский язык все-таки уставновлен в системе должен быть. Или нет?
ну должен быть, конечно. Только код использует UNICODE в windows 2000 и выше, а в этих системах русский по умолчанию включен во все локализации. Иначе толку от этого Unicode никакого бы не было...
VMcL © (16.11.04 10:50) [10]
Тайные источники сообщают, что можно скачать с сайта MS и установить Microsoft Layer for Unicode.
ну не будешь же каждого клиента заставлять качать это? А она не бось немало весит и вместе с программой тоже ее распространять не очень...
VMcL (2004-11-16 10:50:00) [10]>> wnew © (15.11.04 22:45) [8]
> жаль только, что не поддерживается UNICODE в Win9x/WinMe
Тайные источники сообщают, что можно скачать с сайта MS и установить Microsoft Layer for Unicode.
Суслик (2004-11-16 10:44:00) [11]
> [4] Piter © (15.11.04 19:51)
> Эти две функции описаны у меня в модуле Utils. Пользуюсь,
> конечно, MessageBoxMy - корректно выдает РУССКИЕ буквы на
> unicode системах с любой локалью
Если не ошибаюсь, то русский язык все-таки уставновлен в системе должен быть. Или нет?
wnew (2004-11-15 22:45:00) [12]Кстати, Piter, по моему зря не доверяешь этим компонентам - я их потестировал и мне они очень понравились :), жаль только, что не поддерживается UNICODE в Win9x/WinMe. Но в крайнем случае для этих систем можно пользоваться раздельными кодовыми таблицами, что по крайней мере с TMemo, TLabel, TRichEdit и возможно и с некоторыми другими получается нормально.
wnew (2004-11-15 22:36:00) [13]Piter © (15.11.04 22:25) [6]
Наверное да, так в описании. http://tnt.ccci.org/delphi_unicode_controls/
Microsoft Windows NT/2000/XP, Office 2000/XP, and probably every future product that will come from Microsoft natively support Unicode. Unicode < http://www.unicode.org/>is a character encoding system that provides a unique number for every character regardless of the language. It allows an application to easily handle multiple languages simultaneously. Unfortunately, Windows 95/98/ME don't support Unicode, but rather they support a character encoding system called ANSI. The ANSI character encoding system does not provide a unique number for every character, but instead it uses a system of "code pages". Each character set (ie. Latin, Russian, Chinese, etc.) has its own code page, and Windows has a single code page for non-Unicode programs to use. Windows 95/98/ME have a single fixed code page. The active code page in Windows NT/2000/XP can be changed, but this requires a rebooting of the operating system.
Piter (2004-11-15 22:25:00) [14]wnew © (15.11.04 20:24) [5]
только для Windows NT/2000/XP
а что, в NT 4.0 есть Unicode?
wnew (2004-11-15 20:24:00) [15]Здесь компоненты, которые не подменяют собой стандартные, но имеют ту же функциональность плюс поддержка UNICODE, правда только для Windows NT/2000/XP http://tnt.ccci.org/delphi_unicode_controls/
Piter (2004-11-15 19:51:00) [16]Dimedrol © (05.11.04 12:29)
Можно ли пункты меню (TMenu) и надписи на кнопочках
я для этого переделывал VCL
сообщения в MessageBox-ах писать уникодом
конечно, ведь есть функция MessageBoxW, описанная в модуле Windows.
Вот, кстати, моя реализация:
function MessageBoxExMy(hWnd: HWND; lpText, lpCaption: PChar;
uType: UINT; wLanguageId: Word): Integer;
var
SizeText, SizeCaption: integer;
wideText, wideCaption: PWideChar;
begin
if (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion>=5) then
begin
SizeText := MultiByteToWideChar(3, 0, lpText, -1, nil, 0);
SizeCaption := MultiByteToWideChar(3, 0, lpCaption, -1, nil, 0);
GetMem(wideText, SizeText*SizeOf(WideChar));
GetMem(wideCaption, SizeCaption*SizeOf(WideChar));
try
MultiByteToWideChar(3, 0, lpText, -1, wideText, SizeText);
MultiByteToWideChar(3, 0, lpCaption, -1, wideCaption, SizeCaption);
Result := MessageBoxExW(hWnd, wideText, wideCaption, uType, wLanguageId);
finally
FreeMem(wideText);
FreeMem(wideCaption);
end;
end
else
Result := MessageBoxEx(hWnd, lpText, lpCaption, uType, wLanguageId);
end;
...
function MessageBoxMy(hWnd: HWND; lpText, lpCaption: PChar;
uType: UINT): Integer;
begin
Result := MessageBoxExMy(hWnd, lpText, lpCaption, uType, GetUserDefaultLangID);
end;
Эти две функции описаны у меня в модуле Utils. Пользуюсь, конечно, MessageBoxMy - корректно выдает РУССКИЕ буквы на unicode системах с любой локалью
KilkennyCat (2004-11-15 19:12:00) [17]
> VMcL © (15.11.04 18:35) [2]
стандартные. Компания Tmssoftware выпускает и с поддержкой юникода.
VMcL (2004-11-15 18:35:00) [18]>> Dimedrol © (05.11.04 12:29)
Нет. Визуальные компоненты VCL не поддерживают Unicode.
a123 (2004-11-15 18:18:00) [19]У меня тоже такая же проблема, но похоже это возможно только в CLX приложениях ??