Drag-and-Drop mit XProfan und der dragdrop.dll bzw. draglite.pcu
DLL, PCU und Beispiel-Code Version 1.0
DLL, PCU und Beispiel-Code (C) 2004 by CHZ-Soft, Christian Zietz, <czietz@gmx.net>

Mit den folgenden Dateien ist es mglich, XProfan-Programme zum Ziel von 
Drag-and-Drop-Aktionen zu machen. Es stehen eine Version unter Verwendung einer DLL 
(dragdrop.pcu und dragdrop.dll) und eine komplett in XProfan geschriebene 
Light-Version (draglite.pcu), die die DLL nicht bentigt, als Units zur Verfgung. 
Die gewnschte Unit kann mit "$U" in das XProfan-Programm eingebunden werden.

Zunchst einige Hintergrundinformationen zur Funktionsweise von Drag-and-Drop unter
Windows: Wird ein Objekt mit der Maus gezogen, stellt das Programm, von dem dieses
Objekt ausging, Daten ber das Objekt in einem oder mehreren Formaten zur Verfgung.
Diese Formate knnen entweder einen Namen (String) oder eine Nummer (Integer) 
besitzen. Der Aufbau der Daten ist formatabhngig. Weiter unten in diesem Dokument
werden einige Beispiele genannt.

Ein Programm, das Ziel von Drag-und-Drop-Aktionen werden mchte, kann ein oder
mehrere Fenster(elemente) (d.h. Fenster, Buttons, Listboxen etc.) beim Betriebs-
system anmelden und sobald ein Objekt, das Daten im passenden Format bereitstellt, 
ber einem dieser Elemente losgelassen wird, die Daten entgegennehmen und auswerten.
Mit der dragdrop.dll bzw. der draglite.pcu ist diese Anmeldung als Ziel mglich.
Das Programm gibt das Handle des Fensterelements, das gewnschte Format und die
Adresse einer Callback-Prozedur (mit ProcAddr ermittelt) an. Wird ein Objekt im
gewnschten Format ber einem angemeldeten Element losgelassen, so wird die 
Callback-Prozedur mit der Adresse der Daten im Speicher als Parameter aufgerufen 
und kann diese auswerten. Beispiele dafr finden sich im mitgelieferten Beispiel-
Sourcecode dragtest.prf.


Die Funktionsaufrufe beider Units im Einzelnen:

InitDragDrop
  Initialisiert Drag-und-Drop. Muss einmalig vor der ersten Verwendung
  aufgerufen werden. Nur GetDragDropVersion (s.u.) darf vorher aufgerufen werden.

  Parameter: keine, Rckgabewert: keiner


RegisterDropTarget
  Registriert ein Fenster(element) fr Drag-and-Drop. In der DLL-Version sind
  maximal 16 Ziele mglich, in der Light-Version nur eins.

  Parameter:
  - Handle des zu registrierenden Fenster(element)s
  - Format der Daten, die per Drag-and-Drop erhalten werden knnen:
    Entweder die Nummer des Formats oder die Adresse eines Strings
    mit dessen Namen (mit Addr ermittelt). Siehe auch weiter unten.
  - Adresse der Callback-Prozedur (mit ProcAddr ermittelt)
    Diese Prozedur wird bei erfolgreichem Drag-and-Drop aufgerufen
    und erhlt als einzigen Parameter einen Zeiger auf die Daten

  Rckgabewert: Handle des neuen Drag-and-Drop-Ziels, 0 bei Fehler


UnregisterDropTarget
  Beendet die Registrierung eines Fenster(elements) fr Drag-and-Drop.

  Parameter:
  - Handle des Drag-and-Drop-Ziels (zurckgegeben von RegisterDropTarget)

  Rckgabewert: keiner


GetDragDropVersion
  Gibt die Versionsnummer der DLL bzw. PCU zurck.

  Parameter: keine

  Rckgabewert: Versionsnummer in hexadezimaler Darstellung.
    $0xyz = Version x.y.z, z.B. $0101 = Version 1.0.1


Beispiele fr Formate:

Nummer / Name		Beschreibung und Aufbau der Daten

1 (als Integer)		Text (z.B. aus Word herbergezogen)
			Die Callback-Prozedur erhlt einen Zeiger auf einen
			String mit dem Text (mit @String$(X&, 0) auszulesen).

FileName		Ein einzelner Dateiname
			Die Callback-Prozedur erhlt einen Zeiger auf einen
			String mit dem Dateinamen (mit @String$(X&, 0) auszulesen).

UniformResourceLocator	Eine URL (Internetadresse)
			Die Callback-Prozedur erhlt einen Zeiger auf einen
			String mit dem URL (mit @String$(X&, 0) auszulesen).

Shell IDList Array	Eine Liste von Dateinamen
			Das Datenformat ist relativ komplex und kann in allen Details
			im MSDN (Microsoft Developer Network) nachgelesen werden.
			Das Beispiel-Programm dragtest.prf enthlt eine Callback-
			Prozedur (Callback1), die die Verarbeitung dieses Formats
			zeigt.


Lizenzbedingungen:

Sofern nicht ausdrcklich etwas anderes vereinbart worden ist, sind alle Dateien in
diesem Paket Freeware, d.h. sie drfen kostenlos verwendet und unbeschrnkt weiter-
gegeben werden. Sollte mitgelieferter Sourcecode verndert weitergegeben werden, ist
dies zu kennzeichnen. Vernderungen an der DLL sowie den compilierten Units (*.pcu)
sind nicht gestattet.


Kontakt:

Christian Zietz, CHZ-Soft, E-Mail: czietz@gmx.net
						
		