gpt4 book ai didi

windows - 如何允许在 Delphi 中为特定控件拖动文件

转载 作者:可可西里 更新时间:2023-11-01 13:57:49 25 4
gpt4 key购买 nike

我想在有人将文件放到特定控件(例如 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 过程中确定 MemoHandle,但我不知道如何确定,而且拖动光标现在适用于所有控件。如何允许拖动特定控件(并阻止其他控件拖动)?

最佳答案

您确实应该传递备忘录控件的窗口句柄,但是您还需要监听发送给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, 0, fn, MAX_PATH) = 0 then Exit;

Text := fn;

end;


end.

上面的例子只接受单个文件被丢弃。文件名将放在备忘录控件中。但您也可以允许删除多项选择:

变量 c:整数; fn: array[0..MAX_PATH-1] of char; 我:整数;开始

c := DragQueryFile(Message.Drop, $FFFFFFFF, fn, MAX_PATH);

Clear;
for i := 0 to c - 1 do
begin
if DragQueryFile(Message.Drop, i, fn, MAX_PATH) = 0 then Exit;
Lines.Add(fn);
end;

关于windows - 如何允许在 Delphi 中为特定控件拖动文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16649442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com