Hallo,
so schwierig ist das gar nicht:
Delphi-Quellcode:
type
TForm1 = class(TForm)
:
private
FMouseAnchor : TPoint;
FPanning : Boolean;
end;
procedure TForm1.ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FMouseAnchor := Mouse.CursorPos; // absolute Position des Mauszeigers merken
FPanning := True; // Verschieben wurde eingeleitet
end;
procedure TForm1.ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
CursorPos : TPoint;
dx, dy : Integer;
begin
if (not FPanning) then Exit; // Inhalt der Scrollbox nur bei gedrückter Maustaste bewegen
CursorPos := Mouse.CursorPos;
dx := CursorPos.X - FMouseAnchor.X; // Verschiebung in x-Richtung
dy := CursorPos.Y - FMouseAnchor.Y; // Verschiebung in y-Richtung
// horizontale/vertikale Scrollbar aktualisieren
ScrollBox.HorzScrollBar.Position := ScrollBox.HorzScrollBar.Position - dx;
ScrollBox.VertScrollBar.Position := ScrollBox.VertScrollBar.Position - dy;
// "Schmieren" des Bildes vermeiden
ScrollBox.Repaint;
// absolute Position des Mauszeigers für nächsten Vergleich merken
FMouseAnchor := CursorPos;
end;
procedure TForm1.ImageMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// Verschieben ist beendet
FPanning := False;
end;
Gruß Hawkeye