コモンダイアログで拡張子を自動変更する方法

解決


Mr.Err  2006-10-06 22:14:05  No: 96831

VB6です。CommonDialogのShowSaveでFilterで指定した拡張子に変えるとDefaultのファイル名がその拡張子に自動的に変わるようにしたいと思っています。

例えばABC.jpgを読んで加工してから保存する際にDefaultはABC.jpgになるようにし、保存する拡張子を.bmpに変更した場合は表示されるFileNameを自動的にABC.bmpに変更するようにしたいと考えています。CommonDialogでは無理でしょうか?  教えてください。


ヤマ@文系  2006-10-07 00:21:13  No: 96832

ShowSaveの前にFilenameを指定する。


Mr.Err  2006-10-07 03:28:50  No: 96833

ヤマ@文系さま。回答をありがとうございました。

現在このようにしていますが拡張子を変えてもFileNameが変わらないのでこれを変えたいというのが質問です。

'----- 
CommonDialog1.FilterIndex = 2
CommonDialog1.Filter = "画像データ(*.bmp)|*.bmp|画像ファイル(*.Jpg)|*.jpg"
FileName = SrcFileName (ここに元の加工前のファイル名が入る。例えばABC.JPG)

CommonDialog1.ShowSave

ここで表示してから拡張子をBMPに変えたら元のFileNameABC.JPGがABC.BMPと表示されるようにしたいというものです。よろしくお願いします。


ヤマ@文系  2006-10-07 05:36:43  No: 96834

コモンダイアログにvb6だと
イベント自体がないのでサブクラス化してメッセージを取得して
さらにsendmessageという手法になるのかもしれません。
(過去ログに似たようなことがあった気がします)


魔界の仮面弁士  2006-10-07 06:29:17  No: 96835

> サブクラス化してメッセージを取得して
こらこら。(汗)

>> 拡張子を変えてもFileNameが変わらないので
DefaultExt プロパティを指定した上で、ShowSave メソッドの実行後に、
Flags プロパティに cdlOFNExtensionDifferent のビットフラグが
立っているかを確認すれば OK でしょう。

ただし、cdlOFNExtensionDifferent フラグが立っていたとしても、事前に 
cdlOFNOverwritePrompt を指定していた場合には、上書き確認のメッセージの
都合上、それが既存ファイルであるかどうかをチェックした方が良いでしょう。


魔界の仮面弁士  2006-10-07 07:14:24  No: 96836

# 追記

>> サブクラス化してメッセージを取得して
> こらこら。(汗)
やろうと思えばできない事もないですが、基本的には、コモンダイアログで
サブクラス化を行うべきではないとされています。
http://msdn.microsoft.com/library/ja/jpwinui/html/_win32_ofnhookproc.asp

>>> これを変えたいというのが質問です。
「ダイアログ表示後」に加工するなどという話ではなく、
「ダイアログ表示中」に、動的に変化させたいという要件なら、
できれば見送った方が無難だと思います。

コモンダイアログに標準外の動作を求める場合、『フック』処理を
必要としますが、その場合、コモンダイアログ コントロールを使う事が
できず、すべて API による面倒な処理が求められるからです。
http://www.vbstation.net/spec/S3.htm


通ってみた  2006-10-07 12:46:46  No: 96837

リストファイルボックスで自作した方が話がはやい気がしますが・・・


通ってみた  2006-10-07 12:48:09  No: 96838

>リストファイルボックスで

ファイルリストボックスの間違い・・・orz


ヤマ@文系  2006-10-07 23:42:34  No: 96839

>こらこら。(汗)
笑(汗

>サブクラス化を行うべきではないとされています。
>http://msdn.microsoft.com/library/ja/jpwinui/html/_win32_ofnhookproc.asp

確かに、他の方法の方を選択した方が無難っぽいですね。
勉強になりました。(質問者ではないですが)

.NETでやるというのも手です。扱いが楽になっているので。

そういえば、コモンダイアログ風なクラス?を作っておられて
サンプルコードとともに、どこかで提供されていた気がしますが、
それならとり回しが楽なんではないでしょうか。。


Mr.Err  2006-10-08 19:42:23  No: 96840

皆様、いろいろとご経験に基づくアドバイスをありがとうございました。プロパティーの何かを設定するとかの方法でできるのではないかと思っていましたがどうもそのような機能がないことが分かりましたので今後の使いまわしを考えたファイルリストボックスを使ったFORMを作っておくことにしました。ご指導ありがとうございました。


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

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






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