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