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

Вниз

Про мышку   Найти похожие ветки 

 
курсор   (2004-07-21 18:43) [0]

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


 
Gero ©   (2004-07-21 18:52) [1]

CM_MOUSELEAVE


 
grom   (2004-07-21 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;


 
SelloutS   (2004-07-21 21:45) [3]

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


 
grom   (2004-07-21 21:57) [4]

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


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

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

См. WM_NCHITTEST


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

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

>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?


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

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

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


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

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


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

кста не знаю как у других но 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;


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


 
Umak   (2004-07-25 07:08) [10]

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


 
Umak ©   (2004-07-25 07:47) [11]

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

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


 
Polevi ©   (2004-07-25 10:57) [12]

SetCapture + WM_MOUSEMOVE



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

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

Наверх




Память: 0.49 MB
Время: 0.041 c
3-1089705380
Newuser
2004-07-13 11:56
2004.08.08
Вопрос по SQL


14-1090028059
Думкин
2004-07-17 05:34
2004.08.08
С днем рождения! 17 июля


14-1090415459
Piter
2004-07-21 17:10
2004.08.08
Эксперименты с русским языком в английской windows


14-1090563729
VMcL
2004-07-23 10:22
2004.08.08
Круглые "даты"


6-1086518328
VID
2004-06-06 14:38
2004.08.08
Поведение сокета при отправке данных