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