如何在Firemonkey中设置OpenDialog为模态对话框?
- 内容介绍
- 文章标签
- 相关推荐
本文共计431个文字,预计阅读时间需要2分钟。
在Firemonkey中,若要确保在调用OpenDialog时对话框不显示为模式,并且出现在任务栏中(特别是在Windows XP中),可以采取以下步骤:
1. 在ButtonClick事件中调用OpenDialog。
2.设置OpenDialog的属性,使其不作为模式对话框显示。
以下是简化的代码示例:
delphi
procedure TForm1.ButtonClick(Sender: TObject);begin with TOpenDialog.Create(Self) do begin try // 设置对话框不作为模式显示 Options :=Options + [ofAllowMultiSelect]; // 显示对话框 if Execute then begin // 处理选择的文件 end; finally Free; end; end;end;这段代码创建了一个TOpenDialog对象,并设置了`ofAllowMultiSelect`选项,允许多选文件。在执行`Execute`方法时,对话框不会作为模式对话框显示,并且会出现在任务栏中。
当我在ButtonClick事件上从我的表单调用OpenDialog时.该对话框不显示为模态,也显示在任务栏中(在 WindowsXP中).我可以返回主窗体并再次单击打开 – 一次弹出几个对话框..如何在Firemonkey中使OpenDialog成为模态?
是否专门制作,因为FM的多平台安全性不允许模态对话框?
编辑:该错误已在Update 3中修复.
我认为这是一个错误. FireMonkey有很多模态类型的错误,希望他们很快就会修复它们.目前,即使是模态形式也不是模态的.对于您的问题,我有一个Windows的解决方法,但您可能不喜欢它.
您需要在FMX.Platform.Win中的TPlatformWin.DialogOpenFiles()方法中修复以下行.
在OpenFile下进行更改:
hwndOwner := 0;
对此:
hWndOwner := FmxHandleToHWND(Application.MainForm.Handle);
该函数使用Windows GetOpenFileName API调用,即使它在Vista及更高版本上已弃用.如果传入所有者句柄,则对话框是模态的,否则不是.
您可能希望将此错误提交给qc.embarcadero.com以及解决方法.
本文共计431个文字,预计阅读时间需要2分钟。
在Firemonkey中,若要确保在调用OpenDialog时对话框不显示为模式,并且出现在任务栏中(特别是在Windows XP中),可以采取以下步骤:
1. 在ButtonClick事件中调用OpenDialog。
2.设置OpenDialog的属性,使其不作为模式对话框显示。
以下是简化的代码示例:
delphi
procedure TForm1.ButtonClick(Sender: TObject);begin with TOpenDialog.Create(Self) do begin try // 设置对话框不作为模式显示 Options :=Options + [ofAllowMultiSelect]; // 显示对话框 if Execute then begin // 处理选择的文件 end; finally Free; end; end;end;这段代码创建了一个TOpenDialog对象,并设置了`ofAllowMultiSelect`选项,允许多选文件。在执行`Execute`方法时,对话框不会作为模式对话框显示,并且会出现在任务栏中。
当我在ButtonClick事件上从我的表单调用OpenDialog时.该对话框不显示为模态,也显示在任务栏中(在 WindowsXP中).我可以返回主窗体并再次单击打开 – 一次弹出几个对话框..如何在Firemonkey中使OpenDialog成为模态?
是否专门制作,因为FM的多平台安全性不允许模态对话框?
编辑:该错误已在Update 3中修复.
我认为这是一个错误. FireMonkey有很多模态类型的错误,希望他们很快就会修复它们.目前,即使是模态形式也不是模态的.对于您的问题,我有一个Windows的解决方法,但您可能不喜欢它.
您需要在FMX.Platform.Win中的TPlatformWin.DialogOpenFiles()方法中修复以下行.
在OpenFile下进行更改:
hwndOwner := 0;
对此:
hWndOwner := FmxHandleToHWND(Application.MainForm.Handle);
该函数使用Windows GetOpenFileName API调用,即使它在Vista及更高版本上已弃用.如果传入所有者句柄,则对话框是模态的,否则不是.
您可能希望将此错误提交给qc.embarcadero.com以及解决方法.

