2009-08-13 3 views
2

Я создал в Delphi некоторые настраиваемые элементы управления (TCustomControl), которые я могу перемещать их во время выполнения, но только один за другим. Как я могу выбрать два или более из этих элементов управления, во время выполнения снова и перемещать их вместе с помощью мыши?Как выбрать и переместить несколько элементов управления во время выполнения

спасибо.

ответ

1

Я когда-то использовал компонент с именем handles, что, если я правильно помню, было не так сложно обновить более поздние версии Delphi и поддерживать multi-select.

+0

Я использовал этот компонент и добавил multi-select с некоторыми изменениями. Единственная визуальная ошибка - прямоугольник выбора мыши, который находится под элементами управления (так как я рисую его на родительском холсте), и что смещение фактических элементов управления равно +2 пикселям на обеих осях. Спасибо. – pani

2

Если вы не можете найти более простой способ, вы всегда можете сделать это вручную. Сохраните список всех выбранных элементов управления. Когда начинается операция перетаскивания, создайте другой список, содержащий значение TPoint, указывающее, как далеко по обеим осям каждый элемент управления верхнего и левого элементов управления находится из положения мыши. Затем, когда пользователь перетаскивает элемент управления, постоянно обновляйте выбранные элементы управления, чтобы удерживать их в соответствующих относительных положениях указателю мыши.

+1

Я думал, что-то вроде вашего предложения, хотя для основного управления мне нужны только дельта-значения для основного управления. Я буду перемещать и применять эти дельта к другим элементам управления. Поэтому, если control1 изменен .Left на 3 пикселя и .Top 10 пикселей, тогда controlN.Left: = controlN.Left + DeltaX; controlN.Top: = controlN.Top + DeltaY; Я провел некоторое тестирование с этим, но я не могу перемещать остальные элементы управления, пока я перемещаю мастер. – pani

0

Как насчет commercial solution? На снимке экрана показаны инструменты выравнивания, которые предполагают, что он поддерживает множественный выбор.

+0

Это первая библиотека, на которую я смотрел, но я решил реализовать ее сам, так как я уже закодировал большую часть необходимых функций. – pani

3

Другое коммерческое решение будет от DevExpress: LayoutControl. Он позволяет осуществлять перетаскивание, группировку, полную перегруппировку, скрытие и добавление компонентов во время выполнения.

+0

Я действительно не хочу блокировать стороннего поставщика, особенно DevExpress, для чего-то такого простого. – pani

 Смежные вопросы

  • Нет связанных вопросов^_^