ros*_*mcm 5 forms delphi drag-and-drop oncreate
我有
procedure TMainForm.FormCreate(Sender: TObject);
begin
DragAcceptFiles (Handle, True ) ;
end ;
Run Code Online (Sandbox Code Playgroud)
但表单不接受拖动文件 - 没有删除游标,没有触发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 ;
Run Code Online (Sandbox Code Playgroud)
在显示的位置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 ;
Run Code Online (Sandbox Code Playgroud)
我发现的所有示例代码似乎都在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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1843 次 |
| 最近记录: |