Текущий архив: 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.47 MB
Время: 0.04 c