zoukankan      html  css  js  c++  java
  • 让窗体接受拖放, 并获取拖过来的文件信息

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

      

  • 相关阅读:
    POJ3094 UVALive3594 HDU2734 ZOJ2812 Quicksum【进制】
    UVALive5583 UVA562 Dividing coins
    POJ1979 HDU1312 Red and Black【DFS】
    POJ1979 HDU1312 Red and Black【DFS】
    POJ2386 Lake Counting【DFS】
    POJ2386 Lake Counting【DFS】
    HDU4394 Digital Square
    HDU4394 Digital Square
    UVA213 UVALive5152 Message Decoding
    UVA213 UVALive5152 Message Decoding
  • 原文地址:https://www.cnblogs.com/qingsong/p/4033007.html
Copyright © 2011-2022 走看看