tlistview使用--拖放操作 (轉)

amyz發表於2007-11-13
tlistview使用--拖放操作 (轉)[@more@]

下列是本人在開發過程中根據操作上的方便,寫的一個小過程,主要實現了向listview中拖放功能,其如下:

procedure tyanzheng.AppMessage(var Msg: TMsg;var Handled: Boolean);
var
nFiles, I: Integer;
ListItem: TListItem;
begin
if (Msg.message = WM_DROPFILES) and (msg.hwnd = ListView1.Handle) then
begin
if MessageDlg('確定要加入嗎',
  mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin
// 取dropped files的數量
nFiles := DragQueryFile (Msg.wParam, $FFFFFFFF, nil, 0);
// 迴圈取每個拖下檔案的全檔名
try
for I := 0 to nFiles - 1 do
begin
// 為檔名分配緩衝 allocate memory
SetLength (Filename, 80);
// 取檔名 read the file name
DragQueryFile (Msg.wParam, I, PChar (Filename), 80);
Filename := PChar (Filename);
//將全檔名分解程檔名和路徑
ListItem := ListView1.Items.Add;
ListItem.Caption := ExtractFileName(FileName);
listitem.ImageIndex:=6;
ListItem.SubItems.Add(ExtractFilePath(FileName));
filepath:=extractfilepath(filename);
//drage:=true;
end;
finally
//結束這次拖放操作
DragFinish (Msg.wParam);
end;
//標識已處理了這條訊息
Handled := True;
 movefile(pchar(filename),pchar(filespath+listitem.caption));
end;end;
end;
注意:本程式功能是完整的,程式中使用了movefile,也就是說,實現了把操作的檔案移到了所在的目錄中,因此建議在過程中不要用重要的檔案作除錯用。

程式中用到了向傳送訊息,不明白的話,建議看一些有關方面的文章(本程式可直接執行,須加入到系統中),本程式與《tlistview顯示資料夾內容中的程式結合使用,效果更好》

程式用在showform事件中:用法如下:

//設定需要處理檔案WM_DROPFILES拖放訊息
DragAcceptFiles(ListView1.Handle, TRUE);
//設定AppMessage過程來捕獲所有訊息
Application.OnMessage := AppMessage;

謝謝支援


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-982091/,如需轉載,請註明出處,否則將追究法律責任。

相關文章