下列程序是本人在軟件開發過程中根據用戶操作上的方便,寫的一個小過程,主要實現了向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函數,也就是說,實現了把操作的文件移到了系統所在的目錄中,因此建議在調試過程中不要用重要的文件作調試用。
程序中用到了向Windows發送消息,不明白的話,建議看一些有關方面的文章(本程序可直接運行,須加入到系統中),本程序與《tlistvIEw顯示文件夾內容中的程序結合使用,效果更好》
程序用在showform事件中:用法如下:
//設置需要處理文件WM_DROPFILES拖放消息
DragAcceptFiles(ListVIEw1.Handle, TRUE);
//設置AppMessage過程來捕獲所有消息
Application.OnMessage := AppMessage;