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

Вниз

Как исправить компонент TCoolTrayIcon для выведения юникодов?   Найти похожие ветки 

 
Dr.Andrew   (2008-08-19 19:19) [0]

Доброго дня!
Есть прекрасный компонент TCoolTrayIcon.
Исходник можно видеть здесь:
http://files.codes-sources.com/fichier.aspx?id=47399&f=CoolTrayIcon%2fCoolTrayIcon.pas

И есть в нем функция нужная мне - function TCoolTrayIcon.ShowBalloonHintUnicode, но беда в том что она не выводит правильно юникодные символы.

Я попробывал несколько изменить код функции TCoolTrayIcon.ShowBalloonHintUnicode так:

function TCoolTrayIcon.ShowBalloonHintUnicode(Title, Text: WideString;
IconType: TBalloonHintIcon; TimeoutSecs: TBalloonHintTimeOut): Boolean;
// Show balloon hint. Return false if error.
const
aBalloonIconTypes: array[TBalloonHintIcon] of Byte =
(NIIF_NONE, NIIF_INFO, NIIF_WARNING, NIIF_ERROR, NIIF_USER);
var
i: Integer;
s: String;
begin
// Remove old balloon hint
HideBalloonHint;
// Display new balloon hint
with IconData do
begin
uFlags := uFlags or NIF_INFO;

FillChar(szInfo, 0, SizeOf(szInfo)); // чтобы был 0 в конце
// следовательно max длинна строки = SizeOf(szInfo) - 1
i := SizeOf(szInfo) - 1;
s := WideCharToString(PWideChar(Text));
if (i > Length(s)) then i := Length(s);
Move({source}PCHAR(s)^, {dest}szInfo, i);

FillChar(szInfoTitle, 0, SizeOf(szInfoTitle)); // чтобы был 0 в конце
// следовательно max длинна строки = SizeOf(szInfo) - 1
i := SizeOf(szInfoTitle) - 1;
s := WideCharToString(PWideChar(Title));
if (i > Length(s)) then i := Length(s);
Move({source}PCHAR(s)^, {dest}szInfoTitle, i);

TimeoutOrVersion.uTimeout := TimeoutSecs * 1000;
dwInfoFlags := aBalloonIconTypes[IconType];
end;
Result := ModifyIcon;
// Remove NIF_INFO before next call to ModifyIcon (or the balloon hint will redisplay itself)
IconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
end;


или так:

function TCoolTrayIcon.ShowBalloonHintUnicode(Title, Text: WideString;
IconType: TBalloonHintIcon; TimeoutSecs: TBalloonHintTimeOut): Boolean;
// Show balloon hint. Return false if error.
const
aBalloonIconTypes: array[TBalloonHintIcon] of Byte =
(NIIF_NONE, NIIF_INFO, NIIF_WARNING, NIIF_ERROR, NIIF_USER);
var
i: Integer;
s: String;
begin
// Remove old balloon hint
HideBalloonHint;
// Display new balloon hint
with IconData do
begin
uFlags := uFlags or NIF_INFO;

FillChar(szInfo, 0, SizeOf(szInfo)); // чтобы был 0 в конце
// следовательно max длинна строки = SizeOf(szInfo) - 1
i := SizeOf(szInfo) - 1;
s := WideStringToStringEx(Text, 1252);
if (i > Length(s)) then i := Length(s);
Move({source}PCHAR(s)^, {dest}szInfo, i);

FillChar(szInfoTitle, 0, SizeOf(szInfoTitle)); // чтобы был 0 в конце
// следовательно max длинна строки = SizeOf(szInfo) - 1
i := SizeOf(szInfoTitle) - 1;
s := WideStringToStringEx(Title, 1252);
if (i > Length(s)) then i := Length(s);
Move({source}PCHAR(s)^, {dest}szInfoTitle, i);

TimeoutOrVersion.uTimeout := TimeoutSecs * 1000;
dwInfoFlags := aBalloonIconTypes[IconType];
end;
Result := ModifyIcon;
// Remove NIF_INFO before next call to ModifyIcon (or the balloon hint will redisplay itself)
IconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
end;


Мои попытки просто изменить Char на WideChar и прочее в том же духе также не привели к успеху.

Уважаемые Мастера, прошу Вашей помощи - что в этом модуле нужно изменить, чтобы правильно выводить WideChar (юникодные) символы.

Спасибо.


 
Dr.Andrew   (2008-08-20 12:52) [1]

Добрый день!

Мастера, подскажите что необходимо исправить, чтобы корректно выводить в этом компоненте юникодные символы?

Спасибо.


 
brother ©   (2008-08-20 14:16) [2]

преобразуй юникод в win1251 и отображай где хош...


 
Dr.Andrew   (2008-08-20 15:02) [3]

Спасибо, а можно хотя бы небольшой пример?


 
brother ©   (2008-08-20 15:09) [4]

копипастер?


 
Dr.Andrew   (2008-08-20 15:15) [5]

Навыерное, я не понял Вас правильно, а Вы меня. Мне нужно скорректировать конкретный модуль, приведенный выше. У Вас есть идеи по этому поводу. Может я что не так прописал или упустил. Спасибо.


 
brother ©   (2008-08-20 15:18) [6]

ты этот код понимаешь? или из инета взял? то что передаешь через Title, Text: WideString; преобразуй из Unicode в Win1251 кодировку и не парься...


 
Dr.Andrew   (2008-08-20 15:38) [7]

Я понимаю, но не понимаю как можно преобразовать юникодный символ, например, ñ в русскую букву. Будьте так любезны и напишите как Вы себе это представляете. Спасибо.


 
brother ©   (2008-08-20 15:42) [8]

> но не понимаю как можно преобразовать юникодный символ,
> например, n в русскую букву. Будьте так любезны и напишите
> как Вы себе это представляете.

спроси у гугла а?


 
Dr.Andrew   (2008-08-20 16:12) [9]

Спасибо, Может Мастера все же подскажут возможность корректировки приведенного кода. Спасибо.


 
Dr.Andrew   (2008-08-21 10:34) [10]

Доброе утро!
Мастера. помогите найти решение!
Спасибо.


 
DrPass ©   (2008-08-21 10:59) [11]

Насколько я знаю, Shell_NotifyIcon, вокруг которой вертится эта компонента, юникод не поддерживает


 
Dr.Andrew   (2008-08-21 12:51) [12]

Тогда какое решение, может ее можно чем-то заменить? Я полагаю, что такое решение было бы интересно очень многим пользователям этого форума.


 
Anatoly Podgoretsky ©   (2008-08-21 15:06) [13]

Неdthyj


> TNotifyIconDataA = _NOTIFYICONDATAA;
> TNotifyIconDataW = _NOTIFYICONDATAW;


 
Dr.Andrew   (2008-08-21 15:21) [14]

Спасибо за ответ, а можно немного по-подробне, пожалуйста. Как это может быть реально в коде компонента? Спасибо


 
Anatoly Podgoretsky ©   (2008-08-21 16:49) [15]

Вместо TNotifyIconData использовать явно TNotifyIconDataW


 
Anatoly Podgoretsky ©   (2008-08-21 16:51) [16]

Код конечно к черту переписать, код принципиально не сможет работать с Юникод.


 
Anatoly Podgoretsky ©   (2008-08-21 17:05) [17]

Кстати я обратил внимание, что Дельфи 7, а у нее редактор не Юникодовый!


 
Eraser ©   (2008-09-09 00:39) [18]

все стереть к черту, проект перевести на D2009 - там есть и юникод и компонент для запуздыривания иконки не хуже TCoolTrayIcon :-)


 
Германн ©   (2008-09-09 01:14) [19]


> Eraser ©   (09.09.08 00:39) [18]

Некромант?
(с) sniknik


 
GrayFace ©   (2008-09-13 21:46) [20]

Eraser, вот тебе экспонат для опытов: http://delphimaster.net/view/5-1174336615/


 
Плохиш ©   (2008-09-15 12:46) [21]


> s: String;

И хде тута юникода?

Остальные "многа букав" читать не стал, боюсь глазки поломать...



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

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

Наверх




Память: 0.52 MB
Время: 0.014 c
2-1253675081
vturkevich
2009-09-23 07:04
2009.11.08
Надстройки для Парус 7 созданные в дельфи в Дельфи


15-1252557641
test
2009-09-10 08:40
2009.11.08
Обратная совместимость


2-1253601055
d@vinchi
2009-09-22 10:30
2009.11.08
Доступ к переменной главного потока?


1-1223364687
Vlad Oshin
2008-10-07 11:31
2009.11.08
DLL, с пакетами, использую DevExpress, компоненты xxDockxx, AV


15-1252530327
Германн
2009-09-10 01:05
2009.11.08
Куда делось нормальное меню "Администрирование"?