Michael Van Canneyt schrieb:

i.e. I have used the application-specific DnD, but I wouldn't know how to handle the intra-app DnD.

Simply start the demo app twice, then drag...

I was thinking about something non-trivial, of course.

Please specify what "non-trivial" use you have in mind, and what results you expect to see in this very early implementation stage (proof of concetpt).


I'd leave all that to the concrete implementations, and provide specialized handlers in the target controls. Currently TControl.DoDragMsg dispatches the messages to the Drop and Dock methods, based on the DragObject class type. More handlers can be added, and dispatch may be rebased on a drag type (enum) property.

I don't think more handlers should be added. There are too many handlers already. That is why you can put the extra information in objects which descend from TDragObject.

Not only information, but also functionality!

That is what it is for, and it is also the recommended practice in Delphi: creating a descendant of TDragObject for specific purposes.

Right, and every such Delphi class reacts on dragging events, in its ProcessMessages method.


The base class (TDragObject) only must declare the extended API, including common properties.

No, that is IMHO a totally wrong design, which will make the base object unnecessarily heavy. This is exactly the reason why the API allows you to create your custom drag object when a drag operation starts: to avoid putting everything in the base object.

You miss the really essential point: the interface between the drag manager and the drag object.

The LCL implementation has *added* a dragmanager object, that is *restricted* to internal dragging. Why that bloat?

The LCL implementation has *removed* message processing from TDragObject, and instead has *added* sealed DragPerformers. Why that bloat?

This castration disallows to implement further dragging models in TDragObject descendants. How else should this be done, then???

This is what I call "totally wrong design" :-(

The API is there. It is extensible - all we need to do is use the already-provided mechanisms.

So you agree to add the removed methods to TDragObject again? ;-)

DoDi


--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to