GetDir в Delphi2010 не работает под Windows 7?

У меня есть следующая последовательность команд в Delphi2010:

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

После выполнения OpenDialog у меня в строке netdir должен быть каталог, в котором я закончил свой OpenDialog.Execute. И в следующем OpenDialog.Execute он должен начинаться с этого каталога. Он отлично работает на XP, но не на Windows 7? Он всегда начинается с каталога, в котором установлена ​​программа.

Есть идеи, что может быть не так?

Благодарю.

3 ответа

На ваш вопрос нельзя ответить так, как он есть, потому что в нем отсутствуют некоторые важные детали.

  1. Является netdir глобальная константа, или время от времени она выходит из области видимости?
  2. Вы устанавливаете netdir к чему-то до OpenDialog1.Execute?
  3. Есть вопрос о том, что каталог GetDir return (как подсказывает ваш заголовок), или о том, как заставить открытый диалог запомнить последний посещенный каталог (как подсказывает основной текст)?

Я буду считать, что 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;

Если вы не хотите opendialog, вы можете сделать, как показано ниже, чтобы получить DIR по вашей программе.

yourdir:=ExtractFilePath(Application.ExeName);

Я сделал это в Vista, и это работает.

Это решение проблемы

openDialog1.Options := [ofFileMustExist];

if openDialog1.Execute then
begin

end;
Другие вопросы по тегам