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

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

Фокус формы, события OnMouseEnter, Leave [D6, WinXP]


Colonel ©   (2005-01-07 01:21:00) 

Доброй ночи всем тем, кто не спит. Столкнулся с следующей проблемой, нужно отловить вхождение/покидание курсора на форму, т.е при попадании курсора на форму делать что-то и при покидании формф - тоже производить действие. Вся проблема в том, что я использую форму без заголовка. И событие OnMouseMove работает некорректно. Нужен обработчик OnMouseEnter, Leave или обработчик фокуса. Да, еще вот что, при наведении курсора на форму, форма не активизирутся.

Есть ли какие соображения по этому поводу ?


grom   (2005-01-07 17:26:00) [1]

var
d: boolean;
x0,y0: integer;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
d := true;
x0 := x;
y0 := y;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
d := false;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if d then
begin
Left := Left + x - x0;
Top := Top + y - y0;
end;
end;


Colonel   (2005-01-07 03:05:00) [2]

Теперь возникла другая проблема:
У меня есть обработчик нажатия на форму :


procedure TMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 ReleaseCapture;
 Perform(WM_SYSCOMMAND,$F012,0);
end;


Для того чтобы форму можно было перетаскивать за любой участок, т.к заголовка у моей формы нет, но это событие срабатывает только после 2-го нажатия на форме. В чем может быть проблема ?

Код моего обработчика по OnMouseEnter, Leave :


procedure TMain.CMMouseEnter(var Msg: TMessage);
begin
 f_space.show;
 inherited;
end;

procedure TMain.CMMouseLeave(var Msg: TMessage);
begin
 f_space.hide;
 inherited;
end;


И обработчик на нажатие правой кнопки мыши тоже срабатывает с 2-го нажатия. В чем может быть дело ?


procedure tmain.WMRBUTTONDOWN(var mes:TMessage);
begin
 if mes.WParam=2 then close;
 inherited;
end;


Thnx


Colonel   (2005-01-07 02:43:00) [3]

Все я разобрался. Пасиб тебе Geroза помощь.


Colonel   (2005-01-07 02:27:00) [4]

To Gero [3]

Так, что-то я не понял, а как проверять это все ?
Условие какое ?
И какой параметр у msgпроверять ?
Что писать в самой процедуре ?


procedure CMMouseEnter(var Msg: TMessage);
begin
 if msg. и как здесь и на что проверять ?
end;


Буду очень признателен.


Colonel   (2005-01-07 02:12:00) [5]

Буду пробовать юзать. Пасиб.


Gero   (2005-01-07 02:04:00) [6]

type
 TForm1 = class(TForm)
 private
   procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;


Colonel   (2005-01-07 01:59:00) [7]

Как сие добро обрабатывать ? И где ?


Gero   (2005-01-07 01:25:00) [8]

CM_MOUSEENTER/CM_MOUSELEAVE


Наверх

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