zoukankan      html  css  js  c++  java
  • Delphi组件编写之一(文件拖拽原理--利用消息WM_DROPFILES)

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

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

    ------------本人加了一点东西,加了一个图标,试了一下,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结束

  • 相关阅读:
    一个转角--->程序猿
    一个转角--->程序猿
    科技申报项目总结
    科技申报项目总结
    mysql事务
    mysql事务
    浅谈SSM框架
    浅谈SSM框架
    Spring-IOC(解释依赖注入DI)
    Maven基础知识,如何搭建Maven环境,Maven常用命令,如何搭建一个Maven项目
  • 原文地址:https://www.cnblogs.com/dmqhjp/p/14923719.html
Copyright © 2011-2022 走看看