GetDir в Delphi2010 не работает под Windows 7? - PullRequest
0 голосов
/ 22 сентября 2010

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

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

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

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

Спасибо.

Ответы [ 3 ]

2 голосов
/ 05 апреля 2012

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

yourdir:=ExtractFilePath(Application.ExeName);

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

2 голосов
/ 20 октября 2010

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

  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;
0 голосов
/ 10 июля 2013

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

openDialog1.Options := [ofFileMustExist];

if openDialog1.Execute then
begin

end;
...