Jump to content
JohnLM

Scroll an image with mouse

Recommended Posts

I am having trouble figuring this one out. 

 

I have a form with a tscrollbox and an timage.

 

In the image1MouseMove event of the timage I have the following code; 

procedure TForm2.im1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  scrollbox1.vertScrollBar.Position := x;
  scrollbox1.horzScrollBar.Position := y;
end;

But it is not what I'd expect. 

 

What I am trying to do: 

 

1. Lets say I have screenshot of my desktop and inserted into the timage.

2. And I resize the app's form smaller

3. Using the mouse, I want to click on the image and drag (or pan) around inside the form's scrollbox area so that I can see other parts of the image.

 

What am I doing wrong and how can I fix this?  TIA

 

Share this post


Link to post

You would like to move the scrollbar by the ammount the user have move the mouse to do so you will need two variables (private fields) that stores the previous mouse coordinates:

 

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift:
    TShiftState; X, Y: Integer);
begin
  fPRevX:=X;
  fPrevY:=Y;
end;

 

Now when the user moves the mouse while the left button is pressed we can calculate the new position for the scrollbars:

 

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y:
    Integer);
begin
  if ssLeft in Shift then
  begin
      scrollbox1.vertScrollBar.Position := scrollbox1.vertScrollBar.Position+fPrevY-Y;
      scrollbox1.horzScrollBar.Position := scrollbox1.horzScrollBar.Position+fPRevX-X;

      fPrevX:=X;
      fPrevY:=y;
  end;
end;

 

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×