Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Определение позиции Мышки [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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо