Drag'n Drop - Grundprinzip
  | 
Drag'n Drop wird z.B. durch ein Zusammenspiel der drei Maus-Ereignisse MouseDown, MouseMove
und MouseUp erreicht. Bei MouseDown wird die Mausposition in (xa/ya) gespeichert und ein
"Schalter" gedrueckt gesetzt. MouseMove wird nun ausgelöst, wenn sich die Maus ein
wenig bewegt hat. Falls der Schalter gedrueckt noch wahr ist, wird die Differenz der
Positionen berechnet und eine entsprechende Reaktion durchgeführt (z.B. alles löschen und
am neuen Ort neu zeichnen). Das wiederholt sich bei jedem MouseMove-Ereignis, solange der
Schalter gedrueckt wahr ist. Der Schalter wird schließlich durch das Loslassen
der Maustaste auf false gestellt. | 
Eine mögliche Realisierung zeigt folgender Quelltext-Auszug:
 
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  gedrueckt := true;
  xa := x; ya := y;                          // Mauskoordinaten merken
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  gedrueckt := false;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  i,dx,dy : integer;
begin
  if gedrueckt then
  begin
    dx := x-xa; dy := y-ya;                  // Differenzen bestimmen
    xa := x; ya := y;                        // Mauskoordinaten merken
    for i := 0 to Length(P)-1 do             // neue Polygon-Koordinaten bestimmen
    begin
      P[i].X := P[i].X + dx;
      P[i].Y := P[i].Y + dy;
    end;
    canvas.FillRect(Rect(0,0,width,height)); // Zeichenbereich löschen
    alteFarbe := canvas.Brush.Color;         // Farbe merken
    canvas.Brush.Color := clRed;             // Polygon-Füll-Farbe setzen
    canvas.Polygon(P);                       // Polygon zeichen
    canvas.Brush.Color := alteFarbe;         // alte Farbe restaurieren
  end;
end;
 | 
DragnDrop.zip