Solved

Dragging a Timage in scrollBox

Posted on 1998-08-22
9
555 Views
Last Modified: 2010-04-04
Sorry for my bad English...
I would like to move at runtime an image with the mouse, inside a scrollbox like in PaintShop Pro or others graphic programs.
I need this when the Image is greater than the scrollbox dimensions.I have tried some solutions but when I move the image, I get Flickering.
0
Comment
Question by:1bdev
  • 5
  • 3
9 Comments
 
LVL 10

Expert Comment

by:viktornet
ID: 1337439
Try this .....

inOnMouseMove of the Image....

if ssleft in shift then
begin
     releasecapture;
     Image1.perform(WM_SYSCOMMAND, $F012, 0);
end;

Hope this helps....You can also assign OnDragDrop, and OnDropOver...

Regards,
Viktor Ivanov
0
 

Author Comment

by:1bdev
ID: 1337440
Hi Viktor,
thank you for your answer but it is not the answser that I am waiting.
Due to my very bad english, my question is not so clear.
It's not the Image I want to move but the scrollbars of the scrollBox.
For example :
I have an image 640x480 pixels inside a scrollbox 100x100 pixels.
My users needs to see the invisibles portions of this image by dragging
the image with the mouse. Like in PaintShop Pro

Best regards
Bernard Deveza
bdeveza@hol.fr

Here is a code I used but it is not good :

public
    mousedown:boolean;
    currentx:longint;
    currenty:longint;
    { Public declarations }
  end;

procedure Tframeview.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if button=mbleft then
   begin
     mousedown:=true;
     currentx:=x;
     currenty:=y;
   end;
end;

procedure Tframeview.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if (image1.Width>frameview.width) or (image1.height>frameview.height) then
    if mousedown then
      begin
        if horzscrollbar.position<horzscrollbar.range then
          horzscrollbar.position:=horzscrollbar.position+(currentx-x);
        if vertscrollbar.position<vertscrollbar.range then
          vertscrollbar.position:=vertscrollbar.position+(currenty-y);
        currentx:=x;
        currenty:=y;
      end;
end;

procedure Tframeview.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  mousedown:=false;
  currentx:=x;
  currenty:=y;
end;
0
 
LVL 10

Accepted Solution

by:
viktornet earned 100 total points
ID: 1337441
Here is something that I just whiped together

var
  PT : TPoint;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if ssLeft in Shift then
  begin
    if pt.x > x then
      SB.ScrollBy(1, 0)
    else if pt.x < x then
      SB.ScrollBy(-1, 0);
    if pt.y > y then
      SB.ScrollBy(0, 1)
    else if pt.y < y then
      SB.ScrollBy(0, -1);
  end;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  GetCursorPos(PT);
end;

procedure TForm1.IMMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  GetCursorPos(pt);
end;

Hope this works...

Regards,
Viktor Ivanov
0
Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 10

Expert Comment

by:viktornet
ID: 1337442
SB is the scroll box, and the OnMouseDown, OnMouseUp, and OnMouseMove are part of Image's events not the form's or the scrollbox's events....

Regards,
Viktor Ivanov
0
 

Author Comment

by:1bdev
ID: 1337443
Thank you Viktor, I'm trying your solution... and it seems a good solution. I come back to you quickly.
0
 
LVL 10

Expert Comment

by:viktornet
ID: 1337444
Is it working for you that way??? =)

Regards,
Viktor Ivanov
0
 

Author Comment

by:1bdev
ID: 1337445
Yes it globally work for me but with some imperfections I am working on. I have made a little program based on your example. Is it possible to email it to you because It is difficult for me to explain correctly the problems encountered.
Best regards
Bernard
bdeveza@hol.fr
0
 
LVL 10

Expert Comment

by:viktornet
ID: 1337446
Sorry for so late reply but I was out of town....so here I am again =)
Of course send it to me...My e-mail is viktor@megsinet.net

0
 

Expert Comment

by:perkley
ID: 2621233
Will you post what you have found, I have the same problem that you have, will you post how you achieved your end result?
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

820 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question