AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Drag&Drop innerhalb einer Delphi-Komponente UND von/nach Außen
Thema durchsuchen
Ansicht
Themen-Optionen

Drag&Drop innerhalb einer Delphi-Komponente UND von/nach Außen

Ein Thema von himitsu · begonnen am 30. Aug 2022 · letzter Beitrag vom 14. Sep 2022
Antwort Antwort
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.145 Beiträge
 
Delphi 12 Athens
 
#1

Drag&Drop innerhalb einer Delphi-Komponente UND von/nach Außen

  Alt 30. Aug 2022, 10:01
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).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (30. Aug 2022 um 13:55 Uhr)
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
315 Beiträge
 
Delphi 12 Athens
 
#2

AW: Drag&Drop innerhalb einer Delphi-Komponente UND von/nach Außen

  Alt 30. Aug 2022, 11:14
Bei mir funktionieren diese hier ganz gut unter Delphi 10.4.2
Ergänzung: Allerdings nur i.V.m. externen Anwendungen eingesetzt; innerhalb der VCL nicht getestet.

unit DragDrop;
// -----------------------------------------------------------------------------
// Project: New Drag and Drop Component Suite
// Module: DragDrop
// Description: Implements base classes and utility functions.
// Version: 5.7
// Date: 28-FEB-2015
// Target: Win32, Win64, Delphi 6-XE7
// Authors: Anders Melander, anders@melander.dk, http://melander.dk
// Latest Version https://github.com/landrix/The-new-D...ite-for-Delphi
// Copyright © 1997-1999 Angus Johnson & Anders Melander
// © 2000-2010 Anders Melander
// © 2011-2015 Sven Harazim
// -----------------------------------------------------------------------------
// TODO -oanme -cPortability : Replace all public use of HWND with THandle. BCB's HWND <> Delphi's HWND.

Geändert von Papaschlumpf73 (30. Aug 2022 um 11:40 Uhr) Grund: Beitrag nicht vollständig gelesen.
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#3

AW: Drag&Drop innerhalb einer Delphi-Komponente UND von/nach Außen

  Alt 30. Aug 2022, 14:04
Bei mir funktionieren diese hier ganz gut unter Delphi 10.4.2
Hier der gefixte Link zur aktualisierten Version auf GitHub.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.145 Beiträge
 
Delphi 12 Athens
 
#4

AW: Drag&Drop innerhalb einer Delphi-Komponente UND von/nach Außen

  Alt 14. Sep 2022, 09:48
Nja, Problem ist nicht per se die D&D-Komponente.


Sondern dass ich hier Drag&Drop-Verschieben von Nodes in einem DevExpressTree mit Drag&Drop von und zu externen Programmen mischen muss will.


Rein zu kann man es ja noch unterscheiden, was wir bereits machen, weil unterschiedliche Schnittstellen angesprochen werden, ob der Drag im Tree begann oder von außen kommt und dort nur der eine oder andere Drop eintrifft. (aktuell nur im gesamten Tree, also in die aktuell selektierte Node und nicht in die Node, wo die Maus drauf steht)

Aber wenn man den Drop beginnt, dann kann man (scheinbar) jeweils nur Einwas starten, also, wie schon immer, entweder das Delphi-D&D für das Verschieben im Tree,
oder das Windows-D&D zum Schieben in andere Anwendungen. Daher wird das Windows-D&D aktuell aus einer gesonderten Zone (einem Button) gestartet,
weil mit Strg/Shift/Alt zu hantieren und darüber zu entscheiden, das versteht einfach niemand. Die hatten schon Probleme mit Strg/Shift/Alt für die Auswahl von Verlinken/Verchieben/Kopieren von Dateien in unser DMS, obwohl ich es genauso reagieren lasse, wie man es vom Explorer her kennt.
Bzw. wenn ich beides Starten würde/könnte, dann auch noch auspassen, weil ja dann der Tree auf Beides gleichzeitig reagiert (der Move und Drop vom Delphi-D&D und vom Windows-D&D, die auch gegeneinander um das Maus-Icon kämpfen)


Aktuell hätte ich noch die Idee, eventuell beim Move zu schauen, ob die Maus den Tree/Programm verlässt und dann das eine D&D abzubrechen und das Andere neu zu starten und bei zurück ins Fenster wieder umzukehren.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (14. Sep 2022 um 09:59 Uhr)
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
315 Beiträge
 
Delphi 12 Athens
 
#5

AW: Drag&Drop innerhalb einer Delphi-Komponente UND von/nach Außen

  Alt 14. Sep 2022, 10:26
Aktuell hätte ich noch die Idee, eventuell beim Move zu schauen, ob die Maus den Tree/Programm verlässt und dann das eine D&D abzubrechen und das Andere neu zu starten und bei zurück ins Fenster wieder umzukehren.
Klingt ziemlich umständlich. Mir fällt aber auch keine bessere Lösung ein. Es sei denn, wenn es (intern) wirklich nur um das Verschieben der Nodes im DevExpressTree geht, dass du jedes D&D-Ereignis innerhalb vom DevExpressTree wie ein externes verwendest und dann auch so die Nodes verschiebst und die internen D&D-Funktionen im DevExpressTree vollständig ignorierst. Keine Ahnung, ob das geht....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.145 Beiträge
 
Delphi 12 Athens
 
#6

AW: Drag&Drop innerhalb einer Delphi-Komponente UND von/nach Außen

  Alt 14. Sep 2022, 10:42
Jupp, ist alles irgendwie nicht so einfach. (mehrere Wege ... manuell oder automatisch, aber nichst leicht verständlich oder aktuell noch keine Ahnung wie es umgesetzt werden kann)

Keine Ahnung, ob das geht....
Gehen muß es ja irgendwie ... der Explorer und Outlook machen es auch, also im Tree/Grid verschieben, aber auch rein und raus.
Oder die haben mir meine Idee gelaut und schalten um
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 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