Array
(
)

Movendo imagem com o mouse...

Caezar
   - 31 mar 2006

E ai amigos, Tudo bem??
Bem é seguinte:
Tem um aplicativo que manipula plantas de fabricas e industrias.
O Problema é que essas imagens são muito grandes então pensei em desenvolver uma forma de arrasta-la com o mouse para melhor visualizá-la.
Assim coloquei um Scrollbox e dentro de mesmo um Image com uma imagem bem grande.
Com o seguinte código:
CODEuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls, SkinImage, HotImage;

#Código

type
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
Image1: THotImage;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
pX , pY : Integer;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ssLeft in Shift then
Begin
pX := X;
pY := Y;
End;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
dX , dY : Integer;
begin
if ssLeft in Shift then
Begin
dX := px - X;
dY := py - Y;
if X <> pX then
ScrollBox1.HorzScrollBar.Position := ScrollBox1.HorzScrollBar.Position + dX;
if Y <> pY then
ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position + dY;
pX := X;
pY := Y;
End;

end;

end.


Porém ao arrastar a imagem ela fica trepidando, alguma dica??


Eniorm
   - 16 mai 2012

Opa...
ressuscitei esse tópico, testei esse código e funciona legal, só com o problema já relatado de trepidar, porém quando pára a movimentação com o mouse, não distorce a imagem.

abraço

Joel Rodrigues
   - 16 mai 2012

Teste alterar a propriedade DoubleBuffered do form para true. Não lembro quais outros componentes containers possuem essa propriedade, veja se os panels e scrollboxes tem também.