![]() |
||
| Material |
OOP
Grundlagen
Delphi
Software-Technik
Bonsai
Digitaltechnik
Ereignisse
Grafik
UML
Netze
Fischertechnik
Tipps
Werkzeuge
Literatur
Automaten
Sprachen
Datenbanken
XML
Prolog
Berechenbarkeit
|
|
|
Tangram |
![]() |
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. |
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;
|