Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.28;
Скачать: CL | DM;

Вниз

Как пункты меню и captions писать unicod-ом ?   Найти похожие ветки 

 
Dimedrol ©   (2004-11-05 12:29) [0]

Собственно, коллеги, - сабж!
Можно ли пункты меню (TMenu) и надписи на кнопочках,
сообщения в MessageBox-ах писать уникодом, чтобы при разных
региональных установках я смог бы отображать специфические
для неких языков символы ?


 
a123   (2004-11-15 18:18) [1]

У меня тоже такая же проблема, но похоже это возможно только в CLX приложениях ??


 
VMcL ©   (2004-11-15 18:35) [2]

>>Dimedrol ©  (05.11.04 12:29)

Нет. Визуальные компоненты VCL не поддерживают Unicode.


 
KilkennyCat ©   (2004-11-15 19:12) [3]


> VMcL ©   (15.11.04 18:35) [2]


стандартные. Компания Tmssoftware выпускает и с поддержкой юникода.


 
Piter ©   (2004-11-15 19:51) [4]

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 системах с любой локалью


 
wnew ©   (2004-11-15 20:24) [5]

Здесь компоненты, которые не подменяют собой стандартные, но имеют ту же функциональность плюс поддержка UNICODE, правда только для Windows NT/2000/XP http://tnt.ccci.org/delphi_unicode_controls/


 
Piter ©   (2004-11-15 22:25) [6]

wnew ©   (15.11.04 20:24) [5]
только для Windows NT/2000/XP


а что, в NT 4.0 есть Unicode?


 
wnew ©   (2004-11-15 22:36) [7]

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.


 
wnew ©   (2004-11-15 22:45) [8]

Кстати, Piter, по моему зря не доверяешь этим компонентам - я их потестировал и мне они очень понравились :), жаль только, что не поддерживается UNICODE в Win9x/WinMe. Но в крайнем случае для этих систем можно пользоваться раздельными кодовыми таблицами, что по крайней мере с TMemo, TLabel, TRichEdit и возможно и с некоторыми другими получается нормально.


 
Суслик ©   (2004-11-16 10:44) [9]


> [4] Piter ©   (15.11.04 19:51)


> Эти две функции описаны у меня в модуле Utils. Пользуюсь,
> конечно, MessageBoxMy - корректно выдает РУССКИЕ буквы на
> unicode системах с любой локалью

Если не ошибаюсь, то русский язык все-таки уставновлен в системе должен быть. Или нет?


 
VMcL ©   (2004-11-16 10:50) [10]

>>wnew ©  (15.11.04 22:45) [8]

>жаль только, что не поддерживается UNICODE в Win9x/WinMe

Тайные источники сообщают, что можно скачать с сайта MS и установить Microsoft Layer for Unicode.


 
Piter ©   (2004-11-16 11:42) [11]

Суслик ©   (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 21:33) [12]

>>Piter ©  (16.11.04 11:42) [11]

>ну не будешь же каждого клиента заставлять качать это?

Включи в дистрибутив своего софта (если это позволяется лицензией MS).

>А она не бось немало весит и вместе с программой тоже ее распространять не очень...

Не знаю, 276128 байт - это много или мало?


 
wnew ©   (2004-11-16 22:27) [13]

Piter ©   (16.11.04 11:42) [11]

> Только код использует UNICODE в windows 2000 и выше

Всё-таки NT тоже. Я порыскал по и-нету и выяснил, что WinNT тоже справляется с Unicode.


 
wnew ©   (2004-11-16 22:47) [14]

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 23:02) [15]

http://www.unicode.org/

http://fundementals.sourceforge.net/unicode.html


 
Piter ©   (2004-11-17 00:36) [16]

VMcL ©   (16.11.04 21:33) [12]
Не знаю, 276128 байт - это много или мало?


Это мало. Неужели вся поддержка в 300 Kb умещается? Невероятно... там же столько функций...

wnew ©   (16.11.04 22:27) [13]
Я порыскал по и-нету и выяснил, что WinNT тоже справляется с Unicode


А WinME поддерживает?


 
Defunct ©   (2004-11-17 00:42) [17]

>ну не будешь же каждого клиента заставлять качать это?

Пишите в системных требованиях для вашей программы: CP 1251, 866
и нафих не нужен юникод. ;>


 
Defunct ©   (2004-11-17 00:47) [18]

Dimedrol ©   (05.11.04 12:29)  

Или вы делаете поддержку корейского и китайского языков?


 
VMcL ©   (2004-11-17 07:51) [19]

>>Piter ©  (17.11.04 00:36) [16]

См. [14].



Страницы: 1 вся ветка

Текущий архив: 2004.11.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.047 c
8-1093499666
widoms
2004-08-26 09:54
2004.11.28
Хранение изображений.


8-1094074341
zero-g
2004-09-02 01:32
2004.11.28
Строка состояния в видео проигрывателе


3-1099061248
Kergma
2004-10-29 18:47
2004.11.28
внешний ключ хочю.................


14-1100244430
GreySerg
2004-11-12 10:27
2004.11.28
Как установить компоненты на другом пользователе ?


3-1098963968
malamba
2004-10-28 15:46
2004.11.28
запрос с параметрами в Access через Delphi