Moin,
wie macht man am Besten Drag&Drop, innerhalb von einer Delphi-Komponente und von, sowie nach Außen?
(aktuell noch kompatibel zu Delphi XE, aber auch schon Delphi 11 und notalls muß es nicht mehr kompatibel sein ...
sooo eilig ist es jetzt noch nicht)
Innerhalb von Delphi-Komponenten nutzt Delphi ja seinen eigenen Mist (TDragObject mit OnStartDrag/OnDragDrop).
-> Das wurde/wird hier seit Jahrzehnten genutzt, um Items (Dokumente) im einem Tree zu verschieben.
Dann wollte jemand Drag&Drop von außen (Explorer, Outlook Express und Thunderbird), also auf WM_DROPFILES reagiert.
-> Funktionierte problemlos.
Danach kam dann MSOffice-Outlook dazu, wo WM_DROPFILES nur bedingt geht,
also auf IDropTarget umgebaut ... das Selbsmachen nach 'ner Weile aufgegeben und aktuell DropMaster verwendet.
-> Ging auch.
Dann ging es los und jemand wollte Dokumente nicht nur rein, sondern auch raus.
-> Nur ging das nicht gleichzeitig, also
entweder im Delphi gestartet
oder nach außen.
-> Da das
alte Umsortieren weiter funktionieren mußte, starte ich das Externe im OnMouseDown eines Buttons (Dokument im Baum auswählen und dann danaben einen "Button" nehmen und rausziehen).
Nur langsam (nach über 5 Jahren) fangen neue Kunden nun an rumzumosern, dass es ihnen so nicht wirklich gefällt, bzw. sie es nicht verstehen.
Delphi selber bietet natürlich nichts (außer der Drop-Komponente im FMX, was so in der
VCL eh keine Lösung wäre, bzw. sie wäre ja genauso wie jetzt, mit dem Button, nur mit größerer Platzverschwendung, wenn es das in der
VCL gäbe)
Beides gleichzeitig zu starten geht wirklich nicht? oder hatten wir damals nur was falsch gemacht?
Ansonsten bliebe doch bestimmt nun noch die Lösung
im Tree auf IDropTarget/IDropSource/DoDragDrop umzustellen, auch für das Verschieben innerhalb der Delphi-Komponente.
Nur was ich vor Jahren da mal an Beispielen sah, ging immer nur von einer Source (eine Komponente) zu einem "anderen" Target (nicht die gleiche Komponente, an einem anderen X:Y).