![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определение позиции Мышки [D7, XP]
nstur © (2006-09-11 14:13:00)Уважаемые Мастаки!!!
Как определить находится ли указатель мыши на форме или вне её?
Мне нужно раскрывать форму при наведении на неё мышкой и соответственно захлопывать (уменьшать в размерах) при сходе мышки.
Loginov Dmitry (2006-09-12 12:25:00) [1]> on E:Exception do;
Зачем?
nstur (2006-09-12 11:11:00) [2]Все хорошо, но CMMouseEnter/Leave работает только в приложении. А если мышь ушла вне его, то события не отрабатывают. Пришлось перекрывать Application.OnIdle:= IdleEvent; где
try
if PointInRect(Mouse.CursorPos, Self.BoundsRect) then
FormActivate(Self)
else
FormDeactivate(Self);
except
on E:Exception do;
end;
function PointInRect(const P: TPoint; const R: TRect): Boolean;
begin
with R do
Result := (Left <= P.X) and (Top <= P.Y) and
(Right >= P.X) and (Bottom >= P.Y);
end;
Exception - пришлось добавить для выхода компа из спящего режима
Zeqfreed (2006-09-11 16:32:00) [3]> [3] Loginov Dmitry © (11.09.06 16:25)
Не люблю извращаться. CMMouseEnter/Leave меня всегда вполне устраивают.
Loginov Dmitry (2006-09-11 16:25:00) [4]Вариант с таймером надежнее.
Elen (2006-09-11 14:24:00) [5]Как вариант :
procedure TForm1.Timer1Timer(Sender: TObject);
var p:tpoint;
begin
GetCursorPos(p);
if (p.X>=form1.left )and(p.Y>=form1.top ) then
FlashWindow(form1.Handle,true);
end;
Есть и другие...
Zeqfreed (2006-09-11 14:24:00) [6]
TForm1 = class(TForm)
private
{ Private declarations }
public
procedure CMMouseEnter(var Msg : TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Msg : TMessage); message CM_MOUSELEAVE;
end;
. . .
{ TForm1 }
procedure TForm1.CMMouseEnter(var Msg: TMessage);
begin
inherited;
//DoExpand();
end;
procedure TForm1.CMMouseLeave(var Msg: TMessage);
begin
inherited;
//DoCollapse();
end;