gpt4 book ai didi

Delphi文件目录选择(来自DLL)在当前应用程序前面带来了其他窗口?

转载 作者:行者123 更新时间:2023-12-03 18:25:40 26 4
gpt4 key购买 nike

我是维护 Delphi 6 旧版软件,它使用 Delphi 2009 DLL 中的以下文件目录选择功能:

function _SelectDirectory(ADirPath: ShortString): ShortString;
var OpenDlg: TFileOpenDialog;
begin
Result:='';
OpenDlg:=TFileOpenDialog.Create(nil);
try
OpenDlg.Options:=OpenDlg.Options+[fdoPickFolders];
if DirectoryExists(ADirPath) then
OpenDlg.DefaultFolder:=ADirPath;
if OpenDlg.Execute then begin
Result:=OpenDlg.FileName;
end;
finally
OpenDlg.Free;
end;
end;

我不能使用Delphi 6的文件目录选择功能,因为Delphi 6没有这个功能,如果有的话,它已经过时且无法使用。所以 - 我正在使用 DLL 中的函数。但在调用此函数后,另一个窗口(可能是 Windows 资源管理器或其他应用程序)变为事件状态并停留在我当前调用目录选择功能的 Delphi 6 应用程序前面。发生了什么以及如何避免这种情况?

当我从 Delphi 2009 应用程序(而不是从 DLL)调用我的 _SelectDirectory 函数时,一切正常,当前应用程序仍然是事件的。因此,使用 DLL 会导致问题。我使用动态加载我的 DLL:
ImpLib:=LoadLibrary(LibraryName);
@TmpSelectDirectory:=GetProcAddress(ImpLib, '_SelectDirectory');
TmpSelectDirectory(ADirPath);

也许我可以通过这种方式将 Delphi 2009 DLL 加载到 Delphi 6 应用程序中,以使当前的 Delphi 6 应用程序在调用 DLL 函数后仍然保持事件状态。

最佳答案

I can not use file directory selection Delphi 6 function because Delphi 6 has not such function



是的,确实如此: FileCtrl.SelectDirectory() .请务必使用具有 Root 的第二个重载版本。范围。该重载使用 Win32 SHBrowseForFolder() 显示现代系统对话框。功能。另一个重载改为显示较旧的 Win3.1 样式的 VCL 对话框。

或者, TFileOpenDialog.Execute() 有一个可选的 HWND参数指定对话框的所有者窗口。让您的调用 D6 代码通过有效的 TForm.Handle对于那个窗口。
function _SelectDirectory(Owner: HWND; ADirPath: ShortString): ShortString;
var
...
begin
...
if OpenDlg.Execute(Owner) then
...
end;
ImpLib := LoadLibrary(LibraryName);
@TmpSelectDirectory := GetProcAddress(ImpLib, '_SelectDirectory');
TmpSelectDirectory(MyForm.Handle, ADirPath);

When I call my _SelectDirectory function from Delphi 2009 application (and not from DLL), then all is OK, the current application remains the active one.



在那种情况下, TFileOpenDialog可以访问应用程序的 TApplication和活跃的 TForm对象,并且可以选择默认所有者 HWND从他们之间。但是当你调用 TFileOpenDialog从 DLL 内部,它不能再这样做了,所以你必须更明确地知道哪个所有者 HWND使用。

关于Delphi文件目录选择(来自DLL)在当前应用程序前面带来了其他窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55901819/

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