Содержание материала

 

А OnDragDrop будет выглядеть так:

 

Code:

var

s: string;

begin

if Source = ListBox1 then

begin

   ListBox2.Items.Add(ListBox1.Items[ListBox1.ItemIndex]);

   ListBox1.Items.Delete(ListBox1.ItemIndex);

//удаляем перенесенный элемент

end

else          //внутренняя перестановка

begin

   s := ListBox2.Items[ListBox2.ItemIndex];

   ListBox2.Items.Delete(ListBox2.ItemIndex);

   ListBox2.Items.Insert(ListBox2.ItemAtPos(Point(X, Y), False), s);

//находим, в какую позицию переносить и вставляем

end;

end;

 

 

 

 

Научимся переносить текст в Memo, вставляя его в нужное место. Поскольку я выбрал в качестве источника любой из ListBox, подключим в Инспекторе Объектов для OnDragOver уже написанный ранее обработчик ListBox2DragOver, а в OnDragDrop напишем

Code:

if not CheckBox1.Checked then // при включении добавляется в конец текста

begin

Memo1.SelStart := LoWord(Memo1.Perform(EM_CHARFROMPOS, 0, MakeLParam(X,Y)));

   // устанавливаем позицию вставки согласно координатам мыши

Memo1.SelText := TListBox(Source).Items[TListBox(Source).ItemIndex];

end

else

   memo1.lines.add(TListBox(Source).Items[TListBox(Source).ItemIndex]);

 

Замечу, что для RichEdit EM_CHARFROMPOS работает несколько иначе, что продемонстрировано в следующем примере. Перенос из Memo реализован с помощью правой кнопки мыши, для того, чтобы не изменять стандартное поведение Memo, и поскольку нажатие левой кнопки снимает выделение. Для Memo1 установлено DragMode = dmManual, а перетаскивание инициируется в OnMouseDown

 

Code:

if (Button = mbRight) and (Memo1.SelLength > 0) then Memo1.BeginDrag(True);

 

Обработчик RichEdit1DragOver очевиден, а в RichEdit1DragDrop пишем

 

Code:

var

p: tpoint;

begin

if not CheckBox1.Checked then

begin

   p := point(x, y);

   RichEdit1.SelStart := RichEdit1.Perform(EM_CHARFROMPOS, 0, Integer(@P));

   RichEdit1.SelText := Memo1.SelText;

end

else

   RichEdit1.Lines.Add(Memo1.SelText);

end;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить