Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2010, 17:18   #1
rangel
Пользователь
 
Регистрация: 31.10.2007
Сообщений: 65
По умолчанию создать tooltips_class32 чужому окну

вот код
Код:
type
  TOOLINFO = packed record
    cbSize: Integer;
    uFlags: Integer;
    hwnd: THandle;
    uId: Integer;
    rect: TRect;
    hinst: THandle;
    lpszText: PWideChar;
    lParam: Integer;
  end;

var
  Form1: TForm1;
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;
  TTN_FIRST = -520;
  TTN_LAST = -549;
  TTN_NEEDTEXT = (TTN_FIRST - 0);
  TTN_SHOW = (TTN_FIRST - 1);
  TTN_POP = (TTN_FIRST - 2);
  TTM_GETTEXT = (WM_USER + 11);
  TTM_GETTEXT2 = (WM_USER + 56);
  TTM_ACTIVATE = WM_USER + 1;
  TTM_DELTOOL = WM_USER + 5;
  TTM_UPDATETIPTEXT = WM_USER + 57;
  WM_BALLOONHIDE = $00000404;
  WM_BALLOONSHOW = $00000402;
  TTM_SETTOOLINFO = WM_USER+9;
  TTM_GETTOOLINFO = (WM_USER + 8);

...


function ShowBalloonTip(wnd:HWND; Text: PWideChar):HWND;
var
  hWndTip: THandle; 
  ti: TOOLINFO; 
  hWnd: THandle; 
begin 
  hWnd    := wnd;
  hWndTip := CreateWindow(TOOLTIPS_CLASS, nil, 1,
    0, 0, 0, 0, hWnd, 0, 0, nil);
  if hWndTip <> 0 then 
  begin
    ti.cbSize := SizeOf(ti); 
    ti.uFlags := TTF_CENTERTIP or TTF_TRANSPARENT or TTF_SUBCLASS;
    ti.hwnd := hWnd;
    ti.lpszText := Text;
    Windows.GetClientRect(hWnd, ti.rect);
    SendMessage(hWndTip, TTM_ADDTOOL, 0, Integer(@ti)); 
  end;
  Result:=hWndTip;
end;

function StringToPWide(sStr: string): PWideChar;
var
  pw: PWideChar;
  iSize: integer;
  iNewSize: integer;
begin
  iSize := Length(sStr) + 1;
  iNewSize := iSize * 2;
  pw := AllocMem(iNewSize);
  MultiByteToWideChar(CP_ACP, 0, PChar(sStr), iSize, pw, iNewSize);
  Result := pw;
end;
например так я делаю подсказку (hint, tooltip) для Memo1
тут всё нормально
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
s:PWideChar;
z:string;
 ti: TOOLINFO;
begin
randomize;
z:='asd'+inttostr(random(90));
s:=StringToPWide(z);
WWW2:= ShowBalloonTip(Memo1.handle, s);
end;
а если я пытаюсь объекту на чужем окне сделать
то подсказка не появляется
Код:
WWW2:= ShowBalloonTip({чужое окно}, s);
winspector ом отловил сообщения на кодировку на моей форме кодировка Ansi на чужей Unicode, но я думаю это не важно,
как мне создать подсказку другому окну, помогите)
rangel вне форума Ответить с цитированием
Старый 26.11.2010, 19:35   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

А как Вы ищите чужое окно?
psycho-coder вне форума Ответить с цитированием
Старый 27.11.2010, 00:35   #3
rangel
Пользователь
 
Регистрация: 31.10.2007
Сообщений: 65
По умолчанию

чужое окно я ищу как надо, и то что я его нахожу и это то которое мне нужно это 100%
rangel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматизация кликов по окну sincemix Общие вопросы Delphi 10 03.08.2010 13:19
Эмуляция щелчка по окну Bayazet Общие вопросы Delphi 15 05.02.2010 11:07
Вопрос по активному окну san72 Общие вопросы Delphi 11 07.03.2009 12:05
от консоли к окну ёжик Общие вопросы C/C++ 3 06.04.2008 17:51
Сообщение другому окну Бонарт Win Api 13 15.08.2007 20:23