![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
вытащить Title у системного hint-окошка [D7, WinXP]
BOB16 © (2007-01-07 00:38:00)В системном трейе находятся иконки. Когда на них наводят мышь - выскакивает на некоторое время Hint.
Свою программу посадил тоже в трей и снабдил соответствующим Hint'ом (Shell_NotifyIcon(NIM_ADD, @FIconData:TNotifyIconData)).
Но хочу, чтобы когда мышь навели на мою иконку и появился Hint с моим текстом - поменять его на другой! Именно пока он виден на экране в системном трейе!
Посредством WS32.EXE вижу такое сообщение о моём окошке= Hint'е:
Popup XXXXXXX {tooltips_class32} EXPLORER.EXE (XXX,XXX)-(XXX,XXX) "Старый текст моего Hint до правки"
в helpe WS32 написано, что это Title окна, полученный функцией GetwindowText(), но я попробовал:
var S:array [0..260] of char;
P:PChar;
wnd_:= Windows.FindWindow('tooltips_class32',''); // по моему предположению = текущее окошко в системном трейе
if wnd_<>0 then
if IsWindowVisible(wnd_) then begin // и оно видно сейчас
P:=@S;
fillchar(S,sizeOf(S),0);
GetWindowText(wnd_,P,259);
//... но здесь - чтобы понять - моё окно с Hint'ом или чужое мне нужно знать текст Hint'а, чтобы дальше его поменять...
end;
А мне возвращается S, залитый нулями и сама GetWindowText()=0!
Как мне вытащить Title-текст, который отображает WS32 для моего окошка с Hint?
BOB16 (2007-01-08 15:56:00) [1]Нашёл-таки способ непортить шрифт в моём Hint-окне, которое сейчас видно на "Рабочем столе":
DefFont:= SendMessage(wnd_,WM_GETFONT,0,0);
Windows.SendMessage(wnd_,WM_SETFONT,DefFont,1);
вообще не к чему...
делаю просто:
Windows.SendMessage(wnd_,WM_SETFONT,0,1);
И всё работает под XP!
Всем спасибо!
BOB16 (2007-01-07 15:24:00) [2]> Calibr [4]
Пробовал - никакого эффекта!
Работает толькоWindows.SendMessage(wnd_,WM_SETFONT,...
но шрифт......
Calibr (2007-01-07 14:11:00) [3]Может попробовать отослать окну сообщение WM_SETTEXT
BOB16 (2007-01-07 13:35:00) [4]Проблема с поиском окошка с моим Hint в системном трейе вроде бы отпала.
Нашёл-таки способ отыскать моё Hint-окно, которое сейчас видно на "Рабочем столе":
var S : array [0..260] of char;
P : PChar;
DefFont : HFont;
dc : HDC;
..........
begin
..........
Shell_NotifyIcon(NIM_MODIFY, @FIconData);
..........
P:= @S;
wnd_:= Windows.FindWindow('tooltips_class32',''); // похоже, что это
// первый попавшийся Hint в системном трейе
if wnd_=0 then
Exit;
wnd_:= Windows.GetWindow(wnd_,GW_HWNDFIRST);
// предположение: начинаем поиск с самого начала списка таких окошек..
z_lab:
if wnd_<>0 then begin
fillchar(S,sizeOf(S),0);
Windows.SendMessage(wnd_,WM_GETTEXT,70,Integer(P));
if P<>'Новый текст Hintа' then begin
wnd_:= Windows.GetNextwindow(wnd_,GW_HWNDNEXT);
goto z_lab;
end;
// дошли до сюда - значит нашли наше Hint-окошко
if not IsWindowVisible(wnd_) then begin // но оно не видно!
Exit;
end;
dc:= Windows.GetDc(wnd_);
// пробовал сразу дать Windows.SendMessage(wnd_,WM_PAINT,dc,0);
// думал что перерисуется содержимое окошка - но ничего
// такого не произошло!
try // пришлось делать махинацию с помощью двух нижеприведённых строк
DefFont:= Windows.SendMessage(wnd_,WM_GETFONT,0,0);
Windows.SendMessage(wnd_,WM_SETFONT,DefFont,1);
finally
ReleaseDC(dc,wnd_);
end;
end;
end;
Но проблема со шрифтом осталась! Хотя и делаю:
DefFont:= SendMessage(wnd_,WM_GETFONT,0,0);
Windows.SendMessage(wnd_,WM_SETFONT,DefFont,1);
Казалось бы: беру старый шрифт и его же посылаю, но не тут то было - шрифт становится жирным!
Что делать? Кто-нибудь поделится соображениями?
BOB16 (2007-01-07 02:09:00) [5]>[1]
Проблема в том, что он сидит в Hint и сидит в "поменяном" виде после
Shell_NotifyIcon(NIM_MODIFY, @FIconData:TNotifyIconData)).!!!!!
Но как только hint-окно появилось на экране в системном трейе, и до момента пока мышь позиционируется на иконке - картинка с Hint'ом не освежается!!!!!
А нужно именно - пока Hint виден в системном трее- поменять его текст.
Юрий Зотов (2007-01-07 02:01:00) [6]Хм... а разве текст хинта не сидит в TNotifyIconData? Зачем его искать, если он и так известен?