zoukankan      html  css  js  c++  java
  • 让窗体接受拖放, 并获取拖过来的文件信息 回复 "海浪问" 的问题


    问题来源: http://www.cnblogs.com/del/archive/2009/01/20/1353117.html#1435746

    原理分析:

    这需要用到 ShellAPI 单元的两个函数: DragAcceptFiles、DragQueryFile;

    用 DragAcceptFiles(窗口句柄, True); 以让窗口能够接受拖放;

    然后就等待 WM_DROPFILES 消息, 并用 DragQueryFile 函数处理消息参数, 从而获取信息.

    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
      protected
        procedure WMDropFiles(var Message: TWMDropFiles); message WM_DROPFILES;
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses ShellAPI;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      DragAcceptFiles(Handle, True);
    end;
    
    procedure TForm1.WMDropFiles(var Message: TWMDropFiles);
    var
      p: array[0..255] of Char;
      i,count: Integer;
    begin
      {先获取拖拽的文件总数}
      count := DragQueryFile(message.Drop, $FFFFFFFF, nil, 0);
    
      {分别获取文件名}
      for i := 0 to count-1 do
      begin
        DragQueryFile(message.Drop, i, p, SizeOf(p));
        Memo1.Lines.Add(p); {既然知道了文件名, 当然也可以随手打开它}
      end;
    end;
    
    end.
    

    窗体文件:
    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 154
      ClientWidth = 261
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      OnCreate = FormCreate
      PixelsPerInch = 96
      TextHeight = 13
      object Memo1: TMemo
        Left = 0
        Top = 0
        Width = 261
        Height = 129
        Align = alTop
        Lines.Strings = (
          'Memo1')
        ScrollBars = ssBoth
        TabOrder = 0
      end
    end
    
  • 相关阅读:
    N皇后
    水域大小
    1221 分割平衡字符串
    1391 检查是否存在有效路径 DFS
    盛最多水的容器11 双指针
    烧饼排序
    每日日报8——软件设计④|抽象工厂模式(人与肤色)
    每日日报5——登录功能的实现(JAVA)
    每日日报4——软件设计②|简单工厂模式(女娲造人)
    vue利用transition过渡动画实现轮播图
  • 原文地址:https://www.cnblogs.com/del/p/1379130.html
Copyright © 2011-2022 走看看