Главная страница
    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.006 c
2-1254066924
Джони
2009-09-27 19:55
2009.11.08
Поиск cлова в брaузере


15-1252688079
test
2009-09-11 20:54
2009.11.08
День граненого стакана


15-1252854430
turbouser
2009-09-13 19:07
2009.11.08
С праздником всех!


1-1222711075
jiny
2008-09-29 21:57
2009.11.08
AdvStringGrid и Unicode данные (widecells)


2-1253899875
tassa
2009-09-25 21:31
2009.11.08
Построение графика





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский