VB6です。CommonDialogのShowSaveでFilterで指定した拡張子に変えるとDefaultのファイル名がその拡張子に自動的に変わるようにしたいと思っています。
例えばABC.jpgを読んで加工してから保存する際にDefaultはABC.jpgになるようにし、保存する拡張子を.bmpに変更した場合は表示されるFileNameを自動的にABC.bmpに変更するようにしたいと考えています。CommonDialogでは無理でしょうか? 教えてください。
ShowSaveの前にFilenameを指定する。
ヤマ@文系さま。回答をありがとうございました。
現在このようにしていますが拡張子を変えてもFileNameが変わらないのでこれを変えたいというのが質問です。
'-----
CommonDialog1.FilterIndex = 2
CommonDialog1.Filter = "画像データ(*.bmp)|*.bmp|画像ファイル(*.Jpg)|*.jpg"
FileName = SrcFileName (ここに元の加工前のファイル名が入る。例えばABC.JPG)
CommonDialog1.ShowSave
ここで表示してから拡張子をBMPに変えたら元のFileNameABC.JPGがABC.BMPと表示されるようにしたいというものです。よろしくお願いします。
コモンダイアログにvb6だと
イベント自体がないのでサブクラス化してメッセージを取得して
さらにsendmessageという手法になるのかもしれません。
(過去ログに似たようなことがあった気がします)
> サブクラス化してメッセージを取得して
こらこら。(汗)
>> 拡張子を変えてもFileNameが変わらないので
DefaultExt プロパティを指定した上で、ShowSave メソッドの実行後に、
Flags プロパティに cdlOFNExtensionDifferent のビットフラグが
立っているかを確認すれば OK でしょう。
ただし、cdlOFNExtensionDifferent フラグが立っていたとしても、事前に
cdlOFNOverwritePrompt を指定していた場合には、上書き確認のメッセージの
都合上、それが既存ファイルであるかどうかをチェックした方が良いでしょう。
# 追記
>> サブクラス化してメッセージを取得して
> こらこら。(汗)
やろうと思えばできない事もないですが、基本的には、コモンダイアログで
サブクラス化を行うべきではないとされています。
http://msdn.microsoft.com/library/ja/jpwinui/html/_win32_ofnhookproc.asp
>>> これを変えたいというのが質問です。
「ダイアログ表示後」に加工するなどという話ではなく、
「ダイアログ表示中」に、動的に変化させたいという要件なら、
できれば見送った方が無難だと思います。
コモンダイアログに標準外の動作を求める場合、『フック』処理を
必要としますが、その場合、コモンダイアログ コントロールを使う事が
できず、すべて API による面倒な処理が求められるからです。
http://www.vbstation.net/spec/S3.htm
リストファイルボックスで自作した方が話がはやい気がしますが・・・
>リストファイルボックスで
ファイルリストボックスの間違い・・・orz
>こらこら。(汗)
笑(汗
>サブクラス化を行うべきではないとされています。
>http://msdn.microsoft.com/library/ja/jpwinui/html/_win32_ofnhookproc.asp
確かに、他の方法の方を選択した方が無難っぽいですね。
勉強になりました。(質問者ではないですが)
.NETでやるというのも手です。扱いが楽になっているので。
そういえば、コモンダイアログ風なクラス?を作っておられて
サンプルコードとともに、どこかで提供されていた気がしますが、
それならとり回しが楽なんではないでしょうか。。
皆様、いろいろとご経験に基づくアドバイスをありがとうございました。プロパティーの何かを設定するとかの方法でできるのではないかと思っていましたがどうもそのような機能がないことが分かりましたので今後の使いまわしを考えたファイルリストボックスを使ったFORMを作っておくことにしました。ご指導ありがとうございました。
ツイート | ![]() |