码农的笔记

Delphi虽好,但已不流行; 博客真好,可以做笔记

博客园 首页 新随笔 联系 订阅 管理

---------------------------

哈哈,这个是某个大神的,直接搬过来;

 

------------本人加了一点东西,加了一个图标,试了一下,Exe图标可以放上来,提供一个思路

 

-----------------------------

 

---------------Unit开始

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Panel1: TPanel;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
protected
procedure WndProc(var Message: TMessage); override;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses ShellAPI;
{ DragAcceptFiles 和DragQueryFile 是声明在ShellAPI 单元的}

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True); {将Form1 注册为文件拖放接收控件}
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
DragAcceptFiles(Handle, False); {注销Form1}
end;
{覆盖Form1 的窗口过程WndProc,这样就可以捕获WM_DROPFILES 消息}
procedure TForm1.WndProc(var Message: TMessage);
var
Count, Index, hDrop: Integer;
PFileName: PChar;
begin
if Message.Msg = WM_DROPFILES then
begin
hDrop := Message.WParam; {取得系统drop 结构的句柄,在后面要用到它}
GetMem(PFileName, MAX_PATH);
{取得文件个数}
Count := DragQueryFile(hDrop, MAXDWORD, PFileName, MAX_PATH-1);
Memo1.Clear;
for Index := 0 to Count-1 do
begin
DragQueryFile(hDrop, Index, PFileName, MAXBYTE);
{取得每个文件的路径并放入缓冲区PFileName }
Memo1.Lines.Add(PFileName);
if Index=0 then//暂时只放一张图标,测试时拖动一个Exe文件可以看到图标
begin
Image1.Picture.Icon.Handle := ExtractIcon(Handle,PFileName,0);//这个限定死了,只有ico的图片才会显示,//拖动Exe程序和Ico的图片会显示
end;
end;
FreeMem(PFileName);
DragFinish(hDrop);
{当WM_DROPFILES 被处理后,应该调用DragFinish 释放资源}
end else
inherited;
end;

end.

--------------Unit结束

 

---------------Form开始

object Form1: TForm1
Left = 600
Top = 196
Width = 902
Height = 675
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object Memo1: TMemo
Left = 0
Top = 0
Width = 886
Height = 161
Align = alTop
ImeName = '中文(简体) - 搜狗拼音输入法'
ScrollBars = ssBoth
TabOrder = 0
end
object Panel1: TPanel
Left = 0
Top = 161
Width = 886
Height = 476
Align = alClient
TabOrder = 1
object Image1: TImage
Left = 8
Top = 16
Width = 265
Height = 145
Center = True
Stretch = True
end
end
end

---------------Form结束

posted on 2021-06-23 17:27  码农的笔记  阅读(485)  评论(0编辑  收藏  举报