Показать сообщение отдельно
  #2  
Старый 02.10.2008, 17:40
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Где-то я уже здесь постил такую штуку.
Тут главный вопрос - у тебя мультивыделение или нет.

Если у тебя выделяется всего одна строка, то все просто.
Берешь TListBox, как простейший визуальный компонент, отображающий StringList и позволяющий делать Drag'n'Drop. У него ставишь DragMode (каыется так) в dmAuto, а потом все просто:
ListBox.ItemIndex - строка которую тащишь,
ItemAtPos(X,Y) в момент бросания (соотв. событие) - место, куда надо бросить строку.
Соответсвенно, вырезаешь ее и потом Insert. Только при вставке не забудь, что если ты ее ташишь вниз, то после вырезания позиции на 1 уменьшаться.

Если у тебя мультивыделение, то все сложнее.
точнее начало такое же, только вот вырезнием и вставкой сдвинуть не получится. Тут придется Двигать всю группу выделенных строк по одной позиции поочереди, что бы сохранить их взяимное положение. а по поводу вычисления координат, так так же, как и в первом случае. только явно различаются варианты сдвижки вверх и вниз (направление цикла и граничные условия другие).
Ответить с цитированием