Drag & Drop [ gelöst ]

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Drag & Drop [ gelöst ]

Beitrag von corpsman »

Guten Morgen ,

Die Suchfunktion und Google haben mir leider nicht helfen können, also seid nun ihr dran.

Ich bastle mir gerade eine kleine Anwendung in der ich Dateien, laden möchte. Wie man eine Datei laden kann weis ich. Das Problem ist das ich das Drag and Drop nicht hinbekomme.

Also ich will sozusagen, das ich im Dolphin, oder vom Desktop aus, eine oder mehrere Dateien anklicke und dann mit Drag and Drop auf meine Anwendung ziehe und diese dann loslasse. Unter Windows und Delphi erhielt man da eine Liste der Dateinamen, aber wie geht das unter Lazarus, bzw Linux ?

Am Besten wäre natürlich eine Plattformunabhängige Lösung, eine die nur unter Linux funktioniert, würde mir allerdings auch schon genügen ;).
Zuletzt geändert von corpsman am Sa 19. Sep 2009, 09:25, insgesamt 1-mal geändert.
--
Just try it

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Drag & Drop ...

Beitrag von theo »

Jedes Formular hat die Eigeschaft "AllowDropFiles" und das Ereignis "OnDropFiles"

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Drag & Drop ...

Beitrag von corpsman »

lol, wenn doch nur alles so einfach wäre.


Also das geht, aber nun wirds speziell..

Auf meiner Form hat es 2 Listviews, und ich würde ganz gerne rausbekommen auf welcher der beiden die Files gedroppt wurden. Gibts da auch noch nen tollen Trick ?
--
Just try it

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Drag & Drop ...

Beitrag von theo »

Weiss ich doch auch nicht auswendig. Bisschen tüfteln.
Das könnte klappen:

Code: Alles auswählen

procedure TForm1.FormDropFiles(Sender: TObject; const FileNames: array of String);
begin
  Caption:=FindControlAtPosition(Mouse.CursorPos,true).Name;
end;

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Drag & Drop ...

Beitrag von corpsman »

Theo du bist ein Goldjunge..

FindControlAtPosition kannte ich noch nicht, mein Ansatz wäre gewesen die Maus pos zu hohlen, und dann "Von" hand zu schauen über welcher Komponente diese liegt, aber so ist das natürlich der 1a weg.

Vielen Dank für Deine Hilfe.
--
Just try it

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Drag & Drop [ gelöst ]

Beitrag von Scotty »

Wieso benutzt du nicht OnDragDrop des Listviews?

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Drag & Drop [ gelöst ]

Beitrag von corpsman »

so wie ich das Tutorial von Hier verstanden habe, gillt das nur für Objecte die auf der Form sind.
--
Just try it

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Drag & Drop [ gelöst ]

Beitrag von Scotty »

Ich verstehe nicht, welches Objekt nicht auf dem Formular sein sollte. Aber selbst wenn dem so wäre, würde irgendwo - zumindest beim Formular selbst - ein Drop-Ereignis ausgelöst werden, das ein internes Verschieben des Drop-Inhaltes zulässt. BTW: Wenn du nur auf das Ende des Drag 'n Drop-Vorgangs reagierst, wird der Benutzer vorher wahrscheinlich nicht darüber informiert, ob seine Aktion erfolgreich sein könnte (Cursor=crDrag, crNoDrop). Das wäre schlecht.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Drag & Drop [ gelöst ]

Beitrag von theo »

@Scotty: Das Problem ist ja gelöst. Er handelt sich um File-Dropping, also Dateien vom Explorer / Konqueror / Dolphin in die Anw. zu zîehen.
Mit Lazarus Internem Drag Drop hat das nicht viel zu tun.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Drag & Drop [ gelöst ]

Beitrag von pluto »

Mit Lazarus Internem Drag Drop hat das nicht viel zu tun.

Ich sehe das genau so wie "Scotty", eigentlich sollten die vor gesehenen Events der jeweiligen Komponenten ausgelöst werden, wenn eine DD Event eingetreten ist. Ob das nun von einer Komponente aus geht spielt dabei keine große rolle. Das Form ist ja auch "nur" eine Komponente. Wusste nicht das das unterschieden wird. Ich dachte Draq und Drop ist das selbe ob das nun Dateien sind die von außen auf die Anwendung gezogen wird, oder ob das nun Einträge sind, die in einer LisBox oder ListView verschoben wird.
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Drag & Drop [ gelöst ]

Beitrag von theo »

pluto hat geschrieben:Ich dachte Draq und Drop ist das selbe ob das nun Dateien sind die von außen auf die Anwendung gezogen wird, oder ob das nun Einträge sind, die in einer LisBox oder ListView verschoben wird.


Wozu gäbe es denn dann das Property "AllowDropFiles" und das Event "OnDropFiles" ?

Antworten