0

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

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

执行 OpenDialog 后,我应该在字符串 netdir 中有我完成 OpenDialog.Execute 的目录。在下一个 OpenDialog.Execute 中,它应该从该目录开始。它在 XP 上运行良好,但在 Windows 7 上不行?它总是从安装程序的目录开始。

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

谢谢。

4

3 回答 3

2

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

  1. netdir全局常量,还是时不时超出范围?
  2. netdir之前设置的东西OpenDialog1.Execute吗?
  3. 是关于GetDir返回什么目录的问题(正如你的标题所暗示的那样),还是关于如何让打开的对话框记住上次访问的目录(正如正文所暗示的那样)?

我将假设 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;
于 2010-10-20T01:01:18.903 回答
2

如果您不想打开对话框,您可以执行以下操作以获取程序下的目录。

yourdir:=ExtractFilePath(Application.ExeName);

我已经在 Vista 中完成了它并且它可以工作。

于 2012-04-05T08:58:53.470 回答
0

这是问题的解决方案

openDialog1.Options := [ofFileMustExist];

if openDialog1.Execute then
begin

end;
于 2013-07-10T08:39:03.770 回答