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

type TEndDragEvent = procedure (Sender, Target: TObject;
X, Y: Integer) of object;
property QnEhdDrag: TEndDragEvent;

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

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

procedure EndDrag (Drop: Boolean) ;

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

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

Программирование в Delphi 7

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

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

implementation ($R *.DFM}

procedure TMainForm.EditlMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin if Button = mbLeft then TEdit(Sender).BeginDrag(True);
end;
procedure TMainForm.Edit2Drag0ver(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) .Select-All;
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.

Для однострочного редактора Editi определены методы-обработчики источника. В методе EditlMouseDown обрабатывается нажатие левой кнопки мыши и включается механизм переноса. Так как свойство Е)га^осЬ для ЕсШ:1 имеет значение с!тМапиа1, то компонент без проблем обеспечивает получение фокуса и редактирование текста.

Метод ЕйгШЕпсЮгад обеспечивает отображение информации о выполнении переноса в источнике.

Для компонента ЕсШ2 определены методы-обработчики приемника. Метод ЕсИ12Вга§0уег проверяет класс источника и разрешает или запрещает прием.

Метод ШИ2Вга§Вгор осуществляет перенос текста из источника в приемник.

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

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


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Июнь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс