喫茶XRAYトップページ

[スレッド全体
]

[6057] ふ〜ん、そうなんだ Part1返信 削除
2012/6/8 (金) 11:32:21 Syake
こんにちは、小ネタです。

TOpenDialogに関して

フォルダーを指定してExecuteした場合、そのフォルダーが開くと
思いきや、上手くいくケースとそうで無いケースがあります。

テスト状況

procedure ButtonClick(Sender TObject);
begn
 if Sender = ButtomA then
    OpenDialog1.InitialDir := := 'C:\XXXX\AAA'
  else if Sender =ButtomB then
    OpenDialog1.InitialDir := := 'C:\XXXX\BBB';
  if OpenDialog1.Execute then
  begin

  end;
end;
上記で、それぞれ交互にButtomをクリックしファイル(*.Txt)を開きます。

WindowsXPでは、初回は指定したフォルダーを表示して目的のファイル
を開くことが出来ますが、次のButtomでは前回開いた時のフォルダーを
表示してしまいます。
内部でどうなっているのかわかりませんが、無視すんなよって感じです。

ちなみにWindws7では、事も無く上手くいきます。

で、コンポーネントを貼付けず、都度生成して使用するとXPでも上手
くいきます。
procedure ButtonClick(Sender TObject);
var
  OpenDlg :TOpenDialog;
begn
  OpenDlg :TOpenDialog.Create;
  try
   if Sender = ButtomA then
      OpenDlg .InitialDir := := 'C:\XXXX\AAA'
    else if Sender =ButtomB then
      OpenDlg .InitialDir := := 'C:\XXXX\BBB';
    OpenDlg.Filter := 'テキスト|*.txt';
    if OpenDialog1.Execute then
    begin

    end;
  finally
    OpenDlg.Free;
  end;
end;


これはDelphiXEで、他のバージョンはどうなのか知りませんが・・・・

[6058] Re:ふ〜ん、そうなんだ Part1返信 削除
2012/6/8 (金) 14:33:35 おかぽん
▼ Syakeさん
こんにちは。

(1) Windows XP
Aボタンを押して、フォルダAAAのファイル選択
Bボタンを押すと、選択フォルダがAAAになる

(2) Windows 7
Aボタンを押して、フォルダAAAのファイル選択
Bボタンを押すと、選択フォルダがBBBになる

ということだと思って、XE以外として(はかなり古い)
Delphi 5 で、検証してみましたがWindows7での(2)が再現しません。
自作の、Vista以降の形式で表示できるOpenDialogを
使用してみましたが、(1)の結果にしかなりませんでした。

一度ファイルを選択しているので、OpenDialog1.FileNameに
フルパスが入っていると思います。
OpenDialogの動作として、InitialDirでフォルダ指定
→FileNameでファイル名(フルパスであればフォルダ指定)
であれば、(1)の動作に問題ないと思いますが、(2)の結果が
不思議です。

実際、以下一行を追加すると、InitialDirが効いてくれるようになりました。
begn
 OpenDialog1.FileName := ''; //ここ
 if Sender = ButtomA then

なお、XEは持っていないので、テストできませんが、動作報告として
返信させていただきました。


[6061] Re2:ふ〜ん、そうなんだ Part1返信 削除
2012/6/8 (金) 19:07:16 Mr.XRAY
あっ,おかぽんさんだ.

>疲れたのでまた今度ね・・・

爆笑!!
皆さん,スミマセン.いつものチャチです.ゴメンなさい!

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82