| 日時: 2007/08/04 07:07名前: 花ちゃん
 
************************************************************************************ カテゴリー:[チャート][][]                                                      *
 * キーワード:ピクチャーボックス,コピー,ペースト,加工,描画,塗る,こんな事も出来ます*
 ***********************************************************************************
 
 MSChart コントロールで作成したグラフを PictureBox に転送表示する事によってグラフ上
 の任意の位置に文字を書いたり、棒グラフの棒の色を個別に変更する等が可能になります。
 又、作成したグラフの保存や印刷も簡単に行う事ができます。
 
 -----------------------------------------------------------------------------------
 投稿者:花ちゃん MSChartコントロールで作成したグラフをPictureBoxに転送 2007/07/31
 -----------------------------------------------------------------------------------
 
 全てのコードを掲載しておきます。
 
 '--------------------------------------------------------------------------------
 ' K.J.K. さんが掲示板に投稿されていたコードを使わせてもらっています。(下記参照)
 ' http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=30&no=1
 '--------------------------------------------------------------------------------
 
 Option Explicit
 
 Private Enum DVASPECT
 DVASPECT_CONTENT = 1
 DVASPECT_THUMBNAIL = 2
 DVASPECT_ICON = 4
 DVASPECT_DOCPRINT = 8
 End Enum
 Private Type RECT
 Left   As Long
 Top    As Long
 Right  As Long
 Bottom As Long
 End Type
 Private Declare Function OleDraw Lib "ole32.dll" _
 (ByVal pUnk As Object, ByVal dwAspect As DVASPECT, _
 ByVal hDCDraw As Long, lprcBounds As RECT) As Long
 
 
 Private Sub Form_Load()
 'フォームのサイズを設定(好みで変更してください)
 Form1.Move 0, 0, 10400, 7000
 'MSChart コントロールの表示サイズを設定
 MSChart1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
 Picture1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
 Call sDataOpen       'データの読み込み
 Call sChartViewSet   'グラフの表示設定
 
 Form1.ScaleMode = vbPixels    'スケールモードをピクセル単位に設定
 'ピクチャーボックスのプロパティの初期設定
 With Picture1
 .ScaleMode = vbPixels      'スケールモードをピクセル単位に設定
 .BorderStyle = 0
 .AutoRedraw = True
 .Visible = True
 .Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
 End With
 End Sub
 
 Private Sub sChartViewSet()
 With MSChart1
 .chartType = VtChChartType2dBar     'デフォルトのグラフタイプ(2D棒)
 .ShowLegend = True                  '凡例を表示する
 End With
 End Sub
 
 Private Sub SetPicture(ctl As Object, myPic As PictureBox)
 'OleDraw API を使ってグラフを転送
 Dim udtRect As RECT
 With udtRect
 .Left = 0
 .Top = 0
 .Right = ctl.Width - 1
 .Bottom = ctl.Height - 1
 End With
 With myPic
 .Cls
 .Move 0, 0, ctl.Width, ctl.Height
 Call OleDraw(ctl.Object, DVASPECT_CONTENT, .hdc, udtRect)
 End With
 End Sub
 
 Private Sub Form_Resize()
 'フォームのサイズ変更に合わせて MSChart コントロールの表示サイズも変更する
 MSChart1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
 Picture1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
 'フォームのサイズが変更されたら転送しなおす。
 Call SetPicture(MSChart1, Picture1)
 Me.Caption = "OleDraw API を使ってPictureBox にグラフを転送"
 End Sub
 
 Private Sub sDataOpen()
 'グラフ用のデータを作成及び読み込み
 Dim Dat(0 To 5, 0 To 3) As Variant
 Dat(0, 1) = "国語"
 Dat(0, 2) = "数学"
 Dat(0, 3) = "英語"
 
 Dat(1, 0) = "浅野"
 Dat(1, 1) = 69       '国語の点数
 Dat(1, 2) = 81       '数学の点数
 Dat(1, 3) = 73       '英語の点数
 
 Dat(2, 0) = "安室"
 Dat(2, 1) = 87
 Dat(2, 2) = 80
 Dat(2, 3) = 72
 
 Dat(3, 0) = "加藤"
 Dat(3, 1) = 74
 Dat(3, 2) = 82
 Dat(3, 3) = 96
 
 Dat(4, 0) = "斉藤"
 Dat(4, 1) = 71
 Dat(4, 2) = 69
 Dat(4, 3) = 81
 
 Dat(5, 0) = "鈴木"
 Dat(5, 1) = 84
 Dat(5, 2) = 86
 Dat(5, 3) = 75
 
 'グラフに表示する配列データを設定する
 MSChart1.ChartData = Dat()
 End Sub
 
 ------------------------------------------------------------------------------
 下記の実行図は、上記のコードの実行結果に文字を書いたり、グラフの棒の色を変えたり
 しています。(その部分は、ややこしくなるので今回は未掲載)
 
 無論の事ラインも後でピクチャーボックス上で描画しております。
 (こんな事も出来ますと言うサンプルでもあります)
 http://hanatyan.sakura.ne.jp/samplepic/chartno27-1.gif
 
 
 
 |