2010-02-01 4 views
2

У меня есть два списка. В спискеbox1 содержится список имен БД. С другой стороны, Listbox2 имеет список заголовков содержимого, связанных с БД в listbox1. В основном вы нажимаете на listbox1 и загружаете в listbox2 все заголовки для содержимого БД.Как определить, какой элемент списка был удален?

Я хочу реализовать функцию перетаскивания. Я знаю, как перетаскивать между двумя списками; это нет проблема. То, что я пытаюсь выполнить следующий:

  1. нажмите на заголовок в listbox2

  2. перетащить элемент в элемент в lisbox1

  3. название является теперь частью БД указываемого пункт в спискеbox1

Теперь все внутренние коды для перемещения фактических данных уже закодированы. Как я могу заставить listbox1 выбрать (и узнать) элемент, в котором мышь собирается удалить элемент из спискаbox2? Внедрение простого перетаскивания между двумя списками приведет к тому, что элемент из спискаbox2 будет добавлен в списокbox1, поскольку я не могу выбрать элемент в спискеbox1, пока я что-то перетаскиваю.

Надеюсь, я объяснил это правильно.

Код приветствуется.

ответ

3

Если я правильно понял, вы пытаетесь увидеть, на какой предмет падает. Вам нужна функция ItemAtPos ListBox. Он принимает параметр TPoint, а обработчик события OnDragDrop имеет координаты X и Y.

В этом примере ListBox2 является источником, а ListBox1 - управляющим. iItem дает мне ItemIndex сбрасываемого элемента ListBox1.

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer); 
var 
    iItem: Integer; 
    MyPoint: TPoint; 
begin 
    MyPoint.X := X; 
    MyPoint.Y := Y; 

    iItem := ListBox1.ItemAtPos(MyPoint, True); 

    ListBox1.Items.Insert(iItem, ListBox2.Items[ListBox2.ItemIndex]); 
end; 

Там нет проверки здесь диапазона, это просто пример, чтобы проиллюстрировать функцию ItemAtPos.

+0

Имя элемента, которое я предполагаю, будет в Items.name [Listbox2.ItemIndex]? – Uri

+0

Uri, ListBox2.Items [ListBox2.ItemIndex] содержит текст отбрасываемого элемента. –

+0

Спасибо. Поэтому, поскольку я не хочу добавлять новый элемент, я собираюсь удалить последнюю строку (ListBox1.Items.Insert). Как вы можете выделить элемент в спискеbox1, когда мышь находится над ним? Вы не знаете, куда он пойдет, пока вы не отпустите кнопку мыши. – Uri

Смежные вопросы