Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];

Вниз

вытащить 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.045 c
15-1170559011
Лирик
2007-02-04 06:16
2007.02.25
Шарик падает вдоль стенки и начинает её касаться без проскальзыва


15-1170264009
Piroxyline
2007-01-31 20:20
2007.02.25
"Назад в будущее"


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


3-1165168049
001
2006-12-03 20:47
2007.02.25
Текстовая база


11-1148312816
Vladimir Kladov
2006-05-22 19:46
2007.02.25
Версия 2.36





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский