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 ответа
На ваш вопрос нельзя ответить так, как он есть, потому что в нем отсутствуют некоторые важные детали.
- Является
netdir
глобальная константа, или время от времени она выходит из области видимости? - Вы устанавливаете
netdir
к чему-то доOpenDialog1.Execute
? - Есть вопрос о том, что каталог
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;