Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.019 c
14-1089979887
pavel_pavel
2004-07-16 16:11
2004.08.08
Средний рост программиста


14-1090499163
menart
2004-07-22 16:26
2004.08.08
Linux


14-1090609792
Soft
2004-07-23 23:09
2004.08.08
Как вы относитесь к тем, кто делает HTML в WORD?


4-1088340452
pantel
2004-06-27 16:47
2004.08.08
Поименованные трубы (named pipes)


1-1090827243
Delph1
2004-07-26 11:34
2004.08.08
Русский язык в клипборде




   Наверх