Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


27615 / 76732 ←次へ | 前へ→

【54435】Re:Formに描画(API LineTo など)した絵をBitMapで保存できますか?
質問  みそじのおじさん  - 08/3/12(水) 19:32 -

引用なし
パスワード
   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行くらいに
 
  なってしまっています。)

この辺も時間をかけて直していかないといけないですね。でも先が見えた

感じがしてほっとしております。

1 hits

【54392】Formに描画(API LineTo など)した絵をBitMapで保存できますか? みそじのおじさん 08/3/11(火) 14:51 質問
【54394】Re:Formに描画(API LineTo など)した絵を... みそじのおじさん 08/3/11(火) 15:42 質問
【54395】Re:Formに描画(API LineTo など)した絵を... VBWASURETA 08/3/11(火) 16:15 回答
【54396】Re:Formに描画(API LineTo など)した絵を... neptune 08/3/11(火) 16:19 発言
【54398】Re:Formに描画(API LineTo など)した絵を... みそじのおじさん 08/3/11(火) 17:38 質問
【54399】Re:Formに描画(API LineTo など)した絵を... VBWASURETA 08/3/11(火) 17:45 発言
【54401】Re:Formに描画(API LineTo など)した絵を... みそじのおじさん 08/3/11(火) 18:49 質問
【54403】Re:Formに描画(API LineTo など)した絵を... VBWASURETA 08/3/11(火) 20:58 発言
【54408】Re:Formに描画(API LineTo など)した絵を... VBWASURETA 08/3/12(水) 2:49 発言
【54435】Re:Formに描画(API LineTo など)した絵を... みそじのおじさん 08/3/12(水) 19:32 質問
【54437】Re:Formに描画(API LineTo など)した絵を... VBWASURETA 08/3/12(水) 23:04 発言
【54438】Re:Formに描画(API LineTo など)した絵を... neptune 08/3/12(水) 23:21 発言
【54439】Re:Formに描画(API LineTo など)した絵を... neptune 08/3/12(水) 23:23 発言
【54451】Re:Formに描画(API LineTo など)した絵を... みそじのおじさん 08/3/13(木) 16:08 発言
【54454】Re:Formに描画(API LineTo など)した絵を... VBWASURETA 08/3/13(木) 17:52 発言
【54461】Re:Formに描画(API LineTo など)した絵を... みそじのおじさん 08/3/13(木) 22:30 発言
【54462】Re:Formに描画(API LineTo など)した絵を... VBWASURETA 08/3/14(金) 0:34 発言
【54463】Re:Formに描画(API LineTo など)した絵を... VBWASURETA 08/3/14(金) 1:19 発言
【54452】Re:Formに描画(API LineTo など)した絵を... neptune 08/3/13(木) 16:20 発言
【54404】Re:Formに描画(API LineTo など)した絵を... neptune 08/3/11(火) 21:23 発言
【54450】Re:Formに描画(API LineTo など)した絵を... yuu1 08/3/13(木) 15:56 回答
【54464】Re:Formに描画(API LineTo など)した絵を... VBWASURETA 08/3/14(金) 9:15 発言
【54548】Re:Formに描画(API LineTo など)した絵を... みそじのおじさん 08/3/18(火) 11:32 お礼
【54550】Re:Formに描画(API LineTo など)した絵を... yuu1 08/3/18(火) 12:55 回答
【54551】Re:Formに描画(API LineTo など)した絵を... neptune 08/3/18(火) 14:55 発言
【54552】Re:Formに描画(API LineTo など)した絵を... VBWASURETA 08/3/18(火) 15:53 発言
【54559】Re:Formに描画(API LineTo など)した絵を... みそじのおじさん 08/3/19(水) 10:59 お礼
【54560】Re:Formに描画(API LineTo など)した絵を... neptune 08/3/19(水) 13:03 発言

27615 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free