在TabSet拖放中
procedure TForm
Shift: TShiftState; X
var
DragItem: Integer;
begin
if Button = mbLeft then
begin
DragItem := TabSet
if (DragItem >
TabSet
end;
end;
一個控件能否接收拖動項目是由該控件的OnDragOver事件決定的
procedure TForm
State: TDragState; var Accept: Boolean)
var
DropPos: Integer;
begin
if Source = TabSet
begin
DropPos := TabSet
Accept := (DropPos >
(DropPos < TabSet
end;
else
Accept := False;
end;
當OnDragOver事件處理過程返回的Accept為True且項目被放下時
procedure TForm
var
OldPos: Integer;
NewPos: Integer;
begin
if Source = TabSet
begin
OldPos := TabSet
NewPos := TabSet
if (NewPos >
TabSet
end;
end;
結束拖動操作的方式有兩種
拖動操作結束後源控件都要收到一條消息響應拖動結束事件OnEndDrag
在第六章最後開發的文件管理器應用實例
文件拖放移動指的是當用戶把一個文件拖動到目錄樹下的某一目錄並放下時
為了實現上述功能
為此我們定義了一個全局變量
var
CurentDirList: Array[
在DirectoryOutline的OnChange事件中
procedure TFMForm
begin
CreateCaption;
FileList
FileList
FileList
CurrentDirList[DriveTabSet
FileManager
end;
由於DriveTabSet在響應OnDragDrop事件前先響應OnClick事件
在這裡一個關鍵問題是我們判斷源控件時是用is操作符進行類型檢查
If Source is TFileList then
…
如果我們用下面的語句
If Source = FileList then
…
則移動
當解決了上述問題後我們的工作就只是遵循拖放的一般開發步驟
procedure TFMForm
Shift: TShiftState; X
begin
if Button = mbLeft then
with Sender as TFileListBox do
begin
if ItemAtPos(Point(X
BeginDrag(False)
end;
end;
ItemAtPos用來檢查當前是否有文件存在
[
From:http://tw.wingwit.com/Article/program/Delphi/201311/25211.html