У меня есть TListBox с множественным выбором и ExtendedSelect, оба установлены в true. Мне нужно иметь возможность перетаскивать несколько элементов в списке, чтобы переставить их. Моя проблема в том, что происходит, когда пользователь нажимает на элемент, который уже выбран, не удерживая нажатой клавишу CTRL или SHIFT.
Случай 1: DragMode установлен в dmManual
Выбор очищается до нажатия мыши. Это не позволит перетаскивать несколько элементов.
Случай 2: DragMode установлен в dmAutomatic
Событие MouseDown никогда не срабатывает. Выбор не очищен, поэтому перетаскивание в порядке, но пользователь не может очистить выбор, щелкнув один из выбранных элементов. Это действительно создает проблему, если все элементы выбраны или следующий элемент, который пользователь хочет выбрать, был частью текущего выбора.
Обратите внимание, что эта проблема возникает только в том случае, если вы назначаете объект DragObject в процедуре OnStartDrag. Я думаю, что проблема исчезнет, если OnStartDrag будет запускаться только после того, как пользователь перемещает мышь. У меня Mouse.DragImmediate: = false, но я все равно получаю StartDrag, как только нажимаю на элемент в списке.
Я использую Delphi 7 для этого проекта, но я вижу то же поведение в Delphi 2007.