Muchas gracias a todos
Debo reconocer que estos días estoy disfrutando como un enano con esto de volver a codificar. No lo puedo evitar: me encanta. Me acuesto pensando en lo que he dejado a medias y por las mañanas, al encender el ordenador con una taza de café en la mano, siento una gozosa anticipación que pocas cosas ya me generan.
Respecto a mi problema, creo que lo he resuelto. A raíz de la respuesta de Tincho decidí ilustrar el problema a un proyecto sencillito y, como tantas veces pasa, al aislarlo encontré la solución a mis dos problemas:
1.-
Averiguar qué elemento del Dirview se encuentra debajo del ratón (sin hacer click en él, claro).
La solución está en el método FindAt (x,y) que tiene el Treeview subyacente al Dirview
Es decir:
La clase Dirview ofrece como Proxy un Treeview en el que se basa.
Este Treeview dispone del método FindAt(x,y) que ubica el cursor interno del treeview en la posición x e y indicadas. Como la clase Drag ofrece Drag.x y Drag.y , pues solucionado
2.-
Conseguir que la carpeta apuntada durante la operación de Drag&drop se despliegue sola:
Eso se consigue de manera muy fácil con el método .Expanded de la propiedad .item del treeview.
El problema es que si expandimos el item inmediatamente después de ejecutar FindAt, las carpetas se despliegan según el ratón pasa sobre ellas y es imposible encontrar nada a poco que tengas en tu disco carpetas con muchas subcarpetas. Lo he solucionado con timer.
La solución no es perfecta, por algún que otro detalle relativo a la clase Drag que no llego a comprender (en el código he dejado unas líneas comentadas con uno de esos detalles, para que lo veáis), pero es suficiente para lo que necesito.
Adjunto un pequeño proyecto que ilustra todo este ladrillo con un ejemplo mucho más simple de entender.
Saludos