Delphi2007のTSaveDialogをWindows2012R2で正常に動作させるには?

解決


諸般の事情  2015-10-09 02:16:31  No: 47674  IP: [192.*.*.*]

OS:WindowsServer2012R2
言語:Delphi2007 for Win32

次のコードで、Win2012R2で「保存」ボタンをクリックしても、キャンセルボタンをクリックしたのと同じ挙動になります。

    with SaveDialog do begin
      if not(DirPath = '') then begin
        InitialDir := DirPath;
      end;
      FileName := PV.IFile;
      if not Execute then begin
        // キャンセルボタン押下
        Exit;
      end;
                                        // 保存ファイル名取得
      strFile := FileName;
    end;
  end;

ShowMessage関数でウオッチすると、必ず「保存」ボタンをクリックしても not Execute になってしまい、関数をExitしてしまいます。
ShowMessage関数でウオッチしないと、2回に1回の割合で保存が出来るようです。
明らかにコモンダイアログの挙動が変なのですが、どんなに調べても分かりません。
どなたか何かご存知なことや、ヒントでも結構ですので、ご教授願えませんでしょうか。
ShiftJIS問題でDelphiのバージョンアップが出来ない状態なので、困り果ててます。

編集    削除
igy  2015-10-09 05:29:09  No: 47675  IP: [192.*.*.*]

ちなみに、新規プロジェクトで、ボタンとSaveDialogだけを配置して
テストした場合にも、同じ現象が起きますか?

また、(関係ないかもしれませんが)Delphi2007は、
最新のUpdateは適用されてますか?

編集    削除
igy  2015-10-09 05:52:01  No: 47676  IP: [192.*.*.*]

あと、

Delphi 2007 について 
http://support.embarcadero.com/jp/article/36424



> これを望まないのであれば、オリジナルの行動を強制するために、プログラムの始めに、
> グローバル変数である UseLatestCommonDialogs を Falseに設定してください。

あるので、これを試してみるとか・・・

編集    削除
諸般の事情  2015-10-09 18:56:14  No: 47677  IP: [192.*.*.*]

igyさん、返信ありがとうございます。

>また、(関係ないかもしれませんが)Delphi2007は、
>最新のUpdateは適用されてますか?

最新のアップデータは適用していないと思います。
アップデータというより、ほとんど再インストールに近いようですし・・・。

ご教授いただいた、
> グローバル変数である UseLatestCommonDialogs を Falseに設定してください。
で、コモンダイアログの挙動が正常になりました。ありがとうございます。

コモンダイアログが古いバージョンになってしまうので、社内で反発があるかも知れませんが、これで押し通そうと思います。
一応、これで「解決」とさせていただきます。ありがとうございました。

編集    削除
通りすがり  2015-10-09 20:12:45  No: 47678  IP: [192.*.*.*]

Server 2012 R2環境ということはx64なのですよね?
面倒に思われるかもしれませんが最新環境(Update 3 + December Update + Apr08 Hotfix + http://cc.embarcadero.com/item/27521 )にしておいたほうが
いいですよ。

編集    削除
諸般の事情  2015-10-09 20:53:51  No: 47679  IP: [192.*.*.*]

通りすがりさん、アドバイスありがとうございます。
やっぱり最新環境にしておかなきゃダメですよね〜。

編集    削除