喫茶XRAYトップページ

[スレッド全体
]

[11242] TSaveDialogダイアログの挙動返信 削除
2017/7/9 (日) 17:36:46 Mr.XRAY
Delphi 2005 + Windows 8.1 の環境で
TSaveDialog のダイアログが表示されないという現象が発生する.
と言うのですが,何か情報ないでしょうか ?
この環境でテストできる状態がないんです.

確か,初期ディレクトリの設定が云々というのは見た記憶があるのですが.

テストコードは以下です.

procedure TForm21.BitBtn6Click(Sender: TObject);
var
  FileName   : String;
begin
   //ファイル名をセットする
  SaveDialog1.FileName := '予定表';

  //ファイル選択のオープンダイアログを表示
  if (SaveDialog1.Execute = True) then
      ShowMessage('File : '+ SaveDialog1.FileName)
  else
       ShowMessage('Save file was cancelled');
end;

  SaveDialog1.FileName := '予定表';

のコードを削除するとダイアロは表示されるようです.
少なくても,Delphi XE(UP1) Pro + Windows 7 U64(SP1) では発生しません.
ファイル名の指定があってもなくてもダイアログは表示されます.


# メールでの問い合わせのコードをそのまま掲載しています.


[11248] Re:TSaveDialogダイアログの挙動返信 削除
2017/7/10 (月) 14:18:54 taka
▼ Mr.XRAYさん
> Delphi 2005 + Windows 8.1 の環境で
> TSaveDialog のダイアログが表示されないという現象が発生する.
> と言うのですが,何か情報ないでしょうか ?
> この環境でテストできる状態がないんです.


こんにちは、
久しぶりにのぞくとDelphi2005ネタなので試してみました。
コードを削除なしに
Windows8.1,10どちらも 予定表 正常に動作します

SaveDialog1.InitialDirに変な値がはいっているとか
SaveDialog1.Optionsの設定になにか不気味な設定があるとか
MAX_PATHを超えているとか
どこかでメモリ違反やっちゃたとか
ではないですかね?

> ちょっと意外な方向への展開になってしまいました.
試したくなったときは汚染されていない状態で
もう一度チェックするといいかもですね。
  with TSaveDialog.Create(self) do
  try
//  InitialDir := 'フォルダ名';
    FileName := '予定表';
    //ファイル選択のオープンダイアログを表示
    if (Execute = True) then
        ShowMessage('File : '+ FileName)
    else
         ShowMessage('Save file was cancelled');
  finally
   free;
  end;


[11249] Re2:TSaveDialogダイアログの挙動返信 削除
2017/7/10 (月) 15:30:11 Mr.XRAY
▼ takaさん,どうもです.

> 久しぶりにのぞくとDelphi2005ネタなので試してみました。
> コードを削除なしに
> Windows8.1,10どちらも 予定表 正常に動作します


ありゃ !
私も Ansi 版だとそうなるかと思って,といっても
同じ様な使い方をしてきていますが,記憶にないのですが
Delphi 6, Delphi 2007 でやってみました.

ダイアログ表示されました.

> 試したくなったときは汚染されていない状態で
> もう一度チェックするといいかもですね。


ですね.
お手数かけました.
こういうことは,やっぱり解決しておいた方がいいと思うんですよね.
そうすれば,現象そのものだけでなく,開発に関係する何かが得られると思っています.

# 本当はどこかのコミュニティの場で質問した方がいいような...
# この喫茶XRAY でもいいとは思いますが...


[11252] Re3:TSaveDialogダイアログの挙動返信 削除
2017/7/10 (月) 17:05:42 igy
▼ Mr.XRAYさん
> ありゃ !
> 私も Ansi 版だとそうなるかと思って,といっても
> 同じ様な使い方をしてきていますが,記憶にないのですが
> Delphi 6, Delphi 2007 でやってみました.
>
> ダイアログ表示されました.


Delphi7で試してみました。

  SaveDialog1.FileName := '予定表';
だと、ダイアログ表示しますが、
  SaveDialog1.FileName := '予定\';
だと、ダイアログ表示しませんねぇ。

Delphi 2005 アップデート 2
http://support.embarcadero.com/jp/article/35987
には、

> 日本語Windows 95/98/MEで、Delphi 2005のVCLコントロールが日本語文字を表示できない問題の解決
> デバッグ時に表示される CPUビュー内のメモリダンプビューで、「表示形式の指定」の選択にかかわらず、
> マルチバイトキャラクターを表示できない問題の解決


とかあるので、もしかしたら、Delphi 2005 update 1以前で生成したプログラムでは、
マルチバイトキャラクタが適切に処理できなかったりして・・



[11253] Re4:TSaveDialogダイアログの挙動返信 削除
2017/7/10 (月) 17:58:29 Mr.XRAY
▼ igyさん

> Delphi7で試してみました。
>
>   SaveDialog1.FileName := '予定表';
> だと、ダイアログ表示しますが、
>   SaveDialog1.FileName := '予定\';
> だと、ダイアログ表示しませんねぇ。


Delphi 6 Pro(UP2) でやってみました.
ダイアログは表示されませんでした.
Delphi 2007-R2 では表示しました.

> とかあるので、もしかしたら、Delphi 2005 update 1以前で生成したプログラムでは、
> マルチバイトキャラクタが適切に処理できなかったりして・・


ということで間違いなさそうですね.
Ansi 文字「表」のコードポイントは $955C です.$5C の文字は \ です.


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