Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Drag&Drop einer TImage-Komponente (https://www.delphipraxis.net/21660-drag-drop-einer-timage-komponente.html)

semo 6. Mai 2004 09:23


Drag&Drop einer TImage-Komponente
 
ich habe ein panel mit einer image-kompnente draufliegen. die image-kompo soll per drag und drop auf eine danebenliegende paintbox gelegt werden (ich muss also auch irgendwie den parent ändern??!!!)


in dieses image lade ich ein bitmap:

Code:
procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
  // Bitmap aus Datei in das Image laden und die Höhe und Breite des Image anpassen
  ImageVorschau.Picture.Bitmap.LoadFromFile(ListBox1.Items[ListBox1.ItemIndex]);
  ImageVorschau.Width := ImageVorschau.Picture.Width;
  ImageVorschau.Height := ImageVorschau.Picture.Height;

  // Image1 mittig auf dem Panel1 positionieren
  // x-Position
  if ImageVorschau.Width < PanelVorschau.Width then
    ImageVorschau.Left := Round(PanelVorschau.Width / 2 - ImageVorschau.Width / 2)
  else
    ImageVorschau.Left := 1;

  // y-Position 1. mittig positionieren oder 2. am oberen Rand
  if ImageVorschau.Height < PanelVorschau.Height then
    ImageVorschau.Top := Round(PanelVorschau.Height / 2 - ImageVorschau.Height / 2)
  else
    ImageVorschau.Top := 1;
end;
meine jetzige DragOver-procdure malt nur das Bitmap aus dem Image auf die PaintBox,
ich möchte aber das komplette Image daraufziehen (habe es wie in den geschweiften klammern mal versucht)
.

Code:
procedure TForm1.PaintBoxMenueflaecheDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if (Source is TImage) and (Sender is TPaintBox) then
  begin
    {
    TImage(Source).Parent.Create(PaintBoxMenueflaeche);
    TImage(Source).Left := X;
    TImage(Source).Top := Y;
    }
    PaintBoxMenueflaeche.Canvas.Draw(X,Y,TImage(Source).Picture.Bitmap);
  end;
end;
wie kann ich das komplette image rüberziehen???

semo 6. Mai 2004 09:39

Re: Drag&Drop einer TImage-Komponente
 
habe es gefunden: die paintbox kann ich ja nun weglassen, und die imagekomponente auf die drunterliegende scrollbox packen:

Code:
procedure TForm1.ScrollBox1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin
  if (Source is TImage) and (Sender is TScrollBox) then
  begin
    RemoveControl(TImage(Source));
    ScrollBox1.InsertControl(TImage(Source));
    //TImage(Source).Parent.Create(ScrollBox1);
    TImage(Source).Left := X;
    TImage(Source).Top := Y;

    //PaintBoxMenueflaeche.Canvas.Draw(X,Y,TImage(Source).Picture.Bitmap);
  end;
end;
mfg marcus

semo 10. Mai 2004 12:28

Re: Drag&Drop einer TImage-Komponente
 
so richtig scheint das doch nicht zu funktionieren....

ich frage die im formualar und im panel enthaltenen komponenten ab und bekomme sowohl vor wie auch nach dem drag&drop die meldung dass das image als parent das panel hat...

Code:
for i:=0 to ComponentCount-1 do
    Memo1.Lines.Add(Components[i].Name);

  for i:=0 to PanelVorschau.ComponentCount-1 do
    Memo2.Lines.Add(PanelVorschau.Components[i].Name);


wie kann ich nach dem drag&rop dem image das neue parent zuweisen?

F.W. 1. Aug 2004 21:23

Re: Drag&Drop einer TImage-Komponente
 
Hallöle! Bin gerade beim Suchen hierüber gestolpert...

Wenn ich dich richtig verstanden habe gibt es auf deinem Formular ein Image, eine ScrollBox, (bis jetzt noch??)eine PaintBox und das Panel, auf dem das Image liegt.

Wenn du das image vom Panel auf die PaintBox drauflegen willst, musst du das manuell machen:
Delphi-Quellcode:
{Das DragOver nicht vergessen! Sonst wird's nicht akzeptiert!}
 Accept := (Source is TImage);

(*********Das DragDrop für die PaintBox*************)
 if not Source is TImage then Exit;

{Das Image vom Panel lösen und auf die übergeordnete Komponente der PaintBox legen}
 TImage(Source).Parent := TPaintBox(Sender).Parent;
{Die manuelle Anpassung der Position}
 TImage(Source).Left := TPaintBox(Sender).Left;
 TImage(Source).Top := TPaintBox(Sender).Top;
{ggf. soll die größe des Images auf die der PaintBox zugeschnitten werden}
 TImage(Source).Width := TPaintBox(Sender).Width;
 TImage(Source).Height := TPaintBox(Sender).Height;

(*********Wenn dus auf die ScrollBox ziehen willst*************)
 if not Source is TImage then Exit;

{Das Image vom Panel lösen und auf die ScollBox legen}
 TImage(Source).Parent := ScrollBox1;
{Die manuelle Anpassung der Position}
 TImage(Source).Left := X;
 TImage(Source).Top := Y;
        {...}
Hoffe es hilft dir noch! :wink:

semo 1. Aug 2004 21:30

Re: Drag&Drop einer TImage-Komponente
 
habe es mittlerweile mit ner extra drag und drop unit gemacht,
wo ich das dragDropObjekt beerbe.....

aber trotzdem danke

mfg marcus

F.W. 2. Aug 2004 10:15

Re: Drag&Drop einer TImage-Komponente
 
Ok! :thuimb:


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