更改Delphi OpenDialog的目录

Mr *_*eph 5 delphi delphi-7

该程序的一小部分背景:
该程序使用选项卡式界面同时处理多个文件.
我正在尝试更改OpenDialog的目录,所以每次打开文件时都会显示我当前正在处理的文件的目录,但即使我设置InitialDir到文件的路径,它也会显示最后打开的文件目录,不是我设定的那个.
我尝试了以下方法:

if Length(CurrentFileName) > 0 then
begin
  OpenFileDialog.InitialDir :='';
  SetCurrentDirectory(PChar(CurrentFileName));
  OpenFileDialog.InitialDir := ExtractFileDir(CurrentFileName);
end;
if OpenFileDialog.Execute then
...
Run Code Online (Sandbox Code Playgroud)

CurrentFileName带有当前选项卡打开文件的文件名的完整路径在哪里.但没有运气.

有没有办法实现这个目标?

例如:

tab1c:\mydir\file.txt打开
tab2d:\someotherdir\somefile.txt打开

如果我移动tab1并调用open函数,我OpenDialog应该向我显示内容c:\mydir\

我正在使用Delphi 7.感谢任何帮助.

Rob*_*edy 8

以下是Windows Vista及更早版本的规则:

  1. 如果lpstrFile包含路径,则该路径是初始目录.
  2. 否则,lpstrInitialDir指定初始目录.
  3. 否则,如果应用程序过去使用了"打开"或"另存为"对话框,则会选择最近使用的路径作为初始目录.但是,如果应用程序未长时间运行,则会丢弃其保存的选定路径.
  4. 如果lpstrInitialDir为NULL且当前目录包含指定过滤器类型的任何文件,则初始目录是当前目录.
  5. 否则,初始目录是当前用户的个人文件目录.
  6. 否则,初始目录是Desktop文件夹.

因此,如果当前FileName属性为非空,则InitialDir忽略该属性,应用程序的当前目录也是如此.这符合您观察到的内容,因此请确保FileName在使用对话框之间清除属性.

(从Windows 7开始,规则会有所不同,它们可能会影响您的计划.如果您从第一个选项卡打开文件,然后从第二个选项卡打开文件,则在选择第一个选项卡时打开文件的另一个尝试可能不会再次显示第一个选项卡的目录.)


And*_*and 5

我以为

if Length(CurrentFileName) > 0 then
  OpenFileDialog.FileName := ExtractFilePath(CurrentFileName);

if OpenFileDialog.Execute
Run Code Online (Sandbox Code Playgroud)

是要走的路,但显然情况比我想象的要复杂一些.

无论如何,我严重怀疑

  OpenFileDialog.FileName := ExtractFilePath(CurrentFileName);
  OpenFileDialog.InitialDir := OpenFileDialog.FileName;
  SetCurrentDirectory(PChar(OpenFileDialog.FileName));
Run Code Online (Sandbox Code Playgroud)

会让你失望的.现在确定目录的三种主要方式是同样的事情!有点过度杀戮,但如果Windows改变了它的行为,可能是必要的.

顺便说一下,你的代码中有一个错误.SetCurrentDirectory想要一个目录作为参数,而不是文件名.