poruszanie się Shape w obrębie image wraz z poruszaniem ku

0

Cześć.
Otrzymałem o statnio zadanie do wykonania które polega na tym aby podczas ruszania kursorem shape1 poruszał się wraz z nim dokładnie w centralnej części jego pola. I tak też zrobiłem. Dodatkowo też dany shape1 nie może wyjść poza obręb image1 w momencie kiedy kursor opuści obszar zajmowany przez image1.
Proszę pomóżcie mi [???] W jaki sposób zrobić aby ten shape1 nie wyszedł poza obszar image1.
Oto mój kod w którym wykonuję wszystki czynności:

procedure TForm1.kolorujClick(Sender: TObject);
var x,y:integer;
var bmp:tbitmap;
wiersz:pbytearray;
begin
bmp:=tbitmap.create;
bmp.height:=image1.height;
bmp.width:=image1.width;
bmp.PixelFormat:=pf24bit;

for y:=0 to 255 do begin
    wiersz:=bmp.scanline[y];

for x:=0 to 255 do begin
    wiersz [3*x]:=100;
    wiersz [3*x+1]:=y;
    wiersz [3*x+2]:=x;
end;
end;
image1.Canvas.Draw(0,0,bmp);
image2.Canvas.Draw(0,0,bmp);
image3.Canvas.Draw(0,0,bmp);
image4.Canvas.Draw(0,0,bmp);
image5.Canvas.Draw(0,0,bmp);
bmp.Free;

end;

procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);

begin
{prawdopodobnie to będzie w tym miejsc jeśli nie to podajcie gdzie i w jaki sposób}
Shape1.left:=Shape1.left+x-shape1.width div 2;
Shape1.top:=Shape1.top+y-Shape1.height div 2;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Edit1.Text:=intToStr(x);
Edit2.Text:=intToStr(y);
Shape1.left:=(image1.Width div 2)+x;
Shape1.Top:=image1.Top+y-shape1.Width;
end;

procedure TForm1.Shape2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Shape2.top:=Shape2.top+y-Shape2.height div 2;
end;

procedure TForm1.Shape3MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Shape3.left:=Shape3.left+x-Shape3.width div 2;
end;

procedure TForm1.Shape4MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Shape4.left:=Shape4.left+x-Shape4.width div 2;
end;

procedure TForm1.Shape5MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Shape5.left:=Shape5.left+x-Shape5.width div 2;
end;

end.</b>

0

trzeba sprawdzić warunki:

  1. if shape1.left<Image1.left then nie idź dalej else idź;
  2. top
  3. Left+Width
  4. Top+Height.
    Mam nadzieje że to wystarczy.

P.S. Albo inaczej: http://4programmers.net/Forum/viewtopic.php?id=54878&post=142209#142209
tylko że ten kod pod tym linkiem trzeba by nieco przerobić

P.S.2 Dzięki za poprawienie LukaStrz, czasami już wszystko mi się miesza :|

0

Z całym szacunkiem ale nie ma takiego czegoś jak Bottom i Right :P
Trzeba dać Left+Width i Top+Height
;p

1 użytkowników online, w tym zalogowanych: 0, gości: 1