Drag and Drop между двумя компонентами ListBox
Вот пересмотренный OnDragDrop, использующий source (источник) и sender (передатчик) вместо DstList и SrcList. Теперь, если вы установили SrcList и DstList для использования тех же методов OnDragOver и OnDragDrop и создали обработчик события OnDragDrop, то для операции Drag and Drop вы можете использовать оба решения.
Code: |
procedure TDualListDlg.DstListDragDrop(Sender, Source: TObject; X, Y: Integer); var droppedOnIndex: integer; anItem: integer; numberOfItems: integer; begin if (Sender is TListbox) and (Source is TListBox) then begin droppedOnIndex := TListBox(Sender).ItemAtPos(Point(X, Y), false); numberOfItems := TListBox(Source).SelCount; anItem := 0; while numberOfItems > 0 do begin if TListBox(Source).Selected[anItem] = true then begin TListBox(Sender).Items.Insert(droppedOnIndex, TListBox(Source).Items[anItem]); TListBox(Source).Items.Delete(anItem); TListBox(Source).Update; TListBox(Sender).Update; numberOfItems := numberOfItems - 1; end else anItem := anItem + 1; end; end; end; |
Для того, чтобы предотвратить операцию Drag and Drop с одним и тем же компонентом, используйте следующий код в обработчике события OnDragOver:
Code: |
if (Sender is TListBox) and (Source is TListBox) then begin if TListBox(Sender).Name = TListBox(Source).Name then Accept := False else Accept := true; end; |
https://delphiworld.narod.ru/
DelphiWorld 6.0
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!