加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi – 何时调用DragAcceptFiles

发布时间:2020-12-15 04:16:42 所属栏目:大数据 来源:网络整理
导读:我有 procedure TMainForm.FormCreate(Sender: TObject);beginDragAcceptFiles (Handle,True ) ; end ; 但表单不接受拖动文件 – 没有删除游标,没有触发WM_DROPFILES消息. 我在FormShow事件中有以下构造(出于不同的原因 – 在创建表单后,我只想执行一次代码,
我有
procedure TMainForm.FormCreate(Sender: TObject);
begin
DragAcceptFiles (Handle,True ) ; 
end ;

但表单不接受拖动文件 – 没有删除游标,没有触发WM_DROPFILES消息.

我在FormShow事件中有以下构造(出于不同的原因 – 在创建表单后,我只想执行一次代码,并且FormShow在初始化期间多次触发):

procedure TMainForm.FormShow(Sender: TObject);

begin
if (not FRunOnce) then  // as FormShow can be called twice - if Form.Position assigned to
    begin
    DragAcceptFiles (Handle,True ) ; 
    FRunOnce := True ;
    end ;
end ;

在显示的位置DragAcceptFiles(Handle,True)仍然不起作用.如果我将它移动到例程的顶部(因此它执行两次),它确实有效:

procedure TMainForm.FormShow(Sender: TObject);

begin
DragAcceptFiles (Handle,True ) ; 
if (not FRunOnce) then  // as FormShow can be called twice - if Form.Position assigned to
    begin
    FRunOnce := True ;
    end ;
end ;

我发现的所有示例代码似乎都在OnCreate期间调用DragAccept.我的实验表明这太早了,OnShow的第一次火灾也是如此.我确定我的代码在其他地方有问题,但是可能导致这种情况的原因是什么?

解决方法

任何TWinControl的HWND都可以在其生命周期内多次创建和重新创建.调用DragAcceptFiles()的最佳位置是覆盖CreateWnd()和DestroyWnd()方法,以便您可以在所有(重新)创建期间(重新)注册并在所有析构期间取消注册,例如:
procedure TMainForm.CreateWnd;
begin 
  inherited;
  DragAcceptFiles(Handle,True);  
end;

procedure TMainForm.DestroyWnd;
begin 
  DragAcceptFiles(Handle,False);
  inherited;
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读