Вопрос по задаче с procedure TForm1.Shp1MouseMove
Добавлено: 30 июн 2004, 00:33
Привет, монстры программирования.
Помогите найти ошибку в простейшей задачке.
Задача: При наведении мышкой на круг, он должен становиться полностью закрашенным, а при отведении курсора из круга он снова очищается.
На Form1 нанесена Panel1. На Panel1 нанесён Panel2 в виде квадрата. В Panel2 вписан круг (компонент Shape1).
Первоначальные параметры : Shape1.Brush.Style:=bsClear;
Shape1.Pen.Color:=clRed;
Далее я записываю прцедуру наведения мышки
procedure TForm1.Shp1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var bs:TBrushStyle;
r,cX,cY,MouseX,MouseY,d:real;
begin
MouseX:=X;
MouseY:=Y;
r:=Shp1.Width/2;// находим радиус круга
cX:=Panel1.Left+Panel2.Left+r;// находим координаты центра круга
cY:=Panel1.Top+Panel3.Top+r;
d:=sqr(abs(cX-MouseX))+sqr(abs(cY-MouseY));//находим квадрат расстояния от центра круга до любой произвольной точки ( полпжения курсора)
if d>sqr(r) then // если квадрат этого расстояния будет меньше квадрата радиуса, то курсор будет внутри круга
bs:=bsSolid
else
bs:=bsClear;
Shp2.Brush.Style:=bs;
Shp2.Brush.Color:=clRed ;
end;
Проблема заключается в том, что при отведении курсора мышки из круга он не очищается, т. е. не приводится в состояние Shape1.Brush.Style:=bsClear;
Может быть ошибка в формуле нахождения квадрата расстояния
И ещё может подскажите как сделать такой код с использованием функции
Я пытался сделать такую, но не с ней не работает :
function Polojenie (var d:real ):TBrushStyle;
var r,cX,cY,MouseX,MouseY:real;
begin
r:=Shp1.Width/2;
cX:=Panel1.Left+Panel2.Left+r;
cY:=Panel1.Top+Panel2.Top+r;
d:=sqr(Abs(cX-MouseX))+sqr(Abs(cY-MouseY));
if d<sqr(r) then
Polojenie:=bsSolid
else Polojenie:=bsClear;
end;
Помогите найти ошибку в простейшей задачке.
Задача: При наведении мышкой на круг, он должен становиться полностью закрашенным, а при отведении курсора из круга он снова очищается.
На Form1 нанесена Panel1. На Panel1 нанесён Panel2 в виде квадрата. В Panel2 вписан круг (компонент Shape1).
Первоначальные параметры : Shape1.Brush.Style:=bsClear;
Shape1.Pen.Color:=clRed;
Далее я записываю прцедуру наведения мышки
procedure TForm1.Shp1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var bs:TBrushStyle;
r,cX,cY,MouseX,MouseY,d:real;
begin
MouseX:=X;
MouseY:=Y;
r:=Shp1.Width/2;// находим радиус круга
cX:=Panel1.Left+Panel2.Left+r;// находим координаты центра круга
cY:=Panel1.Top+Panel3.Top+r;
d:=sqr(abs(cX-MouseX))+sqr(abs(cY-MouseY));//находим квадрат расстояния от центра круга до любой произвольной точки ( полпжения курсора)
if d>sqr(r) then // если квадрат этого расстояния будет меньше квадрата радиуса, то курсор будет внутри круга
bs:=bsSolid
else
bs:=bsClear;
Shp2.Brush.Style:=bs;
Shp2.Brush.Color:=clRed ;
end;
Проблема заключается в том, что при отведении курсора мышки из круга он не очищается, т. е. не приводится в состояние Shape1.Brush.Style:=bsClear;
Может быть ошибка в формуле нахождения квадрата расстояния
И ещё может подскажите как сделать такой код с использованием функции
Я пытался сделать такую, но не с ней не работает :
function Polojenie (var d:real ):TBrushStyle;
var r,cX,cY,MouseX,MouseY:real;
begin
r:=Shp1.Width/2;
cX:=Panel1.Left+Panel2.Left+r;
cY:=Panel1.Top+Panel2.Top+r;
d:=sqr(Abs(cX-MouseX))+sqr(Abs(cY-MouseY));
if d<sqr(r) then
Polojenie:=bsSolid
else Polojenie:=bsClear;
end;