• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

drag and drop перетаскивания между двумя списками

  • Автор темы Автор темы Lomanu4
  • Дата начала Дата начала

Lomanu4

Команда форума
Администратор
Регистрация
1 Мар 2015
Сообщения
1,467
Баллы
155
На главной форме проекта разместите два списка (класс TListBox).
У обоих компонентов установите свойство DragMode в режим dmManual, а свойство DragKind
в состояние dkDrag. Воспользовавшись свойством Items любого из списков, внесите в него
несколько текстовых строк. Именно эти строки мы станем перетаскивать из одного элемен-та управления в другой.
В секции private главной формы объявите переменную Index, она станет хранить индекс
перетаскиваемой строки. Далее нам предстоит последовательно описать 5 обработчиков событий. Первое из них — событие движения мыши над списком (OnMouseMove), оно пред-назначено для инициализации операции перетягивания. Оставшийся квартет событий соот-ветствует событиям
Для того чтобы приложение стало работоспособным, не забудьте
сделать все события общими для ListBox1 и ListBox2

Код:
private
Index : integer;
//...
procedure TForm1.ListBox1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
{1. Инициируем процесс перетаскивания}
if ((Sender as TListBox).ItemIndex<>-1){есть выделенный элемент}
and (ssLeft in Shift) then  {нажата левая кнопка мыши}
(Sender as TListBox).BeginDrag(false,8); {старт операции Drag}
end;
procedure TForm1.ListBox1StartDrag(Sender: TObject;
var DragObject: TDragObject);
begin
{2. Запоминаем индекс перетаскиваемого элемента}
Index:=(Sender as TListBox).ItemIndex;
end;
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
{3. Проверяем приемлемость данных}
Accept:=(Index<>-1) and (Sender<>Source);
end;
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject;
X, Y: Integer);
var s:string;
begin
{4. Передаем строку из списка Source в список Sender}
s:=(Source as TListBox).Items.Strings[Index]; //узнаем текст элемента
(Sender as TListBox).Items.Add(s); //передаем текст в приемник
(Source as TListBox).Items.Delete(Index);//удаляем элемент из источника
end;
procedure TForm1.ListBox1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
{5. Завершаем перетаскивание}
Index:=-1;
end;
 
Вверх Снизу