Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.25;
Скачать: CL | DM;

Вниз

вытащить Title у системного hint-окошка   Найти похожие ветки 

 
BOB16   (2007-01-07 00:38) [0]

В системном трейе находятся иконки. Когда на них наводят мышь - выскакивает на некоторое время 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?


 
Юрий Зотов ©   (2007-01-07 02:01) [1]

Хм... а разве текст хинта не сидит в TNotifyIconData? Зачем его искать, если он и так известен?


 
BOB16   (2007-01-07 02:09) [2]

>[1]
Проблема в том, что он сидит в Hint и сидит в "поменяном" виде после
Shell_NotifyIcon(NIM_MODIFY, @FIconData:TNotifyIconData)).!!!!!

Но как только hint-окно появилось на экране в системном трейе, и до момента пока мышь позиционируется на иконке - картинка с Hint"ом не освежается!!!!!

А нужно именно - пока Hint виден в системном трее - поменять его текст.


 
BOB16   (2007-01-07 13:35) [3]

Проблема с поиском окошка с моим 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);

Казалось бы: беру старый шрифт и его же посылаю, но не тут то было - шрифт становится жирным!
Что делать? Кто-нибудь поделится соображениями?


 
Calibr ©   (2007-01-07 14:11) [4]

Может попробовать отослать окну сообщение WM_SETTEXT


 
BOB16   (2007-01-07 15:24) [5]

> Calibr [4]
Пробовал - никакого эффекта!
Работает только Windows.SendMessage(wnd_,WM_SETFONT,...
но шрифт......


 
BOB16   (2007-01-08 15:56) [6]

Нашёл-таки способ непортить шрифт в моём Hint-окне, которое сейчас видно на "Рабочем столе":
DefFont:= SendMessage(wnd_,WM_GETFONT,0,0);
Windows.SendMessage(wnd_,WM_SETFONT,DefFont,1);

вообще не к чему...
делаю просто:
Windows.SendMessage(wnd_,WM_SETFONT,0,1);
И всё работает под XP!

Всем спасибо!



Страницы: 1 вся ветка

Текущий архив: 2007.02.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.033 c
2-1171019204
kot_michael
2007-02-09 14:06
2007.02.25
Добавление пользователей в AD


2-1170485562
vegarulez
2007-02-03 09:52
2007.02.25
Как отловить нажатие кнопки?


2-1170856414
zzxc
2007-02-07 16:53
2007.02.25
TIBTable vs TIBDataSet


15-1170427969
крек
2007-02-02 17:52
2007.02.25
Ну как открыть ps файл???


15-1170238059
hmmm
2007-01-31 13:07
2007.02.25
PHP, алиасы