Drag&Drop pomiedzy panelami.

0

Witam wszystkich, dawno mnie tutaj nie było ;)

Chciałem zapytać o o to jak zrobić Drag&Drop TImage pomiędzy dwoma TPanel.
Jeśli ktoś może mnie pokierować jak w ogóle zrobić taki D&D, bo probowalem w zdarzeniu OnDragDrop drugiego panelu użyc takiego kodu:

  if Sender is TImage then
  begin
    Image:=TImage.Create(Panel2);
    Image.Left:=X;
    Image.Top:=Y;
    Image.Picture:=TImage(Sender).Picture;
    Image.AutoSize:=true;
  end;

Ale to chyba nie za dobrze napisałem, bo nie działa. Druga sprawa to chciałbym jeszcze zrobić to tak, żeby podczas przeciągania obrazek przeciągany stał w miejscu a przy kursorze pojawiał się jakiś dodatkowy (to jeszcze umiem zrobić) który będzie ponad panelami (tego już nie :) ).

Mam nadzieję, że wiecie o co chodzi.
Z góry dzięki za odpowiedź ;)

0

Ustalasz dla każdego TImage takie ustawienia:
DragMode := dmAutomatic;

Następnie dla każdego TImage:

procedure TForm1.Image1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
 TImage(Sender as TImage).Picture.Assign(TImage(Source as TImage).Picture);
end;

procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
 Accept := Source <> Sender;
end;
0

@Opi
Tyle, że ja chce upuścić TImage na TPanel, a nie na TImage. Na tym panelu chciałem dynamicznie stworzyć TImage do którego będa przesyłane dane z tego przeciąganego komponentu TImage ;)

Na razie zrobiłem to tak:

procedure TForm1.Panel2DragDrop(Sender, Source: TObject; X, Y: Integer);
var Image:TImage;
begin
    Image:=TImage.Create(Panel2);
    Image.Left:=X;
    Image.Top:=Y;
    Image.Picture.Assign(TImage(Source as TImage).Picture);
    Image.AutoSize:=true;
end;

Ale po upuszczeniu nic sie nie dzieje. Może ktoś mi wytłumaczyć co robie źle?


EDIT:
Dodałem na końcu jeszcze linijke

ShowMessage(IntToStr(Panel2.ComponentCount));

I za kazdym razem jak upuszcze komponent to licznik sie zwieksza, ale obrazka nie widac. Ktoś wie o co chodzi?

0

Udało mi się coś z tym zrobić jednak. Rozwiązanie jest proste, wystarczyło dodać ta linijkę do funkcji Panel2DragDrop

Image.Parent:=Panel2;

i cały kod tego wygląda wtedy tak:

procedure TForm1.Panel2DragDrop(Sender, Source: TObject; X, Y: Integer);
var Image:TImage;
begin
    Image:=TImage.Create(Panel2);
    Image.Left:=X;
    Image.Top:=Y;
    Image.Picture.Assign(TImage(Source as TImage).Picture);
    Image.AutoSize:=true;
    Image.Parent:=Panel2;
end;

Ale jest jeszcze jeden problem. Jak zrobić żeby przy przeciąganiu tworzył się obrazek który będzie się pojawiał zamiast kursora i będzie ponad panelami i wszystkimi innymi komponentami? Czy da się coś takiego zrobić? Bo sam kursor, który się pojawia przy przeciąganiu trochę pusto wygląda.

Z góry dziękuje za odpowiedź!

1 użytkowników online, w tym zalogowanych: 0, gości: 1