9.2开发拖放功能的一般步骤
拖放作为Windows提供的一种方便操作对象的功能,在Delphi中可以很容易地开发
出来。根据拖放操作的过程可以把开发步骤划分为四个阶段,即:
●开始拖动操作
●接收拖动项目
●放下拖动项目
●终止拖动操作
在介绍过程中我们将结合一个TabSet(标签集)的拖放操作实例。界面设计如图。
在运行时当用户把一个标签拖动到另一个标签的位置时,该标签将移动到该位置并引起
标签集的重新布置。
9.2.1开始拖动操作
当拖动模式(DragMode)设置为dmAutomatic时,用户在源控件上按下鼠标时拖动自动
开始;当设置为dmManual时通过处理鼠标事件来决定拖动是否开始。如果想开始拖动调
用BeginDrag方法。
在TabSet拖放中,我们用下面的MouseDown事件处理过程来开始一个标签的拖动。
首先判断按下的是否是左键,而后再判断项目是否合法。
procedure TForm1.TabSet1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
DragItem: Integer;
begin
if Button = mbLeft then
begin
DragItem := TabSet1.ItemAtPos(Point(X, Y));
if (DragItem > -1) and (DragItem < TabSet1.Tabs.Count) then
TabSet1.BeginDrag(False);
end;
end;
9.2.2接收拖动项目
一个控件能否接收拖动项目是由该控件的OnDragOver事件决定的。在TabSet拖动中,主要是利用鼠标的位置进行判断。
procedure TForm1.TabSet1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var
DropPos: I