|
<< Нажмите, чтобы показать Содержание >> 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)>10) then
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;