0

X軸に沿って画像を移動する必要があり、定義された境界に達したら移動を停止します(独自のトラックバーを作成しています)。境界を定義する方法がわかりません。私のコードでは、境界に到達すると、そこにスタックして移動できなくなります。これがコードです

var 
  PinCurrentPosition,PinStartingPosition:integer; 
  move:boolean;

procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered := True;
Image5.Picture.LoadFromFile('Untitled2.bmp');
PinStartingPosition:=Image5.Left;
end;

procedure TForm1.Image5MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if (button <> mbLeft) then move:=false
  else
  begin
    move:=true;
    PinCurrentPosition:=x;
  end;
end;

procedure TForm1.Image5MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 if move and ((PinStartingPosition-75)<Image5.Left) 
 and ((PinStartingPosition+75)>Image5.Left) then
 Image5.Left:=Image5.Left+x-PinCurrentPosition;
end;

procedure TForm1.Image5MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
move:=false;
end;
4

1 に答える 1

0

Else を Image5MouseMove プロシージャに追加して、画像が可動領域外にある場合に画像の位置を修正する必要があります。

procedure TForm1.Image5MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
    if 
      move and 
      (Image5.Left>(PinStartingPosition-75)) and
      (Image5.Left<(PinStartingPosition+75)) 
    then
      Image5.Left:=Image5.Left+x-PinCurrentPosition;
    else if Image5.Left<=(PinStartingPosition-75) then
      Image5.Left:= PinStartingPosition-75+1
    else if Image5.Left>=(PinStartingPosition+75) then
      Image5.Left:= PinStartingPosition+75-1; 
end;
于 2014-05-08T06:38:19.410 に答える