Рассмотрим теперь перетаскивание в ListView1 (ViewStyle = vsReport). В OnDragOver разрешим прием из ListBox2 и из себя же:
Code: |
Accept := ((Source = ListBox2) and (ListBox2.ItemIndex >= 0)) or (Source = Sender); |
А вот OnDragDrop теперь будет посложнее
Code: |
var Item, CurItem: TListItem; begin if Source = ListBox2 then begin Item := ListView1.DropTarget; if Item <> nil then // случай перетаскивания на Caption if Item.SubItems.Count = 0 then Item.SubItems.Add(ListBox2.Items[ListBox2.ItemIndex]) // добавляем SubItem, если их еще нет else Item.SubItems[0]:=ListBox2.Items[ListBox2.ItemIndex] // иначе заменяем имеющийся SubItem else begin // при перетаскивании на пустое место создаем новый элемент Item := ListView1.Items.Add; Item.Caption := ListBox2.Items[ListBox2.ItemIndex]; end; end
else // случай внутренней перестановки begin CurItem := ListView1.Selected; // запомним выбранный элемент Item := ListView1.GetItemAt(x, y); // другой метод определения элемента на который делаем Drop if Item <> nil then Item := ListView1.Items.Insert(Item.Index) // вставляем новый элемент перед найденным else Item := ListView1.Items.Add; // или добавляем новый элемент в конец Item.Assign(CurItem); // копируем исходный в новый CurItem.Free; // уничтожаем исходный end; end; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!