Dazu müsstest du eine Liste programmieren, die Bitmaps und deren Positionen beinhaltet. dann schreibst du dir eine Methode, mit der du diese Bilder nacheinander auf das Canvas zeichnest. Ich habe neulich an so etwas gearbeitet, und dann im MouseDown-ereignis eines TImage die Koordinaten der Maus ausgewertet und mit den Koordinaten der Bilder in der Liste verglichen. Wenn die Mauskoordinaten zutreffen, wird der index der for-Schleifen-Variable in einer variable abgespeichert. Im MouseMove-Ereignis wird dann das Bild mit diesem Index verschoben, und anschließend wird alles neu gezeichnet.
Hier ist ein teil des Codes: (vereinfacht und Verallgemeinert)
OnMouseDown:
Delphi-Quellcode:
pressed := false; //Zur Sicherheit: es kann ja auch sein, dass man ins "leere" klickt, dann wird das MosueMove-Ereignis nicht ausgeführt
for i := 0 to BilderListe.Count-1 do
begin
if (X > Bilderliste[i].x) and (X < Bilderliste[i].x+Bilderliste[i].width) and
(X > Bilderliste[i].y) and (y < Bilderliste[i].y+Bilderliste[i].height) then //Wenn Cursor- Position im Bereich des Bildes
begin
BildIndex := i;
pressed := true; //Wenn Objekt gefunden, dann darf MouseMove auch ruhig ausgeführt werden
break; //Es muss nicht mehr gesucht werden, denn ein Objekt wurde gefunden
end;
end;
startpoint := point(x-Bilderliste[BildIndex].x, y-Bilderliste[BildIndex].y); //Anfangskoordinaten merken
OnMouseMove:
Delphi-Quellcode:
Bilderliste[Bildindex].x := X-startpoint.x; //X-Koordinate des Bildes ändern
Bilderliste[BildIndex].y := y-startpoint.y; //Y-Koordinate des bildes ändern
draw; //Oder wie die Zeichen-Methode halt heißt
Ich hoffe, das stimmt so auch!