2009-07-30 6 views
0

Ich habe eine VCL-GUI in Codegear entwickelt. Ich habe ein DropTarget für das Hauptformular erstellt und das DropTarget-Objekt implementiert das IDropTarget-Interface, mit dem ich Dateien aus dem Explorer ziehen und ablegen kann. Jetzt, da ich nur möchte, dass einige der untergeordneten Komponenten Drop-Ziele sind (nicht das gesamte Formular), gebe ich nur die DragEnter-Methode S_OK zurück, wenn die POINTL-Koordinaten innerhalb der Grenzen der Komponente liegen.Problem mit IDropTarget bei Verwendung eines VCL-Formulars

Wenn ich jedoch das Element langsam in die Grenzen des Formulars, aber nicht der Komponente ziehen, gibt DragEnter E_NOINTERFACE zurück, so dass kein Tropfen erlaubt wird. Wenn ich weiter in die Dropzone ziehe, wird DragEnter nicht feuern, ich verstehe, warum es nicht feuert. Also meine Frage ist Wie kann ich manuell das DragEnter-Ereignis auslösen?

Antwort

3

Klingt, als ob Sie ignorieren, dass IDropTarget eine DragOver() -Methode hat, die Sie zusätzlich zu DragEnter() verwenden müssen. Wenn DragEnter() nicht mit von Ihnen zulässigen Koordinaten beginnt, müssen Sie S_OK mit dem Parameter pdwEffect zurückgeben, der auf DROPEFFECT_NONE festgelegt ist, und anschließend DragOver() weiterhin eine eigene Koordinatenprüfung durchführen lassen.

Da Sie nur auf ein bestimmtes Steuerelement ziehen möchten, sollten Sie RegisterDragDrop() für jede dieser einzelnen Steuerelemente aufrufen (vorausgesetzt, sie sind TWinControl-Nachkommen), nicht für das TForm selbst.

Verwandte Themen