![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как исправить компонент TCoolTrayIcon для выведения юникодов? [D7, WinXP]
Dr.Andrew © (2008-08-19 19:19:00)Доброго дня!
Есть прекрасный компонент 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:00) [21]Добрый день!
Мастера, подскажите что необходимо исправить, чтобы корректно выводить в этом компоненте юникодные символы?
Спасибо.