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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |