multiselect と ExtendedSelect の両方が true に設定された TListBox があります。リスト ボックス内の複数の項目をドラッグして再配置できるようにする必要があります。私の問題は、ユーザーが CTRL または SHIFT キーを押さずに既に選択されている項目をクリックするとどうなるかです。
ケース 1: DragMode が dmManual に設定されている場合 マウスが押される前に選択がクリアされます。これにより、複数のアイテムをドラッグできなくなります。
ケース 2: DragMode が dmAutomatic に設定されている場合 MouseDown イベントは発生しません。選択はクリアされないのでドラッグは問題ありませんが、ユーザーは選択された項目の 1 つをクリックして選択をクリアすることはできません。これは、すべてのアイテムが選択されている場合、またはユーザーが選択したい次のアイテムが現在の選択の一部である場合に、実際に問題を引き起こします。
この問題は、OnStartDrag プロシージャで DragObject に何かを割り当てた場合にのみ発生することに注意してください。ユーザーがマウスを動かした後にのみ OnStartDrag が開始されれば、問題は解決すると思います。Mouse.DragImmediate := false が設定されていますが、リスト ボックス内の項目をクリックするとすぐに StartDrag が起動されます。
このプロジェクトでは Delphi 7 を使用していますが、Delphi 2007 でも同じ動作が見られます。