![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
События мыши [D7, Win2k, WinXP]
Optical © (2005-06-13 20:48:00)Подскажите пожалуйста как можно через событие мыши OnMouseLeaveотменить событие OnMouseUp так, чтобы оно вообще не наступало. Заранее спасибо.
jack128 (2005-06-13 21:57:00) [1]Expl (13.06.05 21:19) [6]
и что эта запись делает?
Если флаг csCaptureMouse взведен, тот при клике на контрол он захватывает мышь(вызывает SetCapture) и все сообщения от мыши приходят именно этому контролу. Когда приходит сообщение WM_LBUTTONUP захват мыши снимается..
Ели же флаг csCaptureMouse сброшен, то все сообщения от мыши идут именно тому контролу, над которым находится курсор.
jack128 (2005-06-13 21:19:00) [2]в смысле этот код нужно вставить в конструктор контрола или в OnCreate формы на которой лежит тот контрол , для которого ты хочешь задать подобное поведение..
Expl (2005-06-13 21:19:00) [3]и что эта запись делает?
Virgo_Style (2005-06-13 21:19:00) [4]Virgo_Style © (13.06.05 21:13) [3]
procedure TForm1.Button1MouseUp(Sender:TObject; Button:TMouseButton;Shift: TShiftState; X, Y:Integer);
var R:TRect; P:TPoint;
begin
P.X := X;
P.Y := Y;
R.Left := 0;
R.Right := (Sender as TControl).Width;
R.Top := 0;
R.Bottom := (Sender as TControl).Height;
if PtInRect(R,P) then
Memo1.Lines.Add('Есть!')
else
Memo1.Lines.Add('Промах %-)');
end;
Примерно так...
jack128 (2005-06-13 21:17:00) [5]попробуй вот это..
MyControl.ControlStyle := MyControl.ControlStyle - [csCaptureMouse];
Virgo_Style (2005-06-13 21:13:00) [6]Можно проверять координаты мыши в момент отпускания клавиши.
Optical (2005-06-13 21:12:00) [7]Так я и сделал... сначала... но мне нужен более гибкий подход. Дело в том что мне нужно написать одну процедуру, к которой будут обращаться около ста других компонент, иначе в обработчике события OnMouseUp каждого из них придётся писать лишнюю строку, скажем:
if not MouseInside then Exit;
а это ведь 100 лишних строк.......
Expl (2005-06-13 21:05:00) [8]Создай глобальную переменную boolean и в событии OnMouseLeave делай ее true, например, а в OnMouseUp поставь условие с ее проверкой.