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

ダイアログを開きたくない場合は、以下のようにして、プログラムの下にディレクトリを取得できます。

yourdir:=ExtractFilePath(Application.ExeName);

私はVistaでそれを行いましたが、うまくいきました。

于 2012-04-05T08:58:53.470 に答える
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;

1人!しかし、なぜあなたの方法はうまくいかないのでしょうか? まあ、GetDirあなたが望むものを返しません。明示的な制御が必要な場合は、

procedure TForm3.FormClick(Sender: TObject);
begin
  OpenDialog1.InitialDir := netdir;
  OpenDialog1.Execute;
  netdir := ExtractFilePath(OpenDialog1.FileName)
end;
于 2010-10-20T01:01:18.903 に答える