tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
MSChartコントロールで横棒グラフ・吊下げ棒グラフを作成する(VB6.0) ( No.32 )  [親スレッドへ]
日時: 2007/08/05 18:08
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[チャート][][]                                                      *
* キーワード:ピクチャーボックス,コピー,ペースト,横置き,こんな事も出来ます    *
***********************************************************************************

>>27 MSChartコントロールで作成したグラフをPictureBoxに転送 の応用編です。
横置き用に文字列等を設定した棒グラフを、PictureBox に転送して、右回りに90度回転させ
たものです。画像の回転は、この掲示板で紹介している、画像を高速に90度毎に回転表示
する方法 を使っておりますので、コードはそちらをご覧下さい。
 http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=2&no=0

MSChartコントロールの仕様等の制限で、上手く表示設定できない部分もあります。
凡例は、左上に別途、後で、PictureBox に書いて見ました。

又、同じく180度回転させた吊下げ棒グラフも描いてみました。こんな事もできるという事で。

-----------------------------------------------------------------------------------
投稿者:花ちゃん MSChartコントロールで横棒グラフ・吊下げ棒グラフを作成 2007/08/05
-----------------------------------------------------------------------------------

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       'データの読み込み
   Me.Visible = False
   Form1.ScaleMode = vbPixels    'スケールモードをピクセル単位に設定
   'ピクチャーボックスのプロパティの初期設定
   With Picture1
      .ScaleMode = vbPixels      'スケールモードをピクセル単位に設定
      .BorderStyle = 0
      .AutoRedraw = True
      .Visible = True
      .Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
   End With
   Call sChartViewSet   'グラフの表示設定
   Me.Visible = True
   Me.Show
End Sub

Private Sub sChartViewSet()
   With MSChart1
      .chartType = VtChChartType2dBar      'デフォルトのグラフタイプ(2D棒)
      '凡例の表示位置を設定(下記以外に上手く表示できない)
      .Legend.Location.LocationType = VtChLocationTypeTop
      .Legend.TextLayout.Orientation = VtOrientationUp
      .Legend.VtFont.Name = "@MS P明朝"
      .ShowLegend = True                  '凡例を表示する
   End With
  
   'X軸のラベルの設定
   With MSChart1.Plot.Axis(VtChAxisIdX).Labels(1)
      .Auto = False
      .TextLayout.Orientation = VtOrientationUp
      .VtFont.Size = 14
      .VtFont.VtColor.Set 255, 0, 0
   End With
      
   'Y軸のラベルフォントの設定
   With MSChart1.Plot.Axis(VtChAxisIdY2).Labels(1)
      '左側の 点数の目盛
      .Auto = False
      '下から上へ読めるように回転(文字が綺麗に表示されない)
      .TextLayout.Orientation = VtOrientationUp
      .VtFont.Size = 12
   End With
   '上側の目盛りは非表示に設定
   MSChart1.Plot.Axis(VtChAxisIdY).AxisScale.Hide = True

   'タイトルの設定
   With MSChart1.Title
      'タイトル文字の設定
      .Text = "期末テスト結果"
      '表示位置
      .Location.LocationType = VtChLocationTypeLeft
      .TextLayout.Orientation = VtOrientationUp
      'フォントサイズ
      .VtFont.Size = 16
      'フォントスタイル
      .VtFont.Style = VtFontStyleBold
      'タイトルの文字の表示色
      .VtFont.VtColor.Set 255, 0, 255
   End With
  
   'データポイントラベルの設定
   Dim s As Series
   For Each s In MSChart1.Plot.SeriesCollection
      With s.DataPoints.Item(-1).DataPointLabel
         '表示位置(ラベルはデータ ポイントの上に表示)
         .LocationType = VtChLabelLocationTypeAbovePoint
         'データ ポイントの値がラベルに表示
         .Component = VtChLabelComponentValue
         'フォントサイズとスタイルを設定
         .VtFont.Size = 11
         '下から上へ読めるように回転(文字が綺麗に表示されない)
         .TextLayout.Orientation = VtOrientationUp
'         .VtFont.Style = VtFontStyleBold
         '表示色棒の色と同じ色で
         .VtFont.VtColor.Set _
         s.DataPoints(-1).Brush.FillColor.Red, _
         s.DataPoints(-1).Brush.FillColor.Green, _
         s.DataPoints(-1).Brush.FillColor.Blue
      End With
   Next
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
  
  
   '画像を高速に90度毎に回転表示する方法
   'http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=2&no=0
   '上記サンプルを使って右回りに90度回転
   PicRot90 Picture1
End Sub

Private Sub Form_Resize()
   'フォームのサイズ変更に合わせて MSChart コントロールの表示サイズも変更する
   MSChart1.Move 0, 0, Me.ScaleHeight, Me.ScaleWidth
   Picture1.Move 0, 0, MSChart1.Width, MSChart1.Height

   'フォームのサイズが変更されたら転送しなおす。
   Call SetPicture(MSChart1, Picture1)
   Me.Caption = "MSChartコントロールで横棒グラフを作成する(473)"
  
   '自前の凡例の表示設定
   Dim r As Long, g As Long, b As Long, i As Long
   Shape1.Move 10, 10, 50, 50
   For i = 1 To MSChart1.Plot.SeriesCollection.Count
      r = MSChart1.Plot.SeriesCollection(i).Pen.VtColor.Red
      g = MSChart1.Plot.SeriesCollection(i).Pen.VtColor.Green
      b = MSChart1.Plot.SeriesCollection(i).Pen.VtColor.Blue
      Picture1.Line (15, 15 * i)-(25, 10 + (15 * i)), RGB(r, g, b), BF
      Picture1.CurrentX = 30
      Picture1.CurrentY = 15 * i
      Picture1.Print MSChart1.ChartData(0, i)
   Next i
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/chartno32-1.gif

  上記コードの実行図(吊下げ棒グラフ)
  http://hanatyan.sakura.ne.jp/samplepic/chartno32-2.gif



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