Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как пункты меню и 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 приложениях ??


Наверх

Титульная страница Поиск, карта сайта Написать письмо