アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB6.0にて、
http://www.uploda.org/uporg898462.jpg
このようなものを作成しました。
折れ線グラフはプログラムにて後から描画したもの、
それ以外の目盛りなどは最初からピクチャボックスに描画してあるものです。
pic1,pic2は共にピクチャボックスです。

赤い線で囲まれたpic1を目盛り、グラフ、その他のテキストボックスや文字と共に画像として保存したいのですが、
SavePicture Pic1.Image, "C:\SaveTest2.bmp"
とすると、pic1の大きさの、何も描画されていない真っ白な画像が保存されてしまいます。

また、SavePicture Pic2.Image, "C:\SaveTest2.bmp" (pic2の保存)
とすると、折れ線グラフのみが描画され、目盛りは無くなった画像が保存されてしまいます。
2つのピクチャ共にAutoRedraw=Trueを設定しています。

pic1を上手く保存する方法は無いでしょうか?
ご教授、お願いします。

A 回答 (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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!