Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Bild nachträglich auf einem Canvas verschieben

  Alt 10. Jun 2006, 18:31
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!
  Mit Zitat antworten Zitat