{***************************************************************
 *
 * Unit Name: DragDropListBox
 * Version  : 2.8
 * Date     : 1998/11/18
 * Purpose  : Enhanced Listbox that show the bitmap items, allow 
 *              drag-drop operation to change the order of Listbox 
 *              items and move items between Listboxes. 
 * Author   : Vincent Huang
 * E-Mail   : mac@lion.syscom.com.tw
 * History  :
 *        1.5 First release.
 *        2.0 Allow drag-drop among multiple TDragDropListBox.
 *            Property 'EnableDragDrop' is renamed to 'DragDropEnabled'.
 *            Property 'DragDropInsert' added.
 *            Property 'DragDropDelete' added.
 *        2.5 Implement the bimap cursor using TImageList.BeginDrag.
 *        2.6 Fix bug when the drag out another DragDropListBox.
 *        2.7 Utilize TDragControlObject to handle bitmap cursor.
 *            Miltiple selection support.
 *            Event OnGetDragImageList added, allow user to specify the
 *              custommized drag image.
 *            Method InsertItems added, allow trigger items moving between
 *              listboxes via program.
 *        2.8 Add support for showing bitmap in front of ListBox Item using
 *              TImageList. Use it just like the way you use TTreeview.
 *            PS: the feature is added because one Delphi component web site
 *                  add this feature to version 1.5, though it's never
 *                  supported. Now, you really got it. :)
 *                If there is no feature request, there will be only new
 *                  bug-fixed version from now on. To get new copy, you may
 *                  check the Delphi Super Page. If you e-mail me, I'll add
 *                  you to my TDragDropListBox mailing-list. :)
 * Comments : For use with Delphi 2,3,4 and C++ Builder 3.
 *            This component is absolutely free. if you use this
 *              component, please e-mail me with any kind of
 *              comments about this component. I'll inform you about
 *              the new version info when avaiable.
 * Usage    : set the 'DragDropEnable' to True and it works for you.
 *            If DragDropInsert is False, the new item won't be added
 *              and the insert position line won't be drawn.
 *            If DragDropDelete is False, the dragged item won't be
 *              deleted after dropped.
 *            To show the dragging image on other control, you have to
 *              add the following line in FormShow or somewhere else before
 *              the drag event happens.
 *
 *              CONTROL_NAME.ControlStyle :=
 *                      CONTROL_NAME.ControlStyle + [csDisplayDragImage];
 *
 * Bugs     : Most of the time, this component works fine. In one of
 *              my project, it crash the Delphi 4.02 in debug mode
 *              when the drag start but still works fine at run-time
 *              (non-debug mode). It crashed at line 8005 of Controls.pas
 *              while calling ImageList_DragEnter. :( I'm almost sure it's
 *              a bug of either Microsoft's comctl32.dll or Delphi 4.02,
 *              not mine. :)
 * PS       : This component is to my beloved Daphne, though for
 *              some reason we can't be together.
 *
 ****************************************************************}
