Wie willst Du scollen?
Mit einem "Hand"-Cursor verschieben, über "Buttons" oder gemalte Scollbars?
Letztlich musst Du die Events die Dich interessieren versorgen, in o.g. Beispiel reichst Du Eventhandler nach außen um von dort weiterzumachen.
Du kannst auch alles in Deiner Komponente abfackeln und dort entweder im OnPaint bei allen Malroutinen ein FStartX , FStartY aufzuadieren(oder abzuziehen) oder Du lässt die Routinen wie sie sind und manipulierst das Canvas direkt, hat den Vorteil daß Du Zoom und Rotation auch gleich mit anbieten kannst.
Der Anhang zeigt wie das gehen könnte
Delphi-Quellcode:
Procedure ResetCanvas(ACanvas:TCanvas);
begin
SetCanvasZoomAndRotation(ACanvas , 1, 0, 0,0);
end;
Procedure SetCanvasZoomAndRotation(ACanvas:TCanvas;Zoom:Double;Angle:Double;CenterpointX,CenterpointY:Double);
var
form : tagXFORM;
Winkel:Double;
begin
Winkel := Grad2Rad(Angle);
SetGraphicsMode(ACanvas.Handle, GM_ADVANCED);
SetMapMode(ACanvas.Handle,MM_ANISOTROPIC);
form.eM11 := Zoom * cos( Winkel);
form.eM12 := Zoom *Sin( Winkel) ;
form.eM21 := Zoom * (-sin( Winkel));
form.eM22 := Zoom * cos( Winkel) ;
form.eDx := CenterpointX;
form.eDy := CenterpointY;
SetWorldTransform(ACanvas.Handle,form);
end;