unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, AdvPicture, AdvScrollBox, StdCtrls;
type
TForm1 = class(TForm)
scrollbox: TAdvScrollBox;
pic: TAdvPicture;
Button1: TButton;
procedure picMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure picMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure picMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1Click(Sender: TObject);
procedure scrollboxMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure scrollboxMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure scrollboxMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
FMouseAnchor : TPoint;
FPanning : Boolean;
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
scrollbox.VertScrollBar.Visible:=false;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
procedure TForm1.picMouseDown(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.picMouseMove(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.picMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FPanning := False;
end;
procedure TForm1.scrollboxMouseDown(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.scrollboxMouseMove(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.scrollboxMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FPanning := False;
end;
end.