![]() |
Bild nachträglich auf einem Canvas verschieben
Hi,
meine Frage lautet wie folgt: Ich füge eime *.bmp Datei per Draw-Befehl in ein Canvas ein. Jetzt suche ich eine möglichkeit wie ich dieses Bild nachträglich verschieben kann. Ich denke mir das es beim anklicken aktiviert wird und man es dann verschieben kann. IST DIES ÜBERHAUPT möglich wenn ja wie ? MfG Xyres |
Re: Bild nachträglich auf einem Canvas verschieben
Zitat:
auch nicht mehr verschieben. Du kannst allerdings: 1.) auf der alten Position ein weisses Recheck zeichnen, dass genau so gross ist wie dein Bitmap 2.) das Bitmap mit Draw() an der neuen Position zeichnen Oder auch: 1.) vor dem Draw() die Fläche, die überschrieben wird in ein temporäres Bitmap sichern 2.) dein Bild mit Draw() zeichnen 3.) auf der alten Position das temp. Bitmap zeichnen (statt weissem Rechteck) 4.) wie 1.) 5.) das Bitmap mit Draw() an der neuen Position zeichnen |
Re: Bild nachträglich auf einem Canvas verschieben
Ein leeres Formular, 1 Panel darauf, 1 Image auf PANEL, Image.Align = alClient in OI stellen.
Events zuweisen, in OnCreate Event des Formulars ein Bild laden(Image1.Picture.LoadFromFile('filenname.ext') ) und das wars. EDIT: Image.AutoSize = False; Image.Strech = True;
Delphi-Quellcode:
type
TForm1 = class(TForm) Panel1: TPanel; Image1: TImage; procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } movement: integer; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Sender is TWinControl) then begin ReleaseCapture; //Fängt alle Mausereignisse ab TWinControl(Sender).Perform(WM_SysCommand, movement, 0); end; end; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Panel1mousedown(panel1, button, shift, x, y); end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin panel1mousemove(panel1, shift, x, y); end; procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin movement := $F012; panel1.Cursor := crArrow; if x < 6 then begin Panel1.Cursor := crSizeWE; Movement := $F001; if y < 6 then begin Movement := $F004; panel1.Cursor := crSizeNWSE; end else if y > panel1.Height - 6 then begin movement := $F007; panel1.Cursor := crSizeNESW; end; end else if x > panel1.Width - 6 then begin panel1.Cursor := crSizeWE; movement := $F002; if y < 6 then begin movement := $F005; panel1.Cursor := crSizeNESW; end else if y > panel1.Height - 6 then begin movement := $F008; panel1.Cursor := crSizeNWSE; end; end else if y < 6 then begin movement := $F003; panel1.Cursor := crSizeNS; end else if y > panel1.Height - 6 then begin movement := $F006; panel1.Cursor := crSizeNS; end; end; end. |
Re: Bild nachträglich auf einem Canvas verschieben
hmmm... gibt es denn dann eine möglichkeit ein eingefügtes bild wie ein objekt zu behandeln. und es dann irgendwie mit der maus zu verschieben, ich muss zugeben ich hab davon noch nich so wirklich die ahnung bin mich gerade am einarbeiten in die ganze materie. bin für jeden denkansatz dankbar
@ sniper_w sorry nix raff muss ich mir erst mal gaaanz in ruhe anschauen und dann hoffe ich das ich das kapier |
Re: Bild nachträglich auf einem Canvas verschieben
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: Bild nachträglich auf einem Canvas verschieben
danke für das projekt darunter kann ich mir jetzt was vorstellen nur leider ist das auch nich die lösung meins problems scheint wohl etwas komplizierter. denn man soll x belibige bilder verschieben können auf die innerhalb eines canvas eingefügt wurden wie bei photoshop z.B.. Aber vielen dank sniper_w das du mir deinen code zur verfügung gestellt hast.
Ich werd mal weiter suchen MfG Xyres |
Re: Bild nachträglich auf einem Canvas verschieben
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:
OnMouseMove:
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
Delphi-Quellcode:
Ich hoffe, das stimmt so auch!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 |
Re: Bild nachträglich auf einem Canvas verschieben
|
Re: Bild nachträglich auf einem Canvas verschieben
vielen dank für eure bemühungen ich werde mir das tut und deinen code mal zu herzen nehemen und hoffe, dass ich es dann hinbekommen.
MfG Xyres |
Re: Bild nachträglich auf einem Canvas verschieben
Oder du nimmst
![]() Damit kannst du jedes Bild in einen Layer einer Image32- oder ImageView32-Komponente laden und diese auf recht einfache Art wie Objekte behandeln, also verschieben, einfügen, löschen etc. Kein Wunder, denn die Layer selbst sind Objekte. ^^ Beispiel-Codes sind auch dabei. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz