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