- 日時: 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
|