AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bild nachträglich auf einem Canvas verschieben
Thema durchsuchen
Ansicht
Themen-Optionen

Bild nachträglich auf einem Canvas verschieben

Ein Thema von Xyres · begonnen am 9. Jun 2006 · letzter Beitrag vom 12. Jun 2006
Antwort Antwort
Xyres

Registriert seit: 9. Jun 2006
15 Beiträge
 
#1

Bild nachträglich auf einem Canvas verschieben

  Alt 9. Jun 2006, 15:25
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Bild nachträglich auf einem Canvas verschieben

  Alt 9. Jun 2006, 15:35
Zitat von Xyres:
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 ?
Das ist so nicht möglich. Wenn du einen Stempel auf ein Blatt Papier drückst, kannst du das Abbild
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
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Bild nachträglich auf einem Canvas verschieben

  Alt 9. Jun 2006, 15:44
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.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Xyres

Registriert seit: 9. Jun 2006
15 Beiträge
 
#4

Re: Bild nachträglich auf einem Canvas verschieben

  Alt 9. Jun 2006, 15:52
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
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: Bild nachträglich auf einem Canvas verschieben

  Alt 9. Jun 2006, 15:58
Zitat:
gibt es denn dann eine möglichkeit ein eingefügtes bild wie ein objekt zu behandeln.
Genau das habe ich gepostet. Gut, heir das ganze Projekt als Anhang.
Angehängte Dateien
Dateityp: zip picturemovement_with_mouse_222.zip (2,4 KB, 58x aufgerufen)
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Xyres

Registriert seit: 9. Jun 2006
15 Beiträge
 
#6

Re: Bild nachträglich auf einem Canvas verschieben

  Alt 10. Jun 2006, 16:41
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
  Mit Zitat antworten Zitat
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, 17: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
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: Bild nachträglich auf einem Canvas verschieben

  Alt 11. Jun 2006, 09:04
Siehe http://www.dsdt.info/tutorials/tlisttut/
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Xyres

Registriert seit: 9. Jun 2006
15 Beiträge
 
#9

Re: Bild nachträglich auf einem Canvas verschieben

  Alt 11. Jun 2006, 10:57
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
  Mit Zitat antworten Zitat
Luzzifus

Registriert seit: 11. Jun 2006
14 Beiträge
 
Delphi 6 Professional
 
#10

Re: Bild nachträglich auf einem Canvas verschieben

  Alt 12. Jun 2006, 18:01
Oder du nimmst Graphics32.
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz