Здраствуйте. У меня вопрос возник по механизму перетаскивания (технология Drag&Drop)..Например мне нужно перетащить объект из ListBox1 в ListBox2 и можно произвести обратную операцию (при этом из списка источника объект удаляется).. Знаю, что работать нужно со свойствами DragCursor, DragKind,DragMode..и ещё нужны будут обработчики событий OnDragDrop и OnDragOver... Вот только разобраться не могу, для какого ListBox (из 2-x) какой обработчик использовать и какие значения задавать для свойств DragCursor, DragKind,DragMode?
Значит, смотри: переносим из ListBox2 (источник) в ListBox1 (приемник)...
И источнику и приемнику назначаем DragMode = dmAutomatic, и у приемника в обработчиках OnDragOver/OnDragDrop делаем:
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer); var currPeople: TPeople; begin if Source = ListBox2 then begin // При удалении строки из источника удаляется и объект, поэтому создаем новый !!! currPeople := TPeople.Create( TPeople(TListBox(Source).Items.Objects[TListBox(Source).ItemIndex]).fName, TPeople(TListBox(Source).Items.Objects[TListBox(Source).ItemIndex]).fWorkshop, TPeople(TListBox(Source).Items.Objects[TListBox(Source).ItemIndex]).fRange ); // Добавляем его в приемник TListBox(Sender).Items.AddObject(currPeople.fName, currPeople as TObject); // Удаляем из источника TListBox(Source).Items.Delete(TListBox(Source).ItemIndex); end end;
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin // разрешаем перетаскивание только если источник - ListBox2, и в нем что-то выбрано Accept := (Source = ListBox2) and (TListBox(Source).ItemIndex >= 0); end;
Вот и все в принципе... Для обратной операции - меняешь в обработчиках источник (я специально сделал так, что изменить надо будет только в одном месте)
Вот и все в принципе... Для обратной операции - меняешь в обработчиках источник (я специально сделал так, что изменить надо будет только в одном месте)
Спасибо большое за разъяснения!!))) Теперь разобралась!)