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