返回顶部
扶摇直上九万里,展翅高飞岂可待。

文件拖放

Use shellapi;
public
    { Public declarations }
     procedure TFfile(var Msg:TMessage);message WM_DROPFILES;

单文件拖拽到某个控件上:

public
    { Public declarations }
     procedure TFfile(var Message:TMessage);
var
  Form1: TForm1;
implementation
{$R *.dfm}
var
  OLDWndProc: TWndMethod;
procedure TForm1.TFfile(var Message:TMessage);
var
  buffer:array[0..1024] of Char;
begin
  if Message.Msg = WM_DropFiles then
  begin
    inherited;
    buffer[0]:=#0;
    DragQueryFile(Message.WParam,0,buffer,sizeof(buffer)); //获取拖入文件名称
    label1.Caption:=PChar(@buffer); //字符数组转换成字符串
  end
  else // 其他消息,调用原来的处理程序
    OLDWndProc(Message);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(panel1.Handle,true);
  OLDWndProc := panel1.WindowProc;
  panel1.WindowProc := Self.TFfile;
end;

单文件拖拽到窗体上:

procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(form1.Handle,true);
end;

procedure TForm1.TFfile(var Msg:TMessage);
var
  buffer:array[0..1024] of Char;
  mouse:TPoint;
  mouse_in:Boolean;
begin
  GetCursorPos(mouse);
  mouse:=ScreenToClient(mouse);//把文件拖到指定的区域,这里是拖到一个Tshape上
  if (mouse.Y <= (shape1.Top+shape1.Height))and(mouse.Y >= shape1.Top)and(mouse.x <= (shape1.left+shape1.width))and(mouse.x>= shape1.left) then
    mouse_in:=true
  else
    mouse_in:=false;
  if mouse_in=true then
  begin    //不指定区域,代码从这里开始就可以了
    buffer[0]:=#0;
    DragQueryFile(Msg.WParam,0,buffer,sizeof(buffer)); //获取拖入文件名称
    label1.Caption:=PChar(@buffer);//字符数组转换成字符串
    edit1.Text:=PChar(@buffer);
  end;
end;

多文件拖拽:

procedure TForm1.TFfile(var Msg: TMessage);
var
  FilesCount: Integer;// 文件总数
  i: Integer;
  buffer:array[0..1024] of Char;
begin
try
    buffer[0]:=#0;
    FilesCount:=DragQueryFile(Msg.WParam, $FFFFFFFF,nil,0); //获取文件个数
    Memo1.Lines.Add('文件总数为:'+IntToStr(FilesCount));
   // 循环获取文件名
    for i:=0 to FilesCount-1 do
    begin
      DragQueryFile(Msg.WParam, i, buffer,256); //获取拖拽文件路径名称
      Memo1.Lines.Add(buffer);
    end;
  finally
    DragFinish(Msg.WParam);
  end;
end;



posted on 2023-04-08 12:16  六十五度  阅读(19)  评论(0编辑  收藏  举报

导航