-添加 FileDrop 属性到 可视化控件(visual control) 中-

原创 2001年02月06日 20:23:00

作者:Damir Kojevod

添加FileDrop属性到可视化控件[visual control] 中


1.首先从可视化控件(visual control )中继承一个新的控件。
2.增加接受文件拖拽消息的属性。
3.增加消息被处触发时要响应处理的事件。
4.使用测试这个新创建的控件。


详细说明:
1。在delphi中 Component|Newcomponent 选择一个祖先。这里使用TEdit,给这个控件取名 TFileDropEdit,可设置其他参数,并选择确定或安装(这种情况表示自动安装控件到 控件模板)。
2。增加接收文件拖拽的属性。
在private部分 增加一个消息过程,声明如下:
procedure WMDROPFILES(var Message: TWMDROPFILES); message WM_DROPFILES;
这个消息过程完成从Windows 接收WM_DROPFILES消息并且能进行'初加工'。这个过程完成一系列通常的处理,接收者从消息中提取消息参数等。同时我们还允许用户定义她自己的动作(把提取的信息交给用户处理),所以我们必须定义一个事件指针来完成这个功能。如果用户定义了处理过程,消息处理过程会调用用户定义的过程。另外,控件必须向windows声明自己是能接收文件拖拽的控件。是否注册要调用windows函数 DragAcceptFiles.参数中需要控件的句柄,所以不能在控件的构造器中完成注册,这里在public部分增加属性。这里用AcceptFiles属性来注册和注销文件拖拽功能。

3。定义消息触发事件(提供事件指针)以便用户定义处理过程事件。
先定义一个过程事件:参数为TStringList。如下:
TFileDropEvent = procedure(File: TStringList) of object;
再在published 部分定义属性 如下
property OnFileDrop: TFileDropEvent Read FFileDrop write FFileDrop;
同时在private部分定义过程指针变量:
FFileDrop: TFileDropEvent;

 

下面的源代码是 TDropEdit控制的全部代码。注意:开始控件是不接受文件拖拽的,如果用户设置AcceptFile 属性为真则可接受文件拖拽。

unit FileDropEdit;

interface

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

type
TFileDropEvent = procedure(files: tstringlist) of object;

TFileDropEdit = class(TEdit)
private
{ Private declarations }
FFileDrop: TFileDropEvent;
FAcceptFiles: Boolean;
procedure WMDROPFILES(var Message: TWMDROPFILES); message WM_DROPFILES;
procedure SetAcceptFiles(const Value: Boolean);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;

property AcceptFiles: Boolean read FAcceptFiles write SetAcceptFiles;
published
{ Published declarations }
property OnFileDrop: TFileDropEvent read FFileDrop write FFileDrop;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Samples', [TFileDropEdit]);
end;

constructor TFileDropEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner: TComponent);
FFileDrop := nil;
FAcceptFiles := False;
end;

procedure TFileDropEdit.WMDROPFILES(var Message: TWMDROPFILES);
var
NumFiles: integer;
buffer: array[0..255] of char;
i: integer;
l: TStringList;
begin
if Assigned(FFiledrop) then
begin
l := TStringList.Create;
NumFiles := DragQueryFile(Message.Drop, $FFFFFFFF, nil, 0); {thanks to Mike Heydon for D5 adjustment of parameters}
for i := 0 to NumFiles - 1 do {Accept the dropped file}
begin
DragQueryFile(Message.Drop, i, buffer, sizeof(buffer));
l.append(StrPas(buffer))
end;
FFileDrop(l);
l.free
end
end;

procedure TFileDropEdit.SetAcceptFiles(const Value: Boolean);
begin
if FAcceptFiles <> Value then
begin
FAcceptFiles := Value;
DragAcceptFiles(Handle, Value);
end
end;

end.


 

-添加 FileDrop 属性到 可视化控件(visual control)

  • zgqtxwd
  • zgqtxwd
  • 2008年04月30日 19:28
  • 156

添加FileDrop属性到可视化控件

原文:http://www.evget.com/article/read_1846.aspx1.首先从可视化控件(visual control )中继承一个新的控件。2.增加接受文件拖拽消息的属性。 ...
  • qsdnet
  • qsdnet
  • 2007年04月12日 16:36
  • 567

图像控件Picture —— 修改Picture控件属性显示图像

本文介绍使用图像控件显示图像信息。     使用图像控件显示图像的最简单的方法是使用图像控件的属性窗口。首先,在对话框中放置一个Picture Contorl控件,然后在资源视图窗口中导入位图文件,...
  • sirenxiaohuayuan
  • sirenxiaohuayuan
  • 2014年12月30日 11:04
  • 1517

VS中添加MS Flex Grid控件

在VS2008中遇到的问题:         当我从“项目”--“添加类”---“MFC”--- “MFC Class From ActiveX Control”--在“从以下来源添加类”中选择“注册...
  • u011544943
  • u011544943
  • 2013年07月29日 19:13
  • 1735

MFC中 利用OpenCv显示图片到Picture Control控件

在做项目的过程中需要在MFC中 利用OpenCv显示图片到Picture Control控件 读取图片可以简单的利用opencv中的cvLoadImage()即可  但是使其以自适应大小显示到Pict...
  • zhangla1220
  • zhangla1220
  • 2014年08月31日 21:41
  • 2017

控件与组件

一般把Control译为控件,而把Component译为组件。简言之,控件:是编程中用到的,例如按钮、窗口等等就是控件。组件:为软件的一部分,软件的组成部分。        首先范围最广的是组件(C...
  • ma_hoking
  • ma_hoking
  • 2015年07月26日 22:20
  • 669

有关ActiveX控件中的DataGrid或ADO Data控件在vc++6.0和VS 版本中的使用

系统环境:Windows 7 + VC6.0 + VS2008 当在VC++6.0中"Project"-->"Add to Project"-->"Componets and Controls"--...
  • zhangyulin54321
  • zhangyulin54321
  • 2012年10月30日 16:54
  • 5938

(Win7)中Visual C++在添加ADO控件时出现Microsoft ADO Data Control,version 6.0(OLEDB)不支持此接口

vs2005及其以上版本中microsoft ado data control 6.0控件问题在vs2005中是没有这个控件的,需要注册,步骤如下:      1. 先到C:\WINDOWS\sys...
  • wwq444968579
  • wwq444968579
  • 2014年09月20日 21:52
  • 1595

怎么向tab control中加其它控件(如文本框等)

1、首先创建一个MFC对话框框架,在对话框资源上从工具箱中添加上一个Tab   Control   控件,根据需要修改一下属性,然后右击控件,为这个控件添加一个变量,将此控件跟一个CTabCtrl类变...
  • ecjtuync
  • ecjtuync
  • 2007年09月03日 19:32
  • 2014

控件中添加的成员变量value和control的区别 .

control型变量是这个控件所属类的一个实例(对象)可以通过这个变量来对该控件进行一些设置。 而value只是用来传递数据,不能对控件进行其它的操作。 control型变量可以获得控件的实例,通...
  • djb100316878
  • djb100316878
  • 2014年12月11日 16:30
  • 2623
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:-添加 FileDrop 属性到 可视化控件(visual control) 中-
举报原因:
原因补充:

(最多只允许输入30个字)