![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Про мышку [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