unit Redpoint;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 =
class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private-Deklarationen }
Moving: Boolean;
// <- hier
LastX, LastY: Integer;
// <- und hier
public
{ Public-Deklarationen }
end;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
// Zeichenfarbe (Pinsel) auf rot setzen
self.Image1.Canvas.Brush.Color := clRed;
// Kreis zeichnen
self.Image1.Canvas.Ellipse(0, 0, self.Width, self.Height);
// DoubleBuffer aktivieren (verhindert flackern)
self.DoubleBuffered := true;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// prüfen ob die linke Maustaste gedrückt wurde
if ssLeft
in Shift
then
begin
// aktuelle Mausposition merken
self.lastX := Mouse.CursorPos.X;
self.lastY := Mouse.CursorPos.Y;
// Modus wechseln
self.moving := True;
end;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
// wenn Modus moving aktiv
if self.moving
then
begin
// Position des Fensters relativ zu Mauskoordinaten ändern
self.Left := self.Left + (Mouse.CursorPos.X - lastX);
self.Top := self.Top + (Mouse.CursorPos.Y - lastY);
// Merken der neuen Position
self.lastX := Mouse.CursorPos.X;
self.lastY := Mouse.CursorPos.Y;
end;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// Wenn Linke Maustaste losgelassen wurde
if Button = mbLeft
then
begin
// Modus moving verlassen
self.moving := false;
end;
end;
end.