[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/12/20(Mon) 11:00
投稿者名:アルゼイド
Eメール:
URL :
タイトル:
imageの保存
PictureBoxに表示したものを保存したいのですが、
SavePicture Picture1.Image, App.Path & "\**.bmp"
では、プログラムのある場所に**という名前でしか保存できないので、コモンダイアログなどを使って
任意の場所に任意の名前で保存するにはどうしたらいいのでしょうか?
分かる方よろしくお願いします。

投稿時間:2004/12/20(Mon) 11:35
投稿者名:kazuやん
Eメール:
URL :
タイトル:
Re: imageの保存
> PictureBoxに表示したものを保存したいのですが、
> SavePicture Picture1.Image, App.Path & "\**.bmp"
> では、プログラムのある場所に**という名前でしか保存できないので、コモンダイアログなどを使って
> 任意の場所に任意の名前で保存するにはどうしたらいいのでしょうか?
> 分かる方よろしくお願いします。

コモンダイアログを使う場合は
メニューの[プロジェクト]−[コンポーネント]でMicrosoft Common Dialog Control 6.0(VB5.0の場合は5.0) を選択して下さい。

コモンダイアログを表示し任意の場所に保存する場合は『CommonDialog1.ShowSave』

一度コモンダイアログについてネット等で調べた方が宜しいと思います。

投稿時間:2004/12/20(Mon) 11:36
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re: imageの保存
まずコモンダイアログでファイルの保存場所を取得。
取得したパスで

  SavePicture Picture1.Image, CommonDialog1.FileName

って感じ。
以前似たような質問がありましたが、コモンダイアログで出来るのはファイル名の取得までです。
保存の処理は自分で書きます。

投稿時間:2004/12/20(Mon) 14:05
投稿者名:アルゼイド
Eメール:
URL :
タイトル:
Re^2: imageの保存
うまくいきません…

Private Sub cmd7_Click()
    selectkey = MsgBox("イメージを保存しますか?", 4 + 48, "保存")
    Select Case selectkey
      Case vbYes
   With CommonDialog1
       .Flags = cdlOFNOverwritePrompt
       .Filter = "全てのファイル(*.*)|*.*"
       .ShowSave
       ファイル番号 = FreeFile
       Form1.MousePointer = vbHourglass
       Open CommonDialog1.FileName For Output As #ファイル番号
        SavePicture Pic1.Image, CommonDialog1.FileName
       Close #ファイル番号
       Form1.MousePointer = vbDefault
   End With
      Case vbNo
    End Select
End Sub

今こんな感じなんですけど、どうしたらいいのでしょうか・・・

投稿時間:2004/12/20(Mon) 14:41
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^3: imageの保存
>   Open CommonDialog1.FileName For Output As #ファイル番号
>     SavePicture Pic1.Image, CommonDialog1.FileName
>   Close #ファイル番号

激しくワロタw
こんな方法誰に教わったんですかねェ?

  SavePicture Pic1.Image, CommonDialog1.FileName

これだけで充分です。
変なOpenだのCloseだのしないで下さい。

投稿時間:2004/12/20(Mon) 14:58
投稿者名:アルゼイド
Eメール:
URL :
タイトル:
Re^4: imageの保存
そうなんですか!
ためしてみましたけど保存はできるみたいなのですが、.bmp形式になってくれません…

投稿時間:2004/12/20(Mon) 16:30
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^5: imageの保存
> そうなんですか!
> ためしてみましたけど保存はできるみたいなのですが、.bmp形式になってくれません…

ヘルプを見る限り

> Image プロパティ内のピクチャは、元のファイルの形式にかかわらず、
> 常にビットマップ (.BMP) ファイルとして保管されます。

と書いてあるのでビットマップ形式で保存されてるハズです。

拡張子が.bmpにならないという話であれば、コモンダイアログの
DefaultExtプロパティやFilterプロパティを調べてください。

投稿時間:2004/12/20(Mon) 17:16
投稿者名:アルゼイド
Eメール:
URL :
タイトル:
Re^6: imageの保存
ありがとうございます
学校でやっていて、今日はもう追い出されてしまったので明日ためしてみます〜

投稿時間:2004/12/21(Tue) 12:04
投稿者名:アルゼイド
Eメール:
URL :
タイトル:
Re^7: imageの保存
Private Sub cmd7_Click()
    selectkey = MsgBox("イメージを保存しますか?", 4 + 48, "保存")
    Select Case selectkey
      Case vbYes
    With CommonDialog1
        .Flags = cdlOFNOverwritePrompt
        .DefaultExt = "bmp"
        .Filter = "全てのファイル(*.*)|*.*"
        .ShowSave
        ファイル番号 = FreeFile
        On Error GoTo cmd7_err
        SavePicture Pic1.Image, CommonDialog1.FileName
    End With
      Case vbNo
    End Select
cmd7_err:
    Exit Sub
End Sub

とすることで無事に解決しました!ありがとうございます。
ですが、保存先の容量が不足していた場合にエラーが出るので
On Error GoTo cmd7_err
cmd7_err:
    Exit Sub
をつけたのですが、その時に保存先の容量が不足していますなどのメッセージを出すにはどうしたら
いいのでしょうか?
cmd7_err:
MsgBox("保存先の容量が不足しています。", vbOKOnly)
Exit Sub
としたのですが、構文エラーになってしまいます・・・

投稿時間:2004/12/21(Tue) 13:06
投稿者名:kazuやん
Eメール:
URL :
タイトル:
Re^8: imageの保存
> cmd7_err:
> MsgBox("保存先の容量が不足しています。", vbOKOnly)
> Exit Sub
> としたのですが、構文エラーになってしまいます・・・

Msgboxの表示パターンに「vbOKOnly」を指定すると戻り値が発生します。
試しに MsgBox (MsgBox("保存先の容量が不足しています。", vbOKOnly)) を実行すると「1」が表示されると思います。
ですので、戻り値を受け取る形で記述しないと構文エラーになります。

Dim ret As Integer
ret = MsgBox("保存先の容量が不足しています。", vbOKOnly)

投稿時間:2004/12/21(Tue) 13:33
投稿者名:アルゼイド
Eメール:
URL :
タイトル:
Re^9: imageの保存
> Dim ret As Integer
> ret = MsgBox("保存先の容量が不足しています。", vbOKOnly)


なんでもいいので絶対そうなる条件をつくっていれればいいということですか?

投稿時間:2004/12/21(Tue) 13:48
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^10: imageの保存
> なんでもいいので絶対そうなる条件をつくっていれればいいということですか?

この質問の意味が分かりませんが…。

Call MsgBox("保存先の容量が不足しています。", vbOKOnly)

にするか

MsgBox "保存先の容量が不足しています。", vbOKOnly

とすればエラーは出ないかと。
ついでですが、エラーメッセージそのものはErr.Descriptionで取得出来ます。

投稿時間:2004/12/21(Tue) 13:57
投稿者名:アルゼイド
Eメール:
URL :
タイトル:
Re^11: imageの保存
えっと、たとえばはじめにX = Integerと設定しておいて
X = Integerだったらメッセージを表示するようにすればいいのかなぁと思ったんです

Callだけでよかったんですね。

投稿時間:2004/12/21(Tue) 14:30
投稿者名:アルゼイド
Eメール:
URL :
タイトル:
Re^12: imageの保存
最終的に
コモンダイアログのキャンセルが押された時のエラーを解決して、
Private Sub cmd7_Click()
    selectkey = MsgBox("イメージを保存しますか?", 4 + 48, "保存")
    Select Case selectkey
      Case vbYes
    With CommonDialog1
        .Flags = cdlOFNOverwritePrompt
        .DefaultExt = "bmp"
        .Filter = "ビットマップファイル(*.bmp)|*.bmp|全てのファイル(*.*)|*.*"
        On Error GoTo cmd7a_err
        .ShowSave
        ファイル番号 = FreeFile
        On Error GoTo cmd7b_err
        SavePicture Pic1.Image, CommonDialog1.FileName
    End With
      Case vbNo
    End Select
cmd7a_err:
    Exit Sub
cmd7b_err:
    Call MsgBox("保存先の容量が不足しています。", vbOKOnly)
    Exit Sub
End Sub

こんな感じで完成させることができました。みなさんありがとうございました!