自制支持文件拖放的VCL组件

清华大学《DeepSeek全系列1-11版完整手册》资料全部都收集齐了 在人工智能重构全球科技竞争格局的当下,对前沿科技的探索已成为驱动创新跃迁的战略支点‌,清华大学带来了令人瞩目的大礼——DeepSeek 七版全资料无保留公开,,这一震撼发布,使每位AI追梦者得以零距离触碰智能算力基建的核心密码,开启从技术认知到产业赋能的进阶之路‌第七弹-使用DeepSeek赋能家庭教育也在第一时间奉献给大家,我们提供了一个知识库可以给大家下载最新的资料针对大家对DeepSeek学习资料的集中需求,特收集全网优质教程资源,并建立实时更新机制。 阅读详情
    用过Winamp的朋友都知道,Winamp的界面能支持文件拖放,当你想欣赏某MP3文件时,只需要
将文件拖到Winamp的窗口上,然后放开鼠标就行了。那我们如何让自己的程序也实现这样的功能
呢?我们可以通过改进开发工具提供的标准组件来实现。下面以Delphi环境中的ListBox组件为
例,让ListBox支持文件拖放。
    首先介绍一下要用到的API函数:
    DragAcceptFiles() 初始化某窗口使其允许/禁止接受文件拖放
    DragQueryFile() 查询拖放的文件名
    DragFinish() 释放拖放文件时使用的资源
    实现的基本原理如下:首先调用DragAcceptFiles()函数初始化组件窗口,使其允许接受文件
拖放,然后等待WM_DropFiles消息(一旦用户进行了拖放文件操作,组件窗口即可获得此消息),
获得消息后即可使用DragQueryFile()函数查询被拖放的文件名,最后调用DragFinish()释放资
源。
    
    因为在VCL类库中,ListBox组件,所属类名为:TListBox,所以我们可以从TListBox继承建立
自己的组件。新组件名为:TDropFileListBox,它比标准TListBox增加了一个OnDropFiles事件和
一个DropEnabled属性。当DropEnabled为True时即可接受文件拖放,文件拖放完成后激发
OnDropFiles事件,该事件提供一个FileNames参数让用户获得文件名。

    组件的代码如下:

{       TDropFileListBox V1.00 Component                }
{       Copyright (c) 2000.5 by Shen Min, Sunisoft      }
{       Email: sunisoft@21cn.com                        }
{       Web: http://www.sunistudio.com                  }
unit DropFileListBox;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ShellApi; //增加ShellApi单元,因为所使用的三个API函数声明于此单元文件中
type
  TMyNotifyEvent = procedure (Sender: TObject;FileNames:TStringList) of object; //自定
义事件类型。
  TDropFileListBox = class(TListBox) //新的类从TListBox继承
  private
    { Private declarations }
    FEnabled:Boolean; //属性DropEnabled的内部变量
  protected
    FDropFile:TMyNotifyEvent; //事件指针
    procedure DropFiles(var Mes:TMessage);message WM_DROPFILES;
    procedure FDropEnabled(Enabled:Boolean); //设置DropEnabled属性的过程
    { Protected declarations }
  public
    constructor Create(AOwner: TComponent);override;
    destructor Destroy;override;
    { Public declarations }
  published
    property OnDropFiles:TMyNotifyEvent read FDropFile write FDropFile;
    property DropEnabled:Boolean read FEnabled write FDropEnabled;
    { Published declarations }
  end;
procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Sunisoft', [TDropFileListBox]); //注册组件到组件板上
end;

constructor TDropFileListBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FEnabled:=true; //类被构造时,使DropEnabeld的默认值为True
end;

destructor TDropFileListBox.Destroy;
begin
  inherited Destroy;
end;

//改变属性DropEnabled的调用过程
procedure TDropFileListBox.FDropEnabled(Enabled:Boolean);
begin
  FEnabled:=Enabled;
  DragAcceptFiles(Self.Handle,Enabled);//设置组件窗口是否接受文件拖放
end;

//接受WM_DropFiles消息的过程
procedure TDropFileListBox.DropFiles(var Mes:TMessage);
var FN:TStringList;
    FileName:array [1..256] of char;
    sFN:String;
    i,Count,p:integer;
begin
  FN:=TStringList.Create;
  Count:=DragQueryFile(Mes.WParam,$FFFFFFFF,@FileName,256);//得到拖放文件的个数
  For i:=0 to Count-1 do
    begin
      DragQueryFile(mes.WParam,i,@FileName,256);//查询文件名称
      sFN:=FileName;
      p:=pos(chr(0),sFN);//去掉文件名末尾的ASCII码为0的字符
      sFN:=copy(sFN,1,p-1);
      FN.Add(sFN);
    end;
  DragFinish(mes.WParam); //释放所使用的资源
  if Assigned(FDropFile) then
    FDropFile(self, FN); //调用事件,并返回文件名列表参数
  FN.Free;
end;

end.

    该组件安装后即可使用,我们可以新建一个工程,将该组件放置在Form上,然后在
TDropFileListBox组件的OnDropFiles事件中写下具体处理拖放操作的代码。

    例如将所有拖放的文件名加入该列表中,添加代码如下:

procedure TForm1.DropFileListBox1DropFiles(Sender: TObject;FileNames: TStringList);
begin
  DropFileListBox1.Items.AddStrings(FileNames);
end;

    运行一下看看,是不是很有趣?本文仅仅对于ListBox组件做了扩展,你也可以对其它组件做
类似的扩展,实现支持文件的拖放。
镜像源对比评测:阿里云、清华、华为云哪个更适合你? 本文对国内三大主流镜像源阿里云、清华TUNA和华为云进行了深度评测,从下载速度、资源覆盖范围和稳定性三个维度提供详细对比数据。通过实测分析,帮助开发者根据项目需求选择最佳镜像源解决方案,提升软件开发效率。 阅读详情

相关推荐

LaTeX安装提速指南:清华镜像配置与TeXstudio中文环境调优

LaTeX作为学术排版的事实标准,其发行版TeX Live的安装效率直接影响写作体验。默认海外源下载速度极慢,通过配置清华镜像源,可将安装时间从数小时压缩至十几分钟。镜像加速不仅作用于安装阶段,还持续优化tlmgr宏包更新。结合TeXstudio编辑器,配置XeLaTeX编译器和中文环境,能有效解决中文文档编译报错、拼写检查干扰等常见问题。本文分享从镜像配置到环境调优的完整实践,帮助用户快速搭建稳定高效的LaTeX写作环境。

weixin_34232744的博客 606

jq 可拖拽布局组件

html 非常好 jq 可拖拽布局组件 向不同方向jq 可拖拽布局组件

别再傻等Jenkins插件下载了!保姆级更换清华镜像源教程(解决99%安装失败)

本文提供Jenkins插件下载加速的保姆级教程,通过配置清华镜像源解决99%的安装失败问题。详细步骤包括修改更新站点URL、验证配置生效及常见问题排查,显著提升插件下载速度和成功率,适用于国内开发者优化Jenkins使用体验。

weixin_33728708的博客 680

Vue自定义组件——封装一个简单的可拖拽的弹出框 可拖拽的Dialog

首先明确需要传入组件的属性: * @Props: dialogVisible Number 非0打开 allowDrag Boolean 是否可以拖拽 noFoot Boolean 是否显示按钮行 @submit Function 点击提交按钮的回调 --> 设计组件的组成部分,这里简单的加了一个遮罩,只有遮罩层和弹窗主体。 用到了h5的drag属性https://www.ru...

丶扁扁的糖是扁的 的博客 1379

2026年最稳HuggingFace镜像站实测:hf-mirror.com vs 阿里/清华镜像速度对比

本文深度评测2026年三大HuggingFace镜像站(hf-mirror.com、阿里ModelScope和清华镜像)的性能表现,包括下载速度、断点续传成功率等核心指标。通过实测数据和技术原理分析,帮助开发者选择最适合的镜像解决方案,提升AI模型下载效率。

weixin_33712987的博客 824

25届电信保研经验贴(清华大学电子工程系,工程硕博)

学校:中九专业:电子信息工程加权:92.89绩点:3.91/4.0rank:前五学期rank2/95,综合排名rank1(前六学期和综合排名出的晚,实际上只用到了前五学期)科研竞赛:市级大创、数模省一、数竞省二,其他校奖若干英语:六级462、四级548个人感觉:rank=科研>竞赛>英语至于面试,大家一定要提前准备,我总结了电子信息保研面试复习资料和英语口语资料,请大家看我后续更新。总之rank和科研必须得有一项,要么就rank高,很多强com院校入营看重rank。

qq_68608661的博客 4320

细说制作VCL 组件

制作组件,是Delphi应用中最激动人心也是最有趣的内容之一,程序设计者制作组件的目的之一,是把大量的重复劳动用组件的方法定制起来,加快软件开发的效率。当我们向Delphi添加一个新的软件包时,实际上就是使用了一个新的类扩展了VCL ,这个新类从一个已有组件相关的类中派生出来,并向继承它的类添加了新的功能。   VCL(Visual Component Library)构件,是Delphi的核心,

工作是我的生活 我为工作而陶醉 972

CentOS7换源避坑指南:为什么推荐清华源?实测下载速度对比(2024版)

本文针对CentOS7用户,深度解析了更换国内镜像源的必要性与策略。通过2024年实测数据,对比了阿里云与清华大学镜像源在不同地域的速度与稳定性,并提供了企业级部署、本地仓库搭建等高级配置方案与常见问题避坑指南,帮助用户根据自身网络环境做出最优选择。

weixin_29240343的博客 415

Ubuntu22.04下用清华镜像加速Rust环境配置:从rustc到nushell的全流程指南

本文详细介绍了在Ubuntu22.04系统下利用清华镜像源快速配置Rust开发环境的全流程,包括rustc、rustup、cargo等基础工具链的安装与优化,以及现代化终端nushell的配置与使用技巧,帮助开发者高效搭建Rust开发环境。

weixin_29213827的博客 412

告别网络卡顿:用清华源和Screen后台搞定Autoware.universe在Ubuntu 22.04的Docker安装

本文提供了一套针对国内网络环境优化的Autoware.universe在Ubuntu 22.04上的Docker安装指南,涵盖清华源加速、Screen后台任务管理等核心技巧。通过详细的步骤和优化配置,帮助开发者高效解决网络卡顿、依赖安装失败等问题,实现快速部署ROS 2开源自动驾驶平台。

一名菜鸟攻城师 536

Nature | 清华团队:LLM 衰老评估框架,低成本、高精准,适合大规模人群应用!

清华大学底骞团队在《Nature Medicine》发表研究,提出基于大型语言模型(LLM)的衰老评估新方法。该研究利用健康检查报告文本数据,通过Llama3等LLM预测个体整体及器官特异性衰老状态,在超1000万人的6个队列中验证显示:LLM预测的全因死亡率一致性指数达0.757,显著优于传统指标;器官年龄预测也优于机器学习模型。研究证实年龄差与多种疾病风险显著相关,并展示LLM在动态衰老评估和生物标志物发现中的潜力,为大规模个性化健康管理提供了高效解决方案。

LLM_jingjinzhilu的博客 1407

保姆级教程:在Ubuntu 22.04上用Miniconda和清华源搞定RKNN-ToolKit2环境(避坑指南)

本文提供了一份详细的教程,指导在Ubuntu 22.04上使用Miniconda和清华源搭建RKNN-ToolKit2环境,特别针对RK3568开发板的NPU加速能力优化。教程涵盖从基础环境准备到RKNN-ToolKit2安装、验证及常见问题解决方案,帮助开发者高效完成环境配置并避免常见陷阱。

weixin_30566063的博客 1924

Homebrew 国内镜像源深度评测:清华/中科大/阿里云 3大源速度与稳定性实测

本文深度评测了国内三大Homebrew镜像源(清华、中科大、阿里云)在M系列Mac上的速度与稳定性表现。通过实测数据对比下载速度、连接成功率和软件包完整度,为开发者提供最优镜像配置方案,显著提升Homebrew在Mac上的安装效率和使用体验。

weixin_33708432的博客 321

OpenWrt国内镜像源一键切换脚本:清华/阿里/中科大源全搞定

本文介绍了OpenWrt国内镜像源一键切换脚本,支持清华、阿里和中科大三大源,自动识别设备架构和系统版本,显著提升软件包安装速度和成功率。脚本包含架构自动识别、版本适配、多源选择和配置备份等功能,适用于x86_64、ramips/mt7621等常见架构,帮助用户解决海外源访问缓慢的问题。

g5h6i的博客 1176

Conda/Pip 镜像源 3 方案对比:阿里源 vs 清华源 vs 官方源实测

本文深度评测了Conda/Pip三大镜像源(阿里源、清华源、官方源)的性能表现,通过实测数据对比下载速度、成功率和稳定性。结果显示阿里源在虚拟环境创建和常见包安装中表现最优,特别适合国内网络环境。文章还提供了配置指南和场景化决策建议,帮助开发者提升Python包管理效率。

weixin_42523326的博客 333

qt下使用grpc编程(2) —— 练手!自己改的一个简单小例子!1

(1)在研究了grpc官方提供的helloworld例程后,自己试着写了个小程序。 (2)编写proto文件。 proto文件用于定义服务和消息,用protobuf的语法编写,protobuf是一种通信协议,详细请百度。下面附上源码: syntax = "proto3"; option java_multiple_files = true; option java_pac

u011099079的博客 3925
上一篇: C++ FAQ Lite[23]--继承(你所不知道的)(更新)
下一篇: C++ FAQ Lite[24]--继承(私有和保护继承)(更新)
Nicrosoft
博客等级 码龄26年 9粉丝 45原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值