- ベストアンサー
ピクチャボックスに描画した画像の保存方法
- VB6.0で作成したピクチャボックスに描画した画像を保存する方法を教えてください。
- 保存すると真っ白な画像が保存されてしまいます。
- また、一部の要素が描画されない場合もあります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ピクチャボックスのImageプロパティはピクチャボックスのグラフィックメソッド(Line,Circleなど)で描画されたものしか保持しません WinAPIの Keybd_Eventを使って ALT+PrintScreenを送り クリップボードにフォームのビットマップを送ります このピットマップを 非表示のピクチャーボックスなどで受けて 該当部分を BitBltで 別のピクチャーボックスに送り このImageプロパティを使って SavePictureを実行してみましょう 以下の例は Form2を Form1より少し大きめに作っておきます Form1の Button1のイベントで ALT+PrintScreen を送信 Form2のPictureプロパティに設定しています WinAPI BitBltの座標はピクセル単位なので フォームのScaleModeが Twipなら Screen.TwipsPerPixelXまたはScreen.TwipsPerPixelYで除算してください 例 Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Private Const VK_SNAPSHOT = &H2C Private Const VK_MENU = &H12 Private Const KEYEVENTF_EXTENDEDKEY = &H1 Private Const KEYEVENTF_KEYUP = &H2 Private Sub Command2_Click() AppActivate "Form1" Clipboard.Clear ' ALTを押す keybd_event VK_MENU, 0, KEYEVENTF_EXTENDEDKEY, 0 ' PrintScreenを押す keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 0 ' PrintScreenを離す keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0 ' ALTを離す keybd_event VK_MENU, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0 Dim pic As StdPicture Do DoEvents Do DoEvents 'Debug.Print Clipboard.GetFormat(vbCFBitmap) Loop Until Clipboard.GetFormat(vbCFBitmap) On Error Resume Next ' クリップボードを開くのに失敗するときがあるため ' ループにしてあります Set pic = Clipboard.GetData(vbCFBitmap) On Error GoTo 0 Loop While pic Is Nothing Form2.Picture = pic Form2.Show End Sub