2010-09-22 34 views
0

我有下面的命令序列中Delphi2010:Delphi2010中的GetDir不能在Windows 7下工作?

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

執行OpenDialog後,我應該有串netdir,我完成了我的 的OpenDialog.Execute目錄。並在下一個OpenDialog.Execute它應該從該 目錄開始。 它適用於XP,但不適用於Windows 7? 它始終從安裝程序的目錄開始。

任何想法可能是錯誤的?

謝謝。

回答

2

您的問題不能現在可以回答,因爲它缺少幾個關鍵細節。

  1. netdirnetdir是一個全局常量,還是它現在超出範圍?
  2. 您是否設置netdirOpenDialog1.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; 
2

如果你不想要opendialog你可以做如下,以獲得目錄下的程序。

yourdir:=ExtractFilePath(Application.ExeName); 

我已經在Vista中完成了它,它工作。

0

這是問題

openDialog1.Options := [ofFileMustExist]; 

if openDialog1.Execute then 
begin 

end; 
解決方案