|
VBWASURETA さん:
朝会社に来てNetを見てびっくり。そんな時間にこんなに詳しく解説
してもらえるとは!!本当にありがとうございます。
Alt+PrintScreen自体を使った事がなく最初は話がピンと来ていなか
ったのですが提示して頂いたコードを自分のコードに組み込んでやっ
てみました。Function test()をUserForm1が描画し終わった次点で
OldWindow=SetActiveWindow(UF1hwnd)
ret=test()
としてBitMapを保存、UserForm3にImageを配置しLoadPictureで
描画する事ができました。(描画した物とは、色が反転していまし
た。このあたりも勉強が必要ですね。)しかし出来たと言うだけで内
容を理解している、というにはほど遠い感じですね。(一日やそこらで
とても理解できる物ではないよですね?)でもBitMapを勉強するいい
きっかけになりました。BitMapを操れれば面白い事が沢山できそうで
すね。VBWASURETA さん本当にありがとうございます。(BitMaP師匠
とお呼びしていいですか?^^)
>>>API詳しそうでしたから....
いやいや、とんでもないです。このサイトで自分の質問を検索したら
Findwindowをneputuneさんに教えて頂いた日付が去年の夏くらいでし
たから...一年も経っていない超初心者です。それまでAPIといえば
ループを回すのにGetTickCountくらいしか使った事がなかった私に
APIの道を開いてくれたのはneputuneさんでした。感謝感謝です。
neputune さん:
サンプルありがとうございます。自分のコードに改造して組み込んで
みました。
Private Sub 描画開始_Click()
'描画原点
Dim centerX As Long, centerY As Long
Dim hBmp As Long, hdc As Long
Dim hComDC As Long
Dim ret As Long, hbmDefault As Long
Dim i As Long
Dim img As MSForms.Image
Dim picPicture As IPictureDisp
Set img = UserForm1.Controls.Item("image1")
hBmp = img.Picture.Handle
hdc = GetDC(0) '<<<ここの引数が0なのが疑問です。
'0にするとスクリーン全体のデバイスコンテキストのハンドルが取得できる
'とありましたが、ここでいうスクリーン全体というのは、Image1を
'指しているのでしょうか?
hComDC = CreateCompatibleDC(hdc)
ret = ReleaseDC(0, hdc)
ret = SetMapMode(hComDC, MM_TWIPS)
hbmDefault = SelectObject(hComDC, hBmp)
'イメージを使用した時の単位系が勉強不足で
'計算は適当です...
centerX = (img.Picture.Width / 2) * 0.65
centerY = -((img.Picture.Height / 2) * 0.65)
'描画原点に移動
MoveToEx hComDC, centerX, centerY, 0
'放射線上に円を書く
With WorksheetFunction
For i = 1 To 10000
LineTo hComDC, centerX + ((centerX * 2 / 3) * _
Sin(.Radians(0.036 * i))), _
centerY + ((centerX * 2 / 3) * _
Cos(.Radians(0.036 * i)))
MoveToEx hComDC, centerX, centerY, 0
Next
End With
'ここの使い方あってますかね?
'SelectObjectを使用した時の値を hbmDefaultに保持しておいて
'hcComDCとhBmpを切り離した後 hComDcを削除
ret = DeleteDC(SelectObject(hComDC, hbmDefault))
ret = DeleteDC(hComDC)
UserForm1.Repaint
'=========================================================
' BitMapの保存
Set picPicture = img.Picture
SavePicture picPicture, ThisWorkbook.Path & "\test1.bmp"
'========================================================
Set img = Nothing
Set picPicture = Nothing
End Sub
この後UserForm3にImageを配置し、LoadPictureで表示することが
出来ました。ありがとうございます。
しかし、いくつか改善しなくてはならない所があり
1. 描画の過程を見れなくなくなってしまった。見た感じ描画が全部
終わってから表示されるように見える。 (これが一番いたいです。
作っているものは、描画の過程を見るというのが目的でした。)
2. 描画時に、今まではFormのデバイスコンテキストを使っていたので、画面でいう
下方向が Yプラス、上がYマイナスだったのが、Imageだと通常数学で
習う画面上がYプラス、下がYマイナスになっているので実際使って
いるコードに大改造が必要(描画するコードだけで、3000行くらいに
なってしまっています。)
この辺も時間をかけて直していかないといけないですね。でも先が見えた
感じがしてほっとしております。
|
|