Главная страница
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.05 c
14-1090352699
RedLord
2004-07-20 23:44
2004.08.08
инфа по програмированию DirectX


1-1090509542
Ego
2004-07-22 19:19
2004.08.08
поле DBGrid.


9-1082469550
Creep
2004-04-20 17:59
2004.08.08
Canvas


1-1090939568
CrossOut
2004-07-27 18:46
2004.08.08
Обращение к свойствам компонентов генерируя строку с именем его


3-1089596303
Bacuc
2004-07-12 05:38
2004.08.08
DevExpress