一旦有人将文件下载到特定的控件(例如TMemo),我想接受文件。 我从这个例子开始: http : //delphi.about.com/od/windowsshellapi/a/accept-filedrop.htm并像这样修改它:
procedure TForm1.FormCreate(Sender: TObject); begin DragAcceptFiles( Memo1.Handle,True ) ; end;
这允许控件显示拖动图标,但正确的WM_DROPFILES消息不会被调用,因为DragAcceptFiles需要一个(Parent?)窗口句柄。 我可以确定WMDROPFILES过程中的WMDROPFILES但我不知道如何,现在拖动光标适用于所有控件。 如何允许拖动特定的控件(并阻止其他控件拖动)?
在Delphi中closures后,应用程序如何启动自己的服务?
提取拉撒路资源
我应该在Firemonkey中使用TMainMenu来支持Windows和OS-X吗?
使用提升的权限复制文件
delphi – 如何获得最后的错误消息,当处理单位“Web.Win.ADsTypes”
您应该确实通过备忘录控件的窗口句柄,但是您还需要侦听发送给它的WM_DROPFILES消息:
unit Unit5; interface uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ShellAPI; type TMemo = class(StdCtrls.TMemo) protected procedure WMDropFiles(var Message: TWMDropFiles); message WM_DROPFILES; procedure CreateWnd; override; procedure DestroyWnd; override; end; TForm5 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form5: TForm5; implementation {$R *.dfm} procedure TForm5.FormCreate(Sender: TObject); begin end; { TMemo } procedure TMemo.CreateWnd; begin inherited; DragAcceptFiles(Handle,true); end; procedure TMemo.DestroyWnd; begin DragAcceptFiles(Handle,false); inherited; end; procedure TMemo.WMDropFiles(var Message: TWMDropFiles); var c: integer; fn: array[0..MAX_PATH-1] of char; begin c := DragQueryFile(Message.Drop,$FFFFFFFF,fn,MAX_PATH); if c <> 1 then begin MessageBox(Handle,'Too many files.','Drag and drop error',MB_ICONERROR); Exit; end; if DragQueryFile(Message.Drop,MAX_PATH) = 0 then Exit; Text := fn; end; end.
上面的例子只接受丢弃的单个文件。 文件名将被放入备忘录控制中。 但是,您也可以允许删除多个选择:
var c:integer; fn:char的数组[0..MAX_PATH-1]; 我:整数; 开始
c := DragQueryFile(Message.Drop,MAX_PATH); Clear; for i := 0 to c - 1 do begin if DragQueryFile(Message.Drop,i,MAX_PATH) = 0 then Exit; Lines.Add(fn); end;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。