Содержание материала

 

Рассмотрим теперь перетаскивание в 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;

 

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить