Windows Shell Drag & Drop fr Delphi.

Programmiert und Copyright 2006-03: Jan Schlter
Freigegeben zur Verwendung in jeglicher Software. 

Die enthaltenen Units sind nur fr die DropSource-Seite, also beispielsweise, um
Dateien von einer eigenen Applikation in andere Programme ziehen lassen zu knnen.
Es gibt drei verschiedene Versionen, die etwas unterschiedliche Anstze verfolgen,
je nachdem, was bentigt wird. Jede Version enthlt weiterverwendbare Units plus
eine Demo.
Bei verffentlichung der enthaltenen Quelltexte oder darauf basierender Quelltexte
bitte die darin enthaltenen Copyright-Hinweise erhalten.


DropListView.pas:
  Eine um OnDropFiles und OnBeginDrag erweiterte TListView-Komponente, die in allen
  drei Demos benutzt wird. Diese muss vor der Benutzung der Demos installiert werden.

version1:
  Implementiert IDropSource und IDataObject in einer einzigen Klasse. Hat den Vorteil,
  dass das CFSTR_INDRAGLOOP-Format einfach implementierbar ist (und implementiert ist).

version2:
  Trennung von IDropSource und IDataObject in zwei Klassen. In punkto Funktionalitt
  keine Vernderung zu version1, auer dass CFSTR_INDRAGLOOP weg ist.

version3:
  Bietet eine ganz neue Implementation von IDataObject, die alle Anfragen an ein
  DataObject aus der Shell delegiert, sowie Methoden, um dieses DataObject zu erzeugen
  und mit Daten zu fttern (z.B. Dateinamen).
  Die Shell-Implementation von IDataObject lsst sich jetzt auerdem mit Hilfe der Unit
  DragSourceHelper.pas an ein ListView-Control binden, wodurch die ListView das
  Zeichnen des DragImages bernimmt wie im Explorer.
  Zieht man bei der Demo Dateien aus dem Demoprogramm in den Explorer, werden sie ganz
  genauso behandelt, als kmen sie direkt aus dem Explorer - beim Ziehen mit rechts
  werden z.B. die registrierten DragDropHandler, wie beispielsweise von ZIP-Programmen,
  aktiviert und es lassen sich nun auch Dateien innerhalb des Ursprungsverzeichnisses
  ablegen, um eine Kopie zu erzeugen (bei version1 und version2, bei denen lediglich
  das CF_HDROP-Format im IDataObject untersttzt wurde, gab es nur eine Fehlermeldung.)