★★ListView的拖放问题(Drag)★★ 想实现ListView接受外部的拖放,如从资源管理器中拖一个文件到当前程序的ListView中,请问怎么实现?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没做过但listview不是支持所有文件的托放的!·最笨的方法是一行行向里面写呗 http://www.delphibox.com/article.asp?articleid=15List列表拖放排序记忆演示 unit Unit1;interfaceuses Windows, ShellAPI, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls;type TForm1 = class(TForm) ListView1: TListView; procedure FormCreate(Sender: TObject); private { Private declarations } procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES; procedure AppOnMessage(var Msg: TMsg; var Handled: Boolean); public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.AppOnMessage(var Msg: TMsg; var Handled: Boolean);var WMD: TWMDropFiles;begin if Msg.message = WM_DROPFILES then begin // MessageBeep(0); WMD.Msg := Msg.message; WMD.Drop := Msg.wParam; WMD.Unused := Msg.lParam; WMD.Result := 0; WMDropFiles(WMD); Handled := TRUE; end;end;procedure TForm1.FormCreate(Sender: TObject);begin DragAcceptFiles(listview1.Handle, True); // DragAcceptFiles(Handle, True);// DragAcceptFiles(Application.Handle, True); Application.OnMessage := AppOnMessage;end;procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);var N: Word; buffer: array[0..180] of Char; item: TListItem;begin with Msg do begin for N := 0 to DragQueryFile(Drop, $FFFFFFFF, buffer, 1) - 1 do begin DragQueryFile(Drop, N, Buffer, 80); Item := ListView1.Items.Add; item.Caption := StrPas(Buffer); end; DragFinish(Drop); end;end;end. void __fastcall TForm2::DragDropFiles(TMessage &msg){ char FileName[_MAX_PATH]; // 缓冲区 int i, Sum; // 获得拖拉的文件数目,该功能由第二个参数决定 Sum = DragQueryFile( HDROP(msg.WParam), 0xFFFFFFFF, NULL, 0); // 显示拖拉文件的数目 for( i=0; i<Sum; i++ ) { // 获取第i个拖拉文件的名字,并保存在缓冲区FileName中 DragQueryFile( HDROP(msg.WParam), i, FileName, _MAX_PATH); Form2->ListBox1->Items->Add(FileName); //根据扩展名,判断是否加到文件列表中 ListBox1->Items->Delete(Form2->ListBox1->Items->Count-1); } // 释放应用程序为传递文件名而开辟的内存空间 DragFinish( HDROP(msg.WParam) );自己整理一下! 用fastreport的frxPreview控件预览报表时,出现发生下列的错误:List index out of bounds (-1)Stack overflow 救命啊,高人们,给看看,这是什么病毒!如何解决 TdxDBGrid能实现多表头的功能吗 哭天喊地 跪求 达人帮助 请教:Sql Server中,如何创建自动编号的字段!谢谢! Delphi中TMethod的用法 如何用程序生成word文件??帮帮忙 如何让tqrdbtext自动换行?? 关于打印时出现纸张跳行现象... 高手请进! 有关Delphi的XML Mapping Tool 如何对image上的图形进行模糊处理呢?
但listview不是支持所有文件的托放的!·
最笨的方法是一行行向里面写呗
List列表拖放排序记忆演示
Windows, ShellAPI, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs, StdCtrls, ComCtrls;type
TForm1 = class(TForm)
ListView1: TListView;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
procedure AppOnMessage(var Msg: TMsg; var Handled: Boolean);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.AppOnMessage(var Msg: TMsg; var Handled: Boolean);
var
WMD: TWMDropFiles;
begin
if Msg.message = WM_DROPFILES then
begin
// MessageBeep(0);
WMD.Msg := Msg.message;
WMD.Drop := Msg.wParam;
WMD.Unused := Msg.lParam;
WMD.Result := 0;
WMDropFiles(WMD);
Handled := TRUE;
end;end;procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(listview1.Handle, True);
// DragAcceptFiles(Handle, True);
// DragAcceptFiles(Application.Handle, True);
Application.OnMessage := AppOnMessage;end;procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
N: Word;
buffer: array[0..180] of Char;
item: TListItem;
begin with Msg do
begin
for N := 0 to DragQueryFile(Drop, $FFFFFFFF, buffer, 1) - 1 do
begin
DragQueryFile(Drop, N, Buffer, 80);
Item := ListView1.Items.Add;
item.Caption := StrPas(Buffer);
end;
DragFinish(Drop);
end;end;end.
{
char FileName[_MAX_PATH]; // 缓冲区
int i, Sum; // 获得拖拉的文件数目,该功能由第二个参数决定
Sum = DragQueryFile( HDROP(msg.WParam), 0xFFFFFFFF, NULL, 0); // 显示拖拉文件的数目
for( i=0; i<Sum; i++ )
{
// 获取第i个拖拉文件的名字,并保存在缓冲区FileName中
DragQueryFile( HDROP(msg.WParam), i, FileName, _MAX_PATH);
Form2->ListBox1->Items->Add(FileName); //根据扩展名,判断是否加到文件列表中
ListBox1->Items->Delete(Form2->ListBox1->Items->Count-1);
}
// 释放应用程序为传递文件名而开辟的内存空间
DragFinish( HDROP(msg.WParam) );自己整理一下!