Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.11.08;
Скачать: [xml.tar.bz2];

Вниз

Как исправить компонент 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.11.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.007 c
2-1253114011
FEV
2009-09-16 19:13
2009.11.08
Почему данная функция выводит не все имена папок???


15-1252485162
brother
2009-09-09 12:32
2009.11.08
Бутовая флешка


15-1252640404
Дмитрий С
2009-09-11 07:40
2009.11.08
Символ неразрывного пробела


15-1252701004
Юрий
2009-09-12 00:30
2009.11.08
С днем рождения ! 12 сентября 2009 суббота


15-1252842870
_Андрей
2009-09-13 15:54
2009.11.08
инет в Viste





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский