• 让窗体接受拖放, 并获取拖过来的文件信息


    原理分析:  
      
    这需要用到 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  
    

      

  • 相关阅读:
    基于AOP实现Ibatis的缓存配置过期策略
    Step by Step构建自己的ORM系列配置管理层
    云计算从基础到应用架构系列云计算的演进
    设计模式系列桥接模式
    云计算从基础到应用架构系列云计算的概念
    云计算从基础到应用架构系列虚拟化的技术(上)
    设计模式系列装饰模式
    typeof和GetType区别
    白话学习MVC(四)URL路由
    五、DirectX编程
  • 原文地址:https://www.cnblogs.com/qingsong/p/4033007.html
Copyright © 2020-2023  润新知