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



              

Интерфейс присоединения Drag-and-Dock - часть 2


var DragObject: TDragDockObject) of object;

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

В первом из методов sender — это переносимый объект, a DragObject — специальный объект, создаваемый на время процесса переноса и содержащий его свойства. Во втором sender — это также переносимый объект, a Target — объект-док.

Док тоже извещается о событиях во время переноса:

type TGetSitelnfoEvent = procedure(Sender: TObject; DockClient: TControl;

var InfluenceRect: TRect; MousePos: TPoint; 

var CanDock: Boolean)

of object;

TDockOverEvent = procedure(Sender: TObject; Source: TDragDockObject;

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

TDockDropEvent = procedure(Sender: TObject;

 Source: TDragDockObject;

X, Y: Integer) of object;

TUnDockEvent = procedure(Sender: TObject; Client: TControl; NewTarget:

TWinControl; var Allow: Boolean) of object;

Как только пользователь нажал кнопку мыши над переносимым компонентом и начал сдвигать его с места, всем потенциальным докам (компонентам, свойство которых Docksite установлено в True) рассылается событие onGetsiteinfo. С ним передаются параметры: кто хочет "приземлиться" (параметр Dockclient) и где (MousePos). В ответ док должен сообщить решение, принимает он компонент (параметр CanDock) и предоставляемый прямоугольник (infiuenceRect) или нет. При помощи этого события можно принимать только определенные элементы управления, как показано в примере:

procedure TForml.PanellGetSitelnfо(Sender: TObject; DockClient: TControl; var InfiuenceRect: 

TRect; MousePos: TPoint; var CanDock: Boolean); 

begin

if DockClient is TBitBtn then CanDock := False; 

end;

Два последующих события в точности соответствуют своим аналогам из механизма переноса Drag-and-Drop). Событие onDockOver происходит при перемещении перетаскиваемого компонента над доком, OnDockDrop — в момент его отпускания. Наконец, onUnDock сигнализирует об уходе компонента с дока и происходит в момент его "приземления" в другом месте.




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