喫茶XRAYトップページ

[スレッド全体
]

[11254] Re4:TSaveDialogダイアログの挙動返信 削除
2017/7/10 (月) 21:22:39 taka
▼ igyさん
> ▼ Mr.XRAYさん
>   SaveDialog1.FileName := '予定表';
> だと、ダイアログ表示しますが、
>   SaveDialog1.FileName := '予定\';
> だと、ダイアログ表示しませんねぇ。


GetSaveFileName : ユーザーがキャンセル または 閉じる
                  または、エラーが発生すると0を返します
https://msdn.microsoft.com/ja-jp/library/cc364728.aspx

CommDlgExtendedError
https://msdn.microsoft.com/ja-jp/library/cc410721.aspx
https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms646916(v=vs.85).aspx


ShowMessageFmt('Save file was cancelled [%.2X]', [CommDlgExtendedError]);

0x3002 FNERR_INVALIDFILENAME
ファイル名が無効です。


[11255] Re5:TSaveDialogダイアログの挙動返信 削除
2017/7/10 (月) 22:35:49 Mr.XRAY
> ShowMessageFmt('Save file was cancelled [%.2X]', [CommDlgExtendedError]);
>
> 0x3002 FNERR_INVALIDFILENAME
> ファイル名が無効です。


なるほど.
\ が可哀そうです.こんなにいじられて.ハハハッ.


[11256] Re5:TSaveDialogダイアログの挙動返信 削除
2017/7/11 (火) 08:49:43 taka
まとめ
(1) SaveDialog1.FileName の最後の文字が \ で終わる
    または、 / | < : " が文字列内に含まれていると
    CommDlgExtendedErrorが発生し、Dialog は表示されない。

(2) Delphi 2005は、update2まで当てていないと
    マルチバイト文字が正常に処理さずシングルバイト処理される可能性があり
    内部でファイル名を破壊したあとにGetSaveFileName関数を呼び出す可能性がある。

  with SaveDialog1 do
  begin
//  InitialDir := 'フォルダ名';
    FileName := Edit1.Text;
    //ファイル選択のオープンダイアログを表示
    if (Execute = True) then
        ShowMessage('File : '+ FileName)
    else
    begin
      case CommDlgExtendedError of // CommDlg.CommDlgExtendedError
        0 : ShowMessage('Save file was cancelled');
        $3002 : ShowMessage('ファイル名が無効です。');
      else
        ShowMessageFmt('Error : CommDlgExtendedError 0x%X',[CommDlgExtendedError]);
      end;
    end;
  end;


[11257] まとめ返信 削除
2017/7/11 (火) 11:58:46 Mr.XRAY
▼ takaさん
> まとめ

あらら,スミマセン.
igy さんがレスでよく書いているように,update のチェックは基本ですね.

>         ShowMessageFmt('Error : CommDlgExtendedError 0x%X',[CommDlgExtendedError]);

これいいですね.気に入りました.
こういう表示にしておけば分かりやすいです.


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