![]() |
Drag'n Drop aus beliebigen anderen Formular
Hallo
ich versuche mich gerade an Drag'n Drop, welches, durch die die Suche in diesem Forum, soweit auch schon im Groben funktioniert. Jetzt möchte ich aber aus einem anderen beliebigen Formular "ziehen" und im Hauptformular "ablegen". Ich habe Form1 und Form2, jeweils mit einer ListBox. Aus Form2.ListBox1 kann ich ein Item auf Form1.ListBox1 verschieben. Jetzt möchte ich aber nicht nur von Form2.ListBox1 nach Form1.ListBox1 ziehen sondern aus einer x-beliebigen Form.ListBox nach Form1.ListBox. Dabei klemmt es bei mir mit der Schreibweise, wie ich der DragDropRoutine der Form1 verkünde, woher, also von welcher Form/ListBox, das Item kommt. Hier mein Ansatz, mit der 'statischen' Einbindung von Form1/Form2-ListBox.
Delphi-Quellcode:
Hm, aus der 'Source' kann ich erkennen von welchen Objekt das Drag ausging ...
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); begin if Source is TListBox then Accept := True; else Accept := False end; procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer); begin ListBox1.Items.Add(Form2.ListBox1.Items[Form2.ListBox1.itemindex]); Form2.ListBox1.Items.Delete(Form2.ListBox1.itemindex); end; Woher weis ich aber von welchen Formular? Sender? :gruebel: Hat jemand eine Idee? Danke und Gruß, MJ |
Re: Drag'n Drop aus beliebigen anderen Formular
Hallo Maja Jessica,
in der Unit Forms gibt es - zumindest bei Delphi 6 - die Funktion ![]() Beim DragDrop-Ereignis gibt Sender den Auslöser der Nachricht an (in deinem Fall die empfangende Listbox). In Source steht der Ursprung der Daten (in deinem Fall die Listbox mit den Quelldaten). Gruß Hawkeye |
Re: Drag'n Drop aus beliebigen anderen Formular
Aha.
GetParentForm gibt es auch schon unter Delphi4 :) Funktioniert auch, testweise mit
Delphi-Quellcode:
Nur bringt es mich nicht wirklich weiter, weil, wenn ich es in Form1 anwende, logischweise immer Form1 als Parent der ListBox1 liefert.
ShowMessage(GetParentForm(ListBox1).Caption);
Ob ich den Umweg über "welche Form ist gerade aktiv" gehen muss? :roteyes: *grübel* Danke für die Hilfe MJ |
Re: Drag'n Drop aus beliebigen anderen Formular
Eigentlich solltest du mit Sender und Source Zugang zu allen Informationen haben:
Delphi-Quellcode:
Gruß Hawkeye
procedure TForm1.ListBox1DragDrop (Sender, Source: TObject; X, Y: Integer);
var SourceBox, TargetBox : TListBox; begin if ((Sender is TListBox) and (Source is TListBox)) then begin SourceBox := TListBox(Source); // da kommen die Daten her TargetBox := TListBox(Sender); // da sollen sie hin ShowMessage('Source: ' + SourceBox.Name + ', Form: ' + GetParentForm(SourceBox).Caption + #13#10 + 'Target: ' + TargetBox.Name + ', Form: ' + GetParentForm(TargetBox).Caption); end; end; |
Re: Drag'n Drop aus beliebigen anderen Formular
Hi
Ja Prima, klappt wunderhübsch :hello:
Delphi-Quellcode:
So der grobe Ansatz (frei kopiert und angepasst), natürlich fehlen noch diverse Prüfungen etc.
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var SourceBox, TargetBox : TListBox; begin if ((Sender is TListBox) and (Source is TListBox)) then begin SourceBox := TListBox(Source); // da kommen die Daten her TargetBox := TListBox(Sender); // da sollen sie hin TargetBox.Items.Add(SourceBox.Items[SourceBox.ItemIndex]); SourceBox.Items.Delete(SourceBox.ItemIndex); end; end; Und ich hatte mich in den Gedanken verrannt ich müsse die Quellform und die ListBox auf der Quellform beide über ihre Namen ansprechen. :wall: Auf den einfacheren Weg, SourceBox := TListBox(Source), der alle benötigten Informationen mitliefert, bin ich natürlich nicht gekommen. :pale: Herzlichen Dank nochmal! MJ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 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-2025 by Thomas Breitkreuz