Страница 1 из 1

Перемещение в лствью

Добавлено: 27 окт 2006, 18:31
Лелик_1044
есть листвью нужно
организвать драго энд дроп
Если беру допустим итем с 1-ой позиции и перемещаю на 5
Ондолжен оказтья на 5 позиции а все итемы выше 5 должны подняться до 1 позиции

Добавлено: 30 окт 2006, 18:52
Лелик_1044
Что никто не знает?

Добавлено: 30 окт 2006, 19:07
Dr_Grizzly
с драг&дроп'ом не так все просто :) даже я не работал с этим, а что ты пытаешься бросить в листвьювер?

Добавлено: 30 окт 2006, 21:35
Лелик_1044
В плане что бросить
Он находится в состоянии репорт
Я сделал чтоб можно было менять местами ветки

Добавлено: 31 окт 2006, 08:54
LAngel
Устанавливаем DragMode в dmAutomatic
и DragKind в dkDrag

Код: Выделить всё

procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := Source = Sender;
end;

procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  DragItem, DropItem, CurrentItem: TListItem;
begin
  if Sender = Source then
    with TListView(Sender) do
    begin
      DropItem    := GetItemAt(X, Y);
      CurrentItem := Selected;
      if DropItem = nil
        then DragItem := Items.Add
        else if DropItem.Index > CurrentItem.Index
          then DragItem := Items.Insert(DropItem.Index+1)
          else DragItem := Items.Insert(DropItem.Index);
      DragItem.Assign(CurrentItem);
      CurrentItem.Free;
    end;
end;

Добавлено: 01 ноя 2006, 18:38
Лелик_1044
LAngel,
Попробовал тут
1)Работает не 100%Иногда отваливается при попытке перенести снизу вверх
2)При CurrentItem.Free освобождается его Data и DragItem.Data что не есть гуд