Как я могу определить, к какому элементу списка добавлен другой элемент? - PullRequest
2 голосов
/ 01 февраля 2010

У меня есть два списка.Listbox1 содержит список имен БД.Listbox2, с другой стороны, содержит список заголовков содержимого, связанного с БД в listbox1.В основном вы нажимаете на listbox1, и он загружает в listbox2 все заголовки для содержимого БД.

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

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

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

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

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

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

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

1 Ответ

3 голосов
/ 01 февраля 2010

Если я правильно понимаю, вы пытаетесь увидеть, на какой предмет падает. Вам нужна функция 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.

...