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

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

Про мышку [D6, WinXP]


курсор ©   (2004-07-21 18:43:00) 

Как форма может определить что курсор мыши покинул её клиентскую область?


Polevi   (2004-07-25 10:57:00) [1]

SetCapture + WM_MOUSEMOVE


Umak   (2004-07-25 07:47:00) [2]

WM_MouseLeave работает всегда и быстро
var g_tme:TTRACKMOUSEEVENT;

при Сreate
with  g_tme do begin
 cbSize:=sizeof(TTRACKMOUSEEVENT);
 dwFlags:= TME_LEAVE;
 dwHoverTime:= 0;
 hwndTrack:= handle;
end;
TrackMouseEvent(g_tme);

в wm_mousemove вызываем
 TrackMouseEvent(g_tme);

ловим WM_MouseLeave

----
Если кто знает способ получше напишите, плиз, давно ищу!


Umak   (2004-07-25 07:08:00) [3]

Действительно CM_MOUSELEAVE не отрабатывает если на форме нет
ни одного WinControl
и по сути CM_MOUSELEAVE работает по принципу таймера как у grom


SelloutS   (2004-07-22 17:42:00) [4]

кста не знаю как у других но CM_MOUSELEAVE ужасно глючит =\... срабатывает 50/50...делаю так:


...
public
   procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
   { Public declarations }
...

procedure TForm1.CMMouseLeave(var Msg: TMessage);
begin
 Caption := 'мышка вне формы';
 inherited;
end;


в чём проблемма?


курсор   (2004-07-22 10:40:00) [5]

Отлично подошло использование CM_MOUSELEAVE.
Благодарю.


grom   (2004-07-22 09:20:00) [6]

определение клиентской области

FormPos:=Rect( ClientOrigin.x,ClientOrigin.y,
              ClientOrigin.x+ClientWidth,
              ClientOrigin.y+ClientHeight);


Огромное Кулясищще   (2004-07-21 22:31:00) [7]

> Как форма может определить что курсор мыши покинул её клиентскую область?

> grom   (21.07.04 21:25) [2]


procedure TForm1.Timer1Timer(Sender: TObject);
var
FormPos: TRect;
CursorPos: TPoint;
begin
 GetCursorPos( CursorPos );
  FormPos := Rect( Form1.Left, Form1.Top,
                  Form1.Left + Form1.Width,
                  Form1.Top + Form1.Height );

 if PtInRect( FormPos, CursorPos ) then
    Form1.Caption := 'Мышка над формой!'
 else
    Form1.Caption := 'Мышка вне формы...';
end;


А это клиентская область? Может использовать свойство ClientRect?


Юрий Зотов   (2004-07-21 22:14:00) [8]

> курсор мыши покинул её клиентскую область

См. WM_NCHITTEST


grom   (2004-07-21 21:57:00) [9]

это уж точно, но я пользовался им на первых порах


SelloutS   (2004-07-21 21:45:00) [10]

>grom
извращение =)


grom   (2004-07-21 21:25:00) [11]

procedure TForm1.Timer1Timer(Sender: TObject);
var
 FormPos: TRect;
 CursorPos: TPoint;
begin
  GetCursorPos( CursorPos );
  FormPos := Rect( Form1.Left, Form1.Top,
                   Form1.Left + Form1.Width,
                   Form1.Top + Form1.Height );
  if PtInRect( FormPos, CursorPos ) then
     Form1.Caption := 'Мышка над формой!'
  else
     Form1.Caption := 'Мышка вне формы...';
end;


Gero   (2004-07-21 18:52:00) [12]

CM_MOUSELEAVE


Наверх

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