0 / 0 / 0
Регистрация: 02.06.2015
Сообщений: 6
1

ShowBalloonTip не отображает кириллицу

02.04.2016, 21:23. Показов 2337. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть код:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
procedure ShowBalloonTip(Control: TWinControl; Icon: integer; BackCL, TextCL: TColor; 
Title: String; Text: PWideChar);
const
  TOOLTIPS_CLASS = 'tooltips_class32';
  TTS_ALWAYSTIP = $01;
  TTS_NOPREFIX = $02;
  TTS_BALLOON = $40;
  TTF_SUBCLASS = $0010;
  TTF_TRANSPARENT = $0100;
  TTF_CENTERTIP = $0002;
  TTM_ADDTOOL = $0400 + 50;
  TTM_SETTITLE = (WM_USER + 32);
  ICC_WIN95_CLASSES = $000000FF;
type
  TOOLINFO = packed record
    cbSize: integer;
    uFlags: integer;
    hWnd: THandle;
    uId: integer;
    rect: TRect;
    hinst: THandle;
    lpszText: PWideChar;
    lParam: integer;
  end;
 
var
  hWnd : THandle;
  ti: TOOLINFO;
  hWndTip: THandle;
begin
  if hWndTip <> 0 then  DestroyWindow(hWndTip);
 
  hWnd := Control.Handle;
  hWndTip := CreateWindow(TOOLTIPS_CLASS, nil, WS_POPUP  or TTS_NOPREFIX or TTS_BALLOON or 
  TTS_ALWAYSTIP, 0, 0, 0, 0, hWnd, 0, HInstance, nil);
  if hWndTip <> 0 then begin
    SetWindowPos(hWndTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
    ti.cbSize := SizeOf(ti);
    ti.uFlags :=  TTF_SUBCLASS;
    ti.hWnd := hWnd;
    ti.lpszText := PWideChar((Text));
 
    GetClientRect(hWnd, ti.rect);
    SendMessage(hWndTip,TTM_SETDELAYTIME, TTDT_INITIAL ,100);
    SendMessage(hWndTip,TTM_SETDELAYTIME, TTDT_AUTOPOP ,20000);
    if BackCL <> clDefault then SendMessage(hWndTip, TTM_SETTIPBKCOLOR, BackCL, 0);
    if TextCL <> clDefault then SendMessage(hWndTip, TTM_SETTIPTEXTCOLOR, TextCL, 0);
    SendMessage(hWndTip, TTM_ADDTOOL, 1, integer(@ti));
    SendMessage(hWndTip, TTM_SETTITLE, Icon, integer(PWideChar(Title)));
  end;
end;
 
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  ShowBalloonTip(Button1, 0,  2, clRed, 'Балун', 'пример балуна');
end;
с текстом в кодировке ansi никаких проблем, но вот с кириллицей труба. Никак не получается вывести сообщения.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2016, 21:23
Ответы с готовыми решениями:

Не отображает кириллицу!
#include &lt;iostream&gt; #include &lt;map&gt; #include &lt;string&gt; #include &lt;list&gt; using namespace std; int...

Qt - некорректно отображает кириллицу
Здравствуйте, кто нибудь сталкивался с такой проблемой? Искал по этому поводу темы ,не нашел

WebClient совсем не отображает кириллицу
Здоров! Сабж! вот код вкратце WebClient client = new WebClient(); ...

Компилятор неправильно отображает кириллицу
компилятор в Dev-C++ вместо кириллицы выдает непонятные смволы похожие на кириллицу. а результаты...

1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32628 / 21095 / 8139
Регистрация: 22.10.2011
Сообщений: 36,357
Записей в блоге: 8
03.04.2016, 02:49 2
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Внимательно читаем комментарии, в процедуру были внесены изменения
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var
  hWndTip: THandle = 0; // перенес сюда, чтобы компилятор не вякал о неинициализированной переменной
 
procedure ShowBalloonTip(Control: TWinControl; Icon: integer; BackCL, TextCL: TColor;
                         Title: String; Text: string); // передаем строки как обычный String
 
// все описания констант есть в CommCtrl, не нужно дублировать их
 
var
  hWnd : THandle;
  ti: TOOLINFOW; // Юникодная версия !!!
begin
  if hWndTip <> 0 then  DestroyWindow(hWndTip);
 
  hWnd := Control.Handle;
  hWndTip := CreateWindow(TOOLTIPS_CLASS, nil, WS_POPUP  or TTS_NOPREFIX or TTS_BALLOON or
  TTS_ALWAYSTIP, 0, 0, 0, 0, hWnd, 0, HInstance, nil);
  if hWndTip <> 0 then begin
    SetWindowPos(hWndTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
    ti.cbSize := SizeOf(ti);
    ti.uFlags :=  TTF_SUBCLASS;
    ti.hWnd := hWnd;
    ti.lpszText := PWideChar(UTF8ToUTF16(Text)); // Вот таким вот образом конвертируем строку в PWideChar
 
    GetClientRect(hWnd, ti.rect);
    SendMessage(hWndTip,TTM_SETDELAYTIME, TTDT_INITIAL ,100);
    SendMessage(hWndTip,TTM_SETDELAYTIME, TTDT_AUTOPOP ,20000);
    if BackCL <> clDefault then SendMessage(hWndTip, TTM_SETTIPBKCOLOR, BackCL, 0);
    if TextCL <> clDefault then SendMessage(hWndTip, TTM_SETTIPTEXTCOLOR, TextCL, 0);
 
    SendMessage(hWndTip, TTM_ADDTOOLW, 1, integer(@ti)); // Здесь тоже Юникодная версия сообщения
    SendMessage(hWndTip, TTM_SETTITLEW, Icon, integer(PWideChar(UTF8ToUTF16(Title)))); // и тут тоже
  end;
end;
 
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer);
begin
  ShowBalloonTip(Button1, 0, 2, clRed, 'Балун', 'пример балуна');
end;
Чтобы использовать UTF8ToUTF16 нужно подключить LazUTF8 в список Uses. Вот результат:
Изображения
 
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2016, 02:49
Помогаю со студенческими работами здесь

Текстбокс неправильно отображает кириллицу (Ответ от сервера)
ель ВКонтаР- Пишет, что то на подобии этого, когда в нем отображаю ответ от сервера :(...

NotifyIcon ShowBalloonTip
Как сделать так, чтобы всплывающая подсказка ShowBalloonTip моментально обновлялась другой, если...

NotifyIcon.ShowBalloonTip - установить время отображения
Всем доброй ночи. В общем проблема такая: вызываю notifyIcon1.ShowBalloonTip(30000, Text,...

Как определить что пользователь нажал на сообщение (ShowBalloonTip) ?
Как определить что пользователь нажал на сообщение (ShowBalloonTip) ? Пример сообщения : ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru