Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Drag & Drop von Image zu Image (nicht über D&D-Funktion!) (https://www.delphipraxis.net/15692-drag-drop-von-image-zu-image-nicht-ueber-d-d-funktion.html)

Daether 2. Feb 2004 18:24


Drag & Drop von Image zu Image (nicht über D&D-Funkt
 
Hi,
ich möchte ein Bild aus einem Image per Drag&Drop in ein anderes ziehen können. Dabei weiß ich das es eine Funktion von Delphi gibt, welche ich aber nicht benutzen will.
Ich möchte gerne:
Das Bild soll wenn möglich immer am Mauszeiger sein ^^.
Soll dann von einem Image in ein anderes gelegt werden.
Wenn das Bild aus Image 1 zu Image 2 gebracht wurde, soll sich das Bild in Image 1 ändern. Hoffe ihr versteht was ich meine, vielleicht kann mir das mal jemand erklären wie das genuaer gehen soll.
Ich habe irgendwie keinen Plan wie ich weitermachen soll, Kann mir niemand weiterhelfen?

Das hier ist mal ein Auszugs des Anfangs:
Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
KoX:=Mouse.CursorPos.X;
Label1.Caption:=inttostr(KoX);
KoY:=Mouse.CursorPos.Y;
Label2.Caption:=inttostr(KoY);
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
KoX:=Mouse.CursorPos.X;
KoY:=Mouse.CursorPos.Y;
image1.Left:=KoY;
end;

LuckySpacy 3. Feb 2004 10:28

Re: Drag & Drop von Image zu Image (nicht über D&D-F
 
Also, wie das Bild am Mauszeiger kleiben bleibt, das weiß ich leider nicht.
Ich verstehe auch nicht, warum du die Drag & Drop Funktion nicht nutzen willst.
Dafür ist sie doch da.

Ich habe da zwei Beispiele. Eins mit Drag & Drop und eins ohne.
Das Image2 ist auf das Image1 zu ziehen.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Image2.DragMode := dmAutomatic;
end;


procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if Source is TImage then
    Accept := true;
end;

procedure TForm1.Image1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if Source is TImage then
  begin
    TImage(Sender).Picture.Icon.Assign(TImage(Source).Picture.Icon);
  end;
end;
Zweites Beispiel:

Delphi-Quellcode:
  .....
  private
    FDragImage: TImage;
  public
  end;

procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FDragImage := TImage(Sender); // Image merken
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if FDragImage <> nil then
  begin
    TImage(Sender).Picture.Icon.Assign(FDragImage.Picture.Icon); // gemerktes Image ablegen
    FDragImage := nil;
  end;
end;
Hier gibt es noch eine Schwierigkeit.
Sollte das gemerkte Image nicht gedroppt werden, dann muss es wieder mit nil besetzt werden.

Mein Beispiel ist also so einfach nicht anzuwenden.
Ich hoffe aber, es gibt dir vielleicht neue Ideen.

Chef16 3. Feb 2004 11:16

Re: Drag & Drop von Image zu Image (nicht über D&D-F
 
Hi,

Du kannst Z.b. auf ein Klick auf einer Image Komponente das Bitmap einer Variable übergeben:

Delphi-Quellcode:
Var Bitmap: TBitmap
Dann einfach bei OnMouseMove von der Image Komponente per TCanvas.Draw() aufs Formular Zeichen dabei immer vorher Refresh; aufrufen. Dann bei Image "OnMouseUp" prüfen ob du über die anderer Image Komponente bist. Wenn ja, dann das Bitmap an der Image Komponente übergeben. Und ebenfals nochmal Refresh; aufrufen.

MFG
Sven!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:51 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