Delphi2010中的GetDir无法在Windows 7下运行?

时间:2010-09-22 09:01:33

标签: delphi windows-7 delphi-2010 topendialog opendialog

我在Delphi2010中有以下命令序列:

  var netdir:string;
  ....
  OpenDialog1.InitialDir:=netdir;
  ....
  OpenDialog1.Execute...
  ....
  GetDir(0,netdir);
  ....

执行OpenDialog后,我应该在字符串netdir中找到我完成的目录 我的OpenDialog.Execute。在下一个OpenDialog.Execute中,它应该从那开始 目录。 它适用于XP,但不适用于Windows 7? 它始终从安装程序的目录开始。

知道可能出现什么问题吗?

感谢。

3 个答案:

答案 0 :(得分:2)

您的问题不能按原样回答,因为它缺少几个关键细节。

  1. netdir是一个全局常量,还是偶尔会超出范围?
  2. 您是否将netdir设置为OpenDialog1.Execute之前的某个内容?
  3. 关于哪个目录GetDir返回(如标题所示)或关于如何使打开的对话框记住最后访问过的目录(正如身体内容所示)的问题?
  4. 我将假设1)netdir是一个全局常量,2)你最初没有设置它,3)你希望打开的对话框记住最后访问过的文件夹。因此你有类似

    的东西
    unit Unit3;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    
    type
      TForm3 = class(TForm)
        OpenDialog1: TOpenDialog;
        procedure FormClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form3: TForm3;
    
    var
      netdir: string;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm3.FormClick(Sender: TObject);
    begin
      OpenDialog1.InitialDir := netdir;
      OpenDialog1.Execute;
      GetDir(0, netdir);
    end;
    
    end.
    

    然后解决方案是让Windows记住您的目录,即只需执行

    procedure TForm3.FormClick(Sender: TObject);
    begin
      OpenDialog1.Execute;
    end;
    

    一个人!但为什么你的方法不起作用?好吧,GetDir没有返回你想要的东西。如果需要明确控制,请执行

    procedure TForm3.FormClick(Sender: TObject);
    begin
      OpenDialog1.InitialDir := netdir;
      OpenDialog1.Execute;
      netdir := ExtractFilePath(OpenDialog1.FileName)
    end;
    

答案 1 :(得分:2)

如果你不想操作,你可以按照以下方式在你的程序下获得目录。

yourdir:=ExtractFilePath(Application.ExeName);

我已经在Vista中完成了它的工作。

答案 2 :(得分:0)

这是问题的解决方案

openDialog1.Options := [ofFileMustExist];

if openDialog1.Execute then
begin

end;