该计划的一些背景:
该程序使用选项卡式界面同时处理多个文件
我正在尝试更改OpenDialog的目录,所以每次打开文件时都会显示我当前正在处理的文件的目录,但即使我将InitialDir
设置为文件的路径,它也会显示最后打开的文件目录,而不是我设置的目录
我尝试了以下方法:
if Length(CurrentFileName) > 0 then
begin
OpenFileDialog.InitialDir :='';
SetCurrentDirectory(PChar(CurrentFileName));
OpenFileDialog.InitialDir := ExtractFileDir(CurrentFileName);
end;
if OpenFileDialog.Execute then
...
其中CurrentFileName
是包含当前选项卡打开文件的文件名的完整路径。但没有运气。
有没有办法实现这个目标?
例如:
tab1
已c:\mydir\file.txt
已开启
tab2
已d:\someotherdir\somefile.txt
已开启
如果我转到tab1
并拨打开放功能我OpenDialog
应该向我显示c:\mydir\
的内容
我正在使用Delphi 7.感谢任何帮助。
答案 0 :(得分:8)
以下是Windows Vista及更早版本的the rules:
因此,如果当前FileName
属性为非空,则忽略InitialDir
属性,应用程序的当前目录也是如此。这符合您观察到的内容,因此请确保在使用对话框之间清除FileName
属性。
(规则与Windows 7不同,它们可能会影响您的计划。如果您从第一个标签打开文件,然后从第二个标签打开文件,另一个尝试打开文件,而第一个标签是选中可能不再显示第一个选项卡的目录。)
答案 1 :(得分:5)
我以为
if Length(CurrentFileName) > 0 then
OpenFileDialog.FileName := ExtractFilePath(CurrentFileName);
if OpenFileDialog.Execute
是要走的路,但显然情况比我想象的要复杂一些。
无论如何,我严重怀疑
OpenFileDialog.FileName := ExtractFilePath(CurrentFileName);
OpenFileDialog.InitialDir := OpenFileDialog.FileName;
SetCurrentDirectory(PChar(OpenFileDialog.FileName));
会让你失望。现在确定目录的三种主要方式是同样的事情!有点过度杀戮,但如果Windows改变了它的行为,可能是必要的。
顺便说一句,您的代码中存在错误。 SetCurrentDirectory
想要目录作为参数,而不是文件名。
答案 2 :(得分:3)
应清除FileName属性,例如:
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.FileName:= '';
OpenDialog1.InitialDir:= 'C:\';
OpenDialog1.Execute;
end;
答案 3 :(得分:1)
我有一个类似的问题 - 使用Opendialog1.InitialDir := GetCurrentDir
- 没有用。
尝试将其显示为Opendialog1.Title := Opendialog1.InitialDir
- 显示正确的字符串。
然后声明新的字符串(dir)并使用
dirr := GetCurrentDir;
Opendialog1.InitialDir := dirr;
这似乎工作正常(不确定原因,但工作) HTH
答案 4 :(得分:0)
刚刚测试过,下面的代码在Delphi 2010中运行。要么它是Delphi 7中的错误,要么需要仔细检查CurrentFileName的值是否符合您的要求。
procedure TForm1.Button1Click(Sender: TObject);
begin
opendialog1.InitialDir := 'c:\temp';
opendialog1.Execute;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
opendialog1.InitialDir := 'c:\temp\fpc';
opendialog1.Execute;
end;