TCustomRichView.BeginOleDrag [VCL]

<< Нажмите, чтобы показать Содержание >>

TCustomRichView.BeginOleDrag [VCL]

Начинает перетаскивание выделенного фрагмента.

procedure BeginOleDrag;

Метод полезен для реализации перетаскивания вставленных в документ компонентов (все другие элементы перетаскиваются автоматически)

Пример

Этот пример реализует перетаскивание компонентов TButton.

1) Добавьте следующие поля в форму:

ClickedControl: TObject;

ClickPoint: TPoint;

2) Добавьте методы:

procedure TForm1.OnControlMouseDown(Sender: TObject;

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

begin

  if Button = mbLeft then

  begin

    RichViewEdit1.SelectControl(TControl(Sender));

    ClickedControl := Sender;

    ClickPoint := Point(X, Y);

  end;

end;

 

procedure TForm1.OnControlMouseMove(Sender: TObject;

  Shift: TShiftState; X, Y: Integer);

begin

  if (ssLeft in Shift) and (ClickedControl=Sender) and

    (Sqr(ClickPoint.X-X)+Sqr(ClickPoint.Y-Y)>10then

    RichViewEdit1.BeginOleDrag;

end;

3) Назначьте события создаваемым кнопкам:

  btn := TButton.Create(Self);

  btn.Caption := 'Кнопка';

  btn.OnMouseDown := OnControlMouseDown;

  btn.OnMouseMove := OnControlMouseMove;

  RichViewEdit1.InsertControl('',btn,rvvaBaseline);

4) События не сохраняются в RVF, поэтому переприсвойте их после загрузки из RVF. Используйте событие OnControlAction:

procedure TForm1.RichViewEdit1ControlAction(Sender: TCustomRichView;

  ControlAction: TRVControlAction; ItemNo: Integer; var ctrl: TControl);

begin

  if ControlAction=rvcaAfterRVFLoad then

  begin

    if ctrl is TButton then begin

      TButton(ctrl).OnMouseDown := OnControlMouseDown;

      TButton(ctrl).OnMouseMove := OnControlMouseMove;

     end;

  end;

end;