Данный способ позволяет не погружаясь глубоко в создание компонент осуществить операцию "drag and drop" выделенного текста.

 

Создайте новый компонент (TMyMemo), наследовав его от TMemo. И объявите его следующим образом:

 

Code:

type

TMyMemo = class(TMemo)

private

   FLastSelStart : Integer;

   FLastSelLength : Integer;

   procedure WMLButtonDown(var message: TWMLButtonDown); message WM_LBUTTONDOWN;

published

   property LastSelStart : Integer read FLastSelStart write FLastSelStart;

   property LastSelLength : Integer read FLastSelLength write FLastSelLength;

end;

 

 

Возьмите форму, бросьте на нее панель, на onMouseDown панели прицепите код:

 

Code:

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

{©Drkb v.3(2007): www.drkb.ru}

begin

ReleaseCapture;

Panel1.Perform(WM_SYSCOMMAND, $F012, 0);

end;

 

Теперь в run-time панель можно таскать как в дизайне...

 

Взято с Vingrad.ru https://forum.vingrad.ru

 

Данный пример компонента и демонстрационный проект показывают простой путь осуществления операции "drag and drop" (перетащи и брось) между двумя полями различных табличных сеток.

 

Запустите Delphi 3 (с незначительными изменениями данный код может работать и в Delphi 1-2).

 

Активизируйте File|New|Unit. Скопируйте приведенный ниже модуль MyDBGrid во вновь созданный модуль. Сделайте File|Save As. Сохраните модуль как MyDBGrid.pas.

 

Выберите пункт меню Component|Install Component. Переключитесь на страницу Info New Package. Поместите MyDBGrid.pas в поле редактирования "Unit file name" (имя файла модуля). Назовите модуль MyPackage.dpk. Ответьте Yes на вопрос Delphi 3 о необходимости сборки и установки пакета. Нажмите OK на сообщение Delphi 3 о необходимости включения VCL30.DPL. После этого пакет будет собран и установлен. Теперь компонент TMyDBGrid будет отображен в Палитре Компонентов в группе "Samples". Закройте редактор пакетов и сохраните пакет.

 

В Object Inspector установите свойство dragmode у StringGrid в dmAutomatic.

 

Ниже приведён полный код:

 

Перетаскивание информации с помощью мыши стало стандартом для программ, работающих в Windows. Часто это бывает удобно и позволяет добиться более быстрой работы. В данной статье я постарался показать максимальное количество примеров использования данной технологии при разработке приложений в среде Delphi. Конечно, результат может быть достигнут различными путями, продемонстрированные приемы не являются единственными и, возможно, не всегда самые оптимальные, но вполне работоспособны, и указывают направление поиска. Надеюсь, что они побудят начинающих программистов к более широкому использованию Drag'n'Drop в своих программах, тем более что пользователи, особенно неопытные, быстро привыкают к перетаскивание и часто его применяют.

 

Проще всего делать Drag из тех компонентов, для которых однозначно ясно, что именно перетаскивать. Для этого устанавливаем у источника DragMode = dmAutomatic, а у приемника пишем обработчики событий OnDragOver - разрешение на прием, и OnDragDrop - действия, производимые при окончании перетаскивания.

 

 

Code:

// In the PageControl's OnMouseDown event handler:

 

procedure TForm1.PageControl1MouseDown(Sender: TObject;

Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

PageControl1.BeginDrag(False);

end;

 

 

// In the PageControl's OnDragDrop event handler:

 

procedure TForm1.PageControl1DragDrop(Sender, Source: TObject; X, Y: Integer);

const

TCM_GETITEMRECT = $130A;

var

i: Integer;

r: TRect;

begin

if not (Sender is TPageControl) then Exit;

with PageControl1 do

begin

   for i := 0 to PageCount - 1 do

   begin

     Perform(TCM_GETITEMRECT, i, lParam(@r));

     if PtInRect(r, Point(X, Y)) then

     begin

       if i <> ActivePage.PageIndex then

         ActivePage.PageIndex := i;

       Exit;

     end;

   end;

end;

end;

 

// In the PageControl's OnDragOver event handler:

 

procedure TForm1.PageControl1DragOver(Sender, Source: TObject; X,

Y: Integer; State: TDragState; var Accept: Boolean);

begin

if Sender is TPageControl then

   Accept := True;

end;

 

Взято с https://delphiworld.narod.ru

  

Code:

procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;

  State: TDragState; var Accept: Boolean);

begin

  if (y < 15) then {On the upper edge - should scroll up }

    SendMessage(TreeView1.Handle, WM_VSCROLL, SB_LINEUP, 0)

  else if (TreeView1.Height - y < 15) then { On the lower edge - should scroll down }

    SendMessage(TreeView1.Handle, WM_VSCROLL, SB_LINEDOWN, 0);

end;