tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
MSChartコントロールで作成したグラフをPictureBoxに転送(VB6.0) ( No.27 )  [親スレッドへ]
日時: 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




 [スレッド一覧へ] [親スレッドへ]