HSG

Aktuelle Seite: HSG/Fächer/Informatik/Material

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