如何在 Delphi 2010(VCL)中使用鼠标平移图像

qoefvg9y  于 2023-04-20  发布在  其他
关注(0)|答案(1)|浏览(148)

我在ScrollBox中有一个TImage组件,其中的图像比ScrollBox大。我可以使用滚动条在ScrollBox中移动图像,但我想使用鼠标。我想单击图像并拖动它以在ScrollBox中移动它。当我这样做时,ScrollBox的滚动条应该相应地移动。
我将图像光标设置为crHandPoint,这样人们就可以移动图像。
我的问题是,我该怎么做?

procedure TfrmKaarte.imgKaartCanvasMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  bPanning:=True;
  pt := Mouse.CursorPos;
end;

procedure TfrmKaarte.imgKaartCanvasMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
  if bPanning=True then
  begin
    imgKaartCanvas.Left:=X+imgKaartCanvas.Left-pt.X;
    imgKaartCanvas.Top:=Y+imgKaartCanvas.Top-pt.Y;
  end;
end;

procedure TfrmKaarte.imgKaartCanvasMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  bPanning:=False;
end;
mpgws1up

mpgws1up1#

我在 Delphi 10 Seatle中编写的一个非常简单的工作代码如下:

procedure TForm1.imgImageMouseDown(Sender: TObject; 
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  FPanning := True;
  with sbScrollBox do
    FScrollPos.SetLocation(HorzScrollBar.Position, VertScrollBar.Position);
  FMousePos := Mouse.CursorPos;
end;

procedure TForm1.imgImageMouseMove(Sender: TObject; 
  Shift: TShiftState; X, Y: Integer);
begin
  if FPanning then
    with sbScrollBox do
    begin
      HorzScrollBar.Position := FScrollPos.X + FMousePos.X - Mouse.CursorPos.X;
      VertScrollBar.Position := FScrollPos.Y + FMousePos.Y - Mouse.CursorPos.Y;
    end;
end;

procedure TForm1.imgImageMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  FPanning := False;
end;

不要忘记定义这些变量:

FPanning: Boolean;
FScrollPos: TPoint;
FMousePos: TPoint;

并将FPAN初始化为False
希望能帮上忙。

相关问题