| |
みなさんこんにちは
先ず訂正。私の環境ではUserFormのクラス名は以下でした。
Private Const FormClassName As String = "ThunderDFrame"
取り合えず、imageには下記のような感じで描画は出来ます。
で、yuu1さんからのご指摘の問題はあります。原因はご指摘の通りです。
そこで、これは描画を見せる為の表示用で、裏で、先のサンプルのように
メモリ上で描画し、それを保存してはどうでしょうか?
imageを2つ用意しておいて1つは「描画中を見せる為の表示用」と、
もう一つは非表示でメモリ上で書き終わった時点でファイルに保存後、
再度読み込み後「表示用」と入れ替えるとか。
それなら再描画でも消えません。
↑の検証はしてませんが、メモリ上の描画のみはかなり早いはずです。
出来なかったらごめんなさい。
VBWASURETA さんの方法と比較して、より良い方法をご検討下さい。
Private Sub CommandButton1_Click()
Dim hImg As Long 'UserForm1のImageコントロールのHWND
Dim hDC As Long 'ImageのHDC
Dim img As MSForms.Image
Dim i As Long, ret As Long
Dim rc As RECT
Set img = UserForm1.Controls.Item("image1")
hImg = findchild
hDC = GetDC(hImg)
Call GetWindowRect(hImg, rc)
MoveToEx hDC, rc.Left, rc.Top, 0
LineTo hDC, rc.Right, rc.Buttom
Sleep 500 'ちょっと時間差を付けてみただけ。
MoveToEx hDC, rc.Right, rc.Top, 0
LineTo hDC, rc.Left, rc.Buttom
' 'ビットマップには書いてないので保存は出来ません。
' SavePicture img.Picture, ThisWorkbook.Path & "\test1.bmp"
Set img = Nothing
ret = DeleteDC(hDC)
' UserForm1.Repaint 'これを実行すると消えます。
End Sub
|
|