Mega Code Archive

 
Categories / Delphi / Graphic
 

Move a TImage in a scrollbox with the mouse

Title: move a TImage in a scrollbox with the mouse? {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Platzieren Sie auf einer TForm eine TScrollBox. F gen Sie dann in die TScrollBox ein TImage ein und setzen Sie bei "Left" und "Top" jeweils den Wert 0 sowie "Autosize" auf True. Weisen Sie dem TImage ein Bild, dessen Ma e die der ScrollBox berschreiten, zu. Hinweis: Beim sehr schnellen Bewegen des Bildes treten allerdings noch Fehler auf! Tipp: Setzen Sie bei der TScrollBox unter "HorzScrollBar" und "VertScrollBar" jeweils das "Tracking" auf True. Um ein Bildflackern w hrend des Verschiebens zu vermeiden, sollte w hrend dieser Aktion bei der TScrollBox "DoubleBuffered" eingeschaltet sein. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ (( The extent of the Bitmap in the TImage should be larger than the extent of the ScrollBox )) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++} var StartX, StartY, MoveX, MoveY: Integer; IsMoved: Boolean; implementation procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin IsMoved := True; StartX := X; StartY := Y; MoveX := X; MoveY := Y; Scrollbox1.DoubleBuffered := True; end; end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if isMoved then begin if (X and ((Image1.Left + Image1.Width + 25) Scrollbox1.Width) then Image1.Left := Image1.Left + (X - StartX); if (X MoveX) and (Image1.Left then Image1.Left := Image1.Left + (X - StartX); if (Y and ((Image1.Top + Image1.Height + 25) Scrollbox1.Height) then Image1.Top := Image1.Top + (Y - StartY); if (Y MoveY) and (Image1.Top then Image1.Top := Image1.Top + (Y - StartY); MoveX := X; MoveY := Y; end; end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var tr1, tr2: TRect; begin if Button = mbLeft then begin IsMoved := False; Scrollbox1.DoubleBuffered := False; end; end;