我在使OpenDialog窗口在指定的initialdir中启动时遇到问题。
我现在有的是
procedure TForm1.fileMenuLoadClick(Sender: TObject);
begin
SetCurrentDir(StartDir);
SetCurrentDir('Cases');
OpenDialog.Filename := '';
OpenDialog.InitialDir := GetCurrentDir;
OpenDialog.Filter := 'Sparfiler (.dat)|*.dat';
// -------------------------------
if OpenDialog.Execute then
begin
GeometryClear;
DerobModel.Filename := OpenDialog.Filename;
DerobModel.Open;
pressed := True;
SetCurrentDir('../');
DerobModel.HouseProperties.StringValue['CaseDir'] := GetCurrentDir;
DerobModel.HouseProperties.StringValue['StartDir'] := StartDir;
SetCurrentDir(StartDir);
UpdateGeometryPanel;
mainUpdateComboBox;
UpdatePropertiesPanel;
UpdateEnergyPanel;
UpdateAbsorption;
UpdateClimatePanel;
UpdateClimate;
mainHide;
Geometry.IsSelected := True;
GeometryPanel.Visible := True;
TreeView1.Enabled := True;
TreeView1.HitTest := True;
DerobModel.HouseProperties.BoolValue['GlazeChange'] := False;
end;
运行此代码时,它会一直打开我打开的最后一个文件的文件夹。我读到解决方案是清除OpenDialog的FileName属性,但是它不起作用。但是,有趣的是它正在使用此代码,该代码来自我的应用程序的先前版本。
procedure TForm1.fileMenuLoadClick(Sender: TObject);
begin
SetCurrentDir(StartDir);
SetCurrentDir('Cases');
OpenDialog.Filename := '';
OpenDialog.InitialDir := GetCurrentDir;
OpenDialog.Filter := 'Sparfiler (.dat)|*.dat';
// -------------------------------
if OpenDialog.Execute then
begin
GeometryClear;
DerobModel.Filename := OpenDialog.Filename;
DerobModel.Open;
pressed := True;
SetCurrentDir('../');
DerobModel.HouseProperties.StringValue['CaseDir'] := GetCurrentDir;
DerobModel.HouseProperties.StringValue['StartDir'] := StartDir;
SetCurrentDir(StartDir);
UpdateGeometryPanel;
mainUpdateComboBox;
LoadClimateFiles;
UpdatePropertiesPanel;
UpdateEnergyPanel;
UpdateAbsorption;
UpdateClimatePanel;
UpdateClimate;
mainHide;
Geometry.IsSelected := True;
GeometryPanel.Visible := True;
TreeView1.Enabled := True;
TreeView1.HitTest := True;
DerobModel.HouseProperties.BoolValue['GlazeChange'] := False;
end;
end;
谁能帮我,这让我发疯。我的意思是唯一的区别是功能LoadClimateFiles,但是现在在其他功能之一中调用了它。调试器说InitialDir是我想要的位置,并且FileName属性是
''
最佳答案
这是正常现象。请参见OpenFileName.lpstrInitialDir
字段的文档:
初始目录。选择初始目录的算法在不同平台上有所不同。
Windows 7的:
如果lpstrInitialDir
的值与应用程序第一次使用“打开”或“另存为”对话框时传递的值相同,则将用户最近选择的路径用作初始目录。
否则,如果lpstrFile
包含路径,则该路径是初始目录。
否则,如果lpstrInitialDir
不是NULL
,它将指定初始目录。
如果lpstrInitialDir
为NULL
,并且当前目录包含指定过滤器类型的任何文件,则初始目录为当前目录。
否则,初始目录是当前用户的个人文件目录。
否则,初始目录为桌面文件夹。
Windows 2000 / XP / Vista:
如果lpstrFile
包含路径,则该路径是初始目录。
否则,lpstrInitialDir
指定初始目录。
否则,如果应用程序过去曾使用过“打开”或“另存为”对话框,则将最近使用的路径选作初始目录。但是,如果应用程序长时间不运行,则其保存的所选路径将被丢弃。
如果lpstrInitialDir
为NULL
,并且当前目录包含指定过滤器类型的任何文件,则初始目录为当前目录。
否则,初始目录是当前用户的个人文件目录。
否则,初始目录为桌面文件夹。
您每次都传递相同的值,因此适用规则1。操作系统将忽略您的程序要求的目录,而是使用用户喜欢的目录。您可能会在较旧的程序中看到不同的行为,因为随着时间的流逝,它的行为有所改变,并且它不再请求与首次运行该程序时相同的初始目录。
您可能不必担心。