Консультация № 66135
08.12.2006, 17:57
0.00 руб.
0 4 2
Есть область на форме (не прямоугольная, произвольной формы и произвольных цветов), при наведении мыши на которую должно производиться какое-то действие.

Обсуждение

Неизвестный
08.12.2006, 18:10
общий
Либо задать формулы для линий - границ этой области, либо сделать битовую маску (Хоть, например, как TBitMap с PixelFormat=pf1bit ее хранить)В OnMouseMove формы проверять на попадание указателя мыши в эту маску.
Неизвестный
08.12.2006, 18:36
общий
А поподробнее насчет маски можно? (с примером)
Неизвестный
09.12.2006, 04:44
общий
это ответ
Здравствуйте, Томша Павел!
Вот прмер чтоб узнать находится ли мышь на форме. Хотя событие MouseMove присутствует у большинства объектов.

Приложение:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin if GetCapture = 0 then SetCapture(Form1.Handle); if PtInRect(Rect(Form1.Left, Form1.Top, Form1.Left + Form1.Width, Form1.Top + Form1.Height), ClientToScreen(Point(x, y))) then Form1.Caption := ‘Мышка на форме‘ else Form1.Caption := ‘Мышка за пределами формы‘;end;
Неизвестный
10.12.2006, 01:08
общий
это ответ
Здравствуйте, Томша Павел!

Если вам необходим обработчик события мыши навёдённой на произвольную, то есть вами созданную форму(рисунок), то определите положение рисунка внутрь какого-либо компонента,например, TShape(только не забудьте сделать его невидимым), а к нему повесьте обработчик наведения мыши onMouseMove.Ну, а уж за то, что должно после этого произойти решайте сами.В примере ниже показано изменение цвета компонента при наведении мышью.
Удачи!


Приложение:
procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin Shape1.Brush.Color:=clRed;end;
Форма ответа