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

解決


諸般の事情  2015-10-09 02:16:31  No: 47674

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

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

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


igy  2015-10-09 05:52:01  No: 47676

あと、

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

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

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


諸般の事情  2015-10-09 18:56:14  No: 47677

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

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

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

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

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


通りすがり  2015-10-09 20:12:45  No: 47678

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


諸般の事情  2015-10-09 20:53:51  No: 47679

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加