历史

利用浏览窗口任意文件计划

本节主要学习利用三个与 DragDrop 有关的函数来完成从浏览窗口取得拖放过来的文件及详细路径。这三个函数是: DragAcceptFiles、DragQueryFile、DragFinish。 它们的函数原形如下:

VOID DragAcceptFiles(

HWND hWnd, // 接受拖拽文件窗口的句柄

BOOL fAccept // 接受条件 true = 打开,false = 关闭

);

UINT DragQueryFile(

HDROP hDrop, // 指向 DragDrop 结构的指针

却连一个原创的节目都没有办法在市场上站住吗?除了一些棚内综艺节目 UINT iFile, // 拖拽文件的索引

LPTSTR lpszFile, // 文件名字串缓冲

UINT cch // 文件名长度

);

VOID DragFinish(

HDROP hDrop // 释放 DragDrop 的内存块

);

从浏览窗口获取一个 DragDrop 文件的流程为:首先用 DragAcceptFiles 函数激活接受窗口的 DragFropAcceptance 属性,然后重载 Windows 的 WM_DROPFILES 消息,在 WM_DROPFILES 消息处理机制里利用 DragAcceptFiles函数分析拖拽文件的详细情况。最后释放掉 DragDrop 结构的内存块,在 WM_DROPFILES 消息的 WParam 参数就指向这个 DragDrop 的内存地址。当 DragDrop 的文件数不止一个时,只消简单的循环 DragQueryFile 就行。

范例:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;

type

TForm1 = class(TForm)

ListBox1: TListBox;

procedure FormCreate(Sender: TObject);

protected

procedure WMDROPFILES (var Msg: TMessage); message WM_DROPFILES; //重载 Windows 的 WM_DROPFILES 消息

private

{ Private-Deklarationen }

public

{ Public-Deklarationen }

end;

var

Form1: TForm1;

implementation

uses shellapi;

{$R *.DFM}

procedure DROPFILES (var Msg: TMessage);

var i,nfiles,

size : integer;

Dateiname : PChar;

begin

inherited;

nfiles := DragQueryFile(aram, $FFFFFFFF, Dat ame, 255); // nfiles 保存 DragDrop 的文件数

for i := 0 to (nfiles - 1) do begin

size := DragQueryFile(aram, i , nil, 0) + 1; // 先知道文件名长度

Dateiname:= StrAlloc(size);

DragQueryFile(aram,i , Dateiname, size);

d(StrPas(Dateiname));

StrDispose(Dateiname);

end;

DragFinish(aram);

end;

procedure rmCreate(Sender: TObject);

begin

DragAcceptFiles( Handle, true );

end;

end.

查看本文来源

成都治疗男科医院哪好
牙疼怎么缓解
扬州治疗白癜风去哪里
友情链接