Самоучитель по Delphi 7 для профессионалов



       модульные здания | Права сирот бесплатная юридическая консультация онлайн источник.      

Интерфейс переноса Drag-and-Drop - часть 3


type TDragState = (dsDragEnter, dsDragLeave, dsDragMove);

dsDragEnter — указатель появился над компонентом; dsDragLeave — указатель покинул компонент; dsDragMove — указатель перемещается по компоненту.

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

type TDragDropEvent = procedure(Sender, Source: TObject; X, Y: Integer)

of object;

property OnDragDrop: TDragDropEvent;

который вызывается при отпускании левой кнопки мыши на компоненте-приемнике. Доступ к источнику и приемнику обеспечивают параметры Source и Sender соответственно. Координаты мыши возвращают параметры X и Y.

При завершении переноса элемент управления — источник — получает соответствующее сообщение, которое обрабатывается методом

type TEndDragEvent = procedure(Sender, Target: TObject; X, Y: Integer)

of object;

property OnEndDrag: TEndDragEvent;

Источник и приемник определяются параметрами Sender и Target соответственно. Координаты мыши определяются параметрами X и Y.

Для программной остановки переноса можно использовать метод EndDrag источника (при обычном завершении операции пользователем он не используется):

procedure EndDrag(Drop: Boolean);

Параметр Drop = True завершает перенос. Значение False прерывает перенос.

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

Рис. 27.1. Главная форма проекта DemoDragDrop

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

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);




Содержание  Назад  Вперед