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

Теперь настало время закрепить полученные знания на практике. Рассмотрим небольшой пример. В проекте DemoDragDrop на основе механизма Drag-and-Drop реализована передача текста между текстовыми редакторами и перемещение панелей по форме (рис. 27.1).

 

Листинг 27.1. Секция implementation модуля главной формы проекта DemoDragDrop

Code:

implementation

{$R *.DFM}

 

procedure TMainForm.EditlMouseDown(Sender: TObject;

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

begin

if Button = mbLeft then

   TEdit(Sender).BeginDrag(True);

end;

 

procedure TMainForm.Edit2DragOver(Sender, Source: TObject;

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

begin

if Source is TEdit then

   Accept := True

else

   Accept := False;

end;

 

procedure TMainForm.Edit2DragDrop(Sender, Source: TObject;

X, Y: Integer);

begin

TEdit(Sender).Text := TEdit(Source).Text;

TEdit(Sender).SetFocus;

TEdit(Sender).SelectAll;

end;

 

procedure TMainForm.EditlEndDrag(Sender, Target: TObject;

X, Y: Integer);

begin

if Assigned(Target) then

   TEdit(Sender).Text := 'Текст перенесен в ' + TEdit(Target).Name;

end;

 

procedure TMainForm.FormDragOver(Sender, Source: TObject;

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

begin

if Source.ClassName = 'TPanel' then

   Accept := True

else

   Accept := False;

end;

 

procedure TMainForm.FormDragDrop(Sender, Source: TObject;

X, Y: Integer);

begin

TPanel(Source).Left := X;

TPanel(Source).Top := Y;

end;

 

end.

 

 

Для однострочного редактора Edit1 определены методы-обработчики источника. В методе EditiMouseDown обрабатывается нажатие левой кнопки мыши

 

и включается механизм переноса. Так как свойство DragMode для Edit1 имеет значение dmManual, то компонент без проблем обеспечивает получение фокуса и редактирование текста.

 

Метод EditiEndDrag обеспечивает отображение информации о выполнении переноса в источнике.

 

Для компонента Edit2 определены методы-обработчики приемника. Метод Edit2DragOver проверяет класс источника и разрешает или запрещает прием.

 

Метод Edit2DragDrop осуществляет перенос текста из источника в приемник.

 

Примечание

 

Обратите внимание, что оба компонента TEdit одновременно являются источниками и приемниками. Для этого каждый из них использует методы-обработчики другого. А исходный код методов настроен на обработку владельца как экземпляра класса TEdit.

 

Форма, как приемник Drag-and-Drop, обеспечивает перемещение панели Panel2, которая выступает в роли источника. Метод FormDragOver запрещает прием любых компонентов, кроме панелей. Метод FormDragDrop осуществляет перемещение компонента.

 

Панель не имеет своих методов-обработчиков, т. к. работает в режиме dmAutomatic и не нуждается в дополнительной обработке завершения переноса.

 

https://delphiworld.narod.ru/

DelphiWorld 6.0

 

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

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

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

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


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