Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Определение факта нахождения курсора над треем


leonidus ©   (2007-08-01 11:10:00) 

Господа, я так понимаю что область трея это фактически окно, а раз так то возможно определить находится ли в даный момент курсор над этой областью или нет. Подскажите как это сделать?


WASM   (2007-08-02 10:32:00) [1]


> leonidus ©   (01.08.07 23:36) [7]


Если автор программы TranslateIt это вы, мне казалось что для вас решить проблемму определения нахождения курсора мышки над треем не состовляет особых хлопот, а вопрос собственно связан вот с чем, как мне получить строчку текста по линии, а не отдельное слово из под курсора мышки в Internet Explorer, вот код

function TForm1.ExtractWordFromIE: string;
var
 ptScreen: TPoint;
 ppacc: IAccessible;
 pvarChild: Variant;
 SP: IServiceProvider;
 HE: IHTMLElement;
 TR: IHTMLTxtRange;
 HD: IHTMLDocument2;
 NW3: IHTMLWindow3;
 NW2: IHTMLWindow2;
 childWND: HWND;
 lrHD: Cardinal;
 IEHwnd:Cardinal;
 IEHwndClass: array [0..256] of Char;
begin
 Result:= '';
 try
   if GetCursorPos(ptScreen) then
   begin
     IEHwnd:= WindowFromPoint(ptScreen);
     GetClassName(IEHwnd, IEHwndClass, SizeOf(IEHwndClass));
     if Succeeded(AccessibleObjectFromPoint(ptScreen, ppacc, pvarChild)) then
     begin
       if Succeeded(ppacc.QueryInterface(IServiceProvider, SP)) then
         SP.QueryService(IHTMLElement, IHTMLElement, HE);
       if HE <> nil then
         HD:= HE.document as IHTMLDocument2;
     end;
     TR:= (HD.body as IHTMLBodyElement).createTextRange;
   NW2 := HD.parentWindow;
   if (NW2 <> nil) and Succeeded(NW2.QueryInterface(IHTMLWindow3, NW3)) then
   begin
     ptScreen.X:= ptScreen.X  - NW3.screenLeft;
     ptScreen.Y:= ptScreen.Y  - NW3.screenTop;
   end;
   TR.moveToPoint(ptScreen.X, ptScreen.Y);
   TR.expand('word');
   Result:= TR.Text;
 end;
 except
   //
 end;
end;


leonidus   (2007-08-01 23:36:00) [2]

>WASM спасибо за ответ
На счет TranslateIt!, с чем связан ваш вопрос?


WASM   (2007-08-01 20:04:00) [3]


> to leonidus


Уважаемый а это не вы случаем словари пишите типа TranslateIt?


WASM   (2007-08-01 20:01:00) [4]

То есть вот так

if WndClass = 'TrayNotifyWnd' then


WASM   (2007-08-01 19:59:00) [5]

Может так или я невьехал в вопрос

procedure TForm1.Timer1Timer(Sender: TObject);
var
 Wnd: HWND;
 WndClass: Array [0..256] of Char;
begin
 Wnd:= WindowFromPoint(Mouse.CursorPos);
 GetClassName(Wnd, WndClass, SizeOf(WndClass));
 if WndClass = 'ToolbarWindow32' then
   Caption:= 'Мышка над треем'
 else
   Caption:= 'Мышка где то есчё'
end;


DVM   (2007-08-01 16:20:00) [6]


> а какое сообщение панель задач отправляет при наведении
> курсора?

Никакого. Это окну панели задач приходит WM_MOUSEMOVE и прочие


leonidus   (2007-08-01 15:24:00) [7]

а какое сообщение панель задач отправляет при наведении курсора?


DVM   (2007-08-01 11:27:00) [8]


> Подскажите как это сделать?

Глобальная ловушка на мышь. Или на сообщения окна панели задач.


Наверх

Титульная страница Поиск, карта сайта Написать письмо