グラフの種類を変更する(VB6.0) (No.1の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/25 00:47
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:MSChart コントロール で表示できるグラフの種類 * *********************************************************************************** よく、**グラフの表示の仕方を教えて下さいと言った質問がありますが、下記の定数のグラフ以外は表示できません。(応用したものは除く)
従って、定数に無いようなグラフは他のコントロールを使用するか、ご自分でグラフを作成して下さい。
又、グラフの表示時に系列内の個別のデータを識別する術がありません、従って系列内の個別のデータに関する設定は殆どできません。
従って、スタイルやカラーの設定等の変更は、全て、系列単位となります、まず、Excelのグラフでも出来ないような事は、MSChart では出来ないと思って下さい。(質問してもまず回答はありません)
グラフの設定でよく見かける一般的な設定以外の事をやりたければ、ご自分でグラフを作成して下さい。(やりたい事をうまく説明も出来ないような事はできません(質問してもレスがつきません)と言う事です。)
私もグラフはいくつか作っていますがそう高度な事はしておりません、表示位置の計算がほとんどです。 http://hanatyan.sakura.ne.jp/samplepic/vb6_347.htm http://hanatyan.sakura.ne.jp/samplepic/vb6_348.htm http://hanatyan.sakura.ne.jp/vbhlp/gra_en.htm
----------------------------------------------------------------------------------- 投稿者:花ちゃん MSChart コントロール でグラフの種類を変更する 2007/07/23 -----------------------------------------------------------------------------------
>>0 のコードに下記を追加・変更して下さい。
★ 今後のサンプルは、下記同様 sChartViewSet() プロシージャ内に追加する形になります。
Private Sub Form_Load() 'フォームのサイズを設定(好みで変更してください) Form1.Move 0, 0, 10400, 7000 'MSChart コントロールの表示サイズを設定 MSChart1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight Call sDataOpen 'データの読み込み Call sChartViewSet 'グラフの表示設定 '★ ---- この一行を追加 End Sub
'★ ---- 下記の部分全てを追加して下さい。
Private Sub sChartViewSet() 'グラフの表示設定 '------------------- グラフの種類を設定 ---------------------- With MSChart1 '設定しなければ、VtChChartType2dBar となる .chartType = VtChChartType2dBar 'デフォルトのグラフタイプ(2D棒) End With '--------------------------------------------------------------- End Sub
'グラフの種類は下記より選択 ' VtChChartType3dBar '3 次元バー ' VtChChartType2dBar '2 次元バー ' VtChChartType3dLine '3 次元線 ' VtChChartType2dLine '2 次元線 ' VtChChartType3dArea '3 次元面 ' VtChChartType2dArea '2 次元面 ' VtChChartType3dStep '3 次元階段 ' VtChChartType2dStep '2 次元階段 ' VtChChartType3dCombination '3 次元組み合わせ ' VtChChartType2dCombination '2 次元組み合わせ ' VtChChartType2dPie '2 次元パイ ' VtChChartType2dXY '2 次元 XY
|
凡例の表示・非表示設定(VB6.0) (No.2の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/28 10:21
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:MSChart コントロール で凡例を表示する * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん MSChart コントロール で凡例の表示・非表示設定 2007/07/23 -----------------------------------------------------------------------------------
●.LegendText = "国語" に "国 語" だとか元のデータと違う内容を設定すると以後の 系列を判定する場合に変更した内容と照合しないと照合できないので注意して下さい。
下記をsChartViewSet() プロシージャ内に追加して下さい。
Private Sub sChartViewSet() 'グラフの表示設定
'★追加部分 '------------------- 凡例の表示 ---------------------- With MSChart1 '凡例文字の設定 'チャート コントロールの ColumnLabel プロパティを実行時に変更すると、 'キャプションの文字が途切れて表示されてしまいますので下記のように設定 'して下さい。 .Plot.SeriesCollection(1).LegendText = "国語" .Plot.SeriesCollection(2).LegendText = "数学" .Plot.SeriesCollection(3).LegendText = "英語"
'凡例にフレームをつけます。 .Legend.Backdrop.Frame.FrameColor.Set 0, 0, 255 'フレームを青で作成 .Legend.Backdrop.Frame.Style = VtFrameStyleDoubleLine '2重線で囲う .Legend.Backdrop.Frame.Width = 40 '枠の太さを設定 .Legend.Backdrop.Frame.SpaceColor.Set 255, 0, 0 '2重線の間を赤で塗りつぶしす
' '凡例の表示位置を設定 .Legend.Location.LocationType = VtChLocationTypeRight .ShowLegend = True '凡例を表示する ' .ShowLegend = False '非表示の場合 End With '----------------------------------------------------------------
End Sub
'表示位置は下記の定数の中から選んで下さい。 VtChLocationTypeTop '上 VtChLocationTypeTopLeft '左上 VtChLocationTypeTopRight '右上 VtChLocationTypeLeft '左 VtChLocationTypeRight '右 VtChLocationTypeBottom '下 VtChLocationTypeBottomLeft '左下 VtChLocationTypeBottomRight '右下 VtChLocationTypeCustom 'カスタム
定数があっても設定が有効にならない場合がありますし、定数が無い設定は出来ないと思って下さい。(質問しても回答が得られない)
-----------------------------------------------------------------------------------
★上記実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno2-1.gif
|
マーカーの表示例(VB6.0) (No.3の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/23 11:46
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:MSChart コントロール で凡例を表示する * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん MSChart コントロール でマーカーの表示例 2007/07/23 -----------------------------------------------------------------------------------
下記をsChartViewSet() プロシージャ内に追加して下さい。
'★追加部分 '------------------- マーカーの表示 ---------------------- '標準のマーカーを表示する場合 With MSChart1 Dim s As Series For Each s In .Plot.SeriesCollection s.SeriesMarker.Show = True Next s End With
'--------------------------------------------------------
'系列個別に任意のマーカを設定 For Each s In MSChart1.Plot.SeriesCollection '自動のマーカを解除 'Auto プロパティがあるものは、解除してからでないと設定が有効にならない s.SeriesMarker.Auto = False '個別にマーカを指定 Select Case s Case "国 語" s.DataPoints.Item(-1).Marker.Style = VtMarkerStyleUpTriangle 'マーカーの色だけ変更 s.DataPoints.Item(-1).Marker.Pen.VtColor.Set 0, 255, 255 Case "数 学" s.DataPoints.Item(-1).Marker.Style = VtMarkerStyleCircle 'マーカーのサイズを変更(大きく) s.DataPoints.Item(-1).Marker.Size = 400 Case "英 語" s.DataPoints.Item(-1).Marker.Style = VtMarkerStyle3dBall End Select s.SeriesMarker.Show = True Next '--------------------------------------------------------------------------------
マーカーの定数は下記より選択して下さい。 VtMarkerStyleNull '隠ぺい VtMarkerStyleDash 'ダッシュ マーカー VtMarkerStylePlus 'プラス マーカー VtMarkerStyleX X 'マーカー VtMarkerStyleStar '星マーカー VtMarkerStyleCircle '円マーカー VtMarkerStyleSquare '4 角マーカー VtMarkerStyleDiamond '菱形マーカー VtMarkerStyleUpTriangle '3 角マーカー VtMarkerStyleDownTriangle '逆 3 角マーカー VtMarkerStyleFilledCircle '塗りつぶし円マーカー VtMarkerStyleFilledSquare '塗りつぶし 4 角マーカー VtMarkerStyleFilledDiamond '塗りつぶし菱形マーカー VtMarkerStyleFilledUpTriangle '塗りつぶし 3 角マーカー VtMarkerStyleFilledDownTriangle '塗りつぶし逆 3 角マーカー VtMarkerStyle3dBall '3 次元ボール マーカー
--------------------------------------------------------------------- ★上記実行図 http://hanatyan.sakura.ne.jp/samplepic/Chart001.htm
|
MSChartで軸目盛り線の設定(X軸・Y軸・第2Y軸)(VB6.0) (No.4の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/23 14:44
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:軸目盛り線の設定(X軸・Y軸・第2Y軸) * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん MSChartで軸目盛り線の設定(X軸・Y軸・第2Y軸) 2007/07/23 -----------------------------------------------------------------------------------
下記をsChartViewSet() プロシージャ内に追加して下さい。
'★追加部分
'------------------- 目盛りを設定 ---------------------- Dim i As Integer For i = 0 To 2 With MSChart1.Plot.Axis(i).Pen .Width = 70 '目盛り線の太さを設定 Select Case i Case 0 '下側の緑色の線 VtChAxisIdX (X軸) .VtColor.Set 0, 255, 0 Case 1 '左側の青色の線 VtChAxisIdY (Y軸) .VtColor.Set 0, 0, 255 Case 2 '右側の赤色の線 VtChAxisIdY2 (第2Y軸) .VtColor.Set 255, 0, 0 End Select End With Next '---------------------------------------------------------------
X軸(項目軸)・Y軸(数値軸)・第2Y軸(第2数値軸) については、下図の実行図で 位置・呼び名等を確認下さい。 ★上記実行図 http://hanatyan.sakura.ne.jp/samplepic/Chart002.htm
|
MSChartでY軸(数値軸)の目盛り線の設定 (VB6.0) (No.5の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/26 18:51
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:Y軸(数値軸)の目盛り線の設定 * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん MSChartでY軸(数値軸)の目盛り線の設定 2007/07/23 -----------------------------------------------------------------------------------
下記をsChartViewSet() プロシージャ内に追加して下さい。
'★追加部分
'------------------- Y軸(数値軸)の目盛り線の設定 VtChAxisIdY ----------------- '目盛り線の設定(点数の横線) With MSChart1.Plot.Axis(VtChAxisIdY).ValueScale .Auto = False '自動設定を解除 .Maximum = 120 '最大値 .Minimum = 0 '最小値 .MajorDivision = 12 '目盛り線の数(等分)10点毎 .MinorDivision = 2 '補助目盛り線等分 5点毎 End With
'メモリの単位が6桁を超えると[1.2e+006]のように表示されますその時は '下記のように設定して下さい。 ' MSChart1.Plot.Axis(VtChAxisIdY).Labels.Item(1).Format = "#,###" ' MSChart1.Plot.Axis(VtChAxisIdY2).Labels.Item(1).Format = "####"
'目盛り線の数値の部分の横線の描き方(グラフ軸の目盛り区分を示すマーカー(太い青色の線)) With Form1.MSChart1.Plot.Axis(VtChAxisIdY, 1) .Tick.Length = 300 '結果が解り易いように長くしております。 .Tick.Style = VtChAxisTickStyleOutside '目盛りは軸の外側に表示 '.Style = VtChAxisTickStyleInside '目盛りは軸の内側に表示 .Pen.Width = 50 '線の太さを設定 .Pen.VtColor.Set 0, 0, 255 '線の色を設定(青色) End With '目盛り線の数(等分)10点毎 の線の色を設定 With MSChart1.Plot.Axis(VtChAxisIdY).AxisGrid.MajorPen .Width = 40 '線の太さを設定 .VtColor.Set 0, 255, 255 '横の線(水色) End With '補助目盛り線の色を設定(5点毎) With MSChart1.Plot.Axis(VtChAxisIdY).AxisGrid.MinorPen .Width = 20 '線種によっては変化が少ない場合がある .Style = VtPenStyleDotted '線種を設定(点線) .VtColor.Set 255, 0, 255 '補助目盛り線の色を設定(桃色) End With '---------------------------------------------------------------------------------
Y軸目盛りの区分線・等分線・補助目盛り線 については、下図の実行図で 位置・呼び名等を確認下さい。 ★上記実行図 http://hanatyan.sakura.ne.jp/samplepic/Chart003.htm
|
X 軸のラベルの間隔、補助メモリ等の設定(VB6.0) (No.6の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/25 10:39
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:X 軸のラベルの間隔、補助メモリ等の設定 * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん MSChartでX 軸のラベルの間隔、補助メモリ等の設定 2007/07/23 -----------------------------------------------------------------------------------
下記をsChartViewSet() プロシージャ内に追加して下さい。
'★追加部分
'---------------- X 軸のラベルの間隔、補助メモリの表示単位の設定 ------------------- '実行結果の図では、解り易いように緑色の太い線で表示しております。 With MSChart1.Plot.Axis(VtChAxisIdX).CategoryScale .Auto = False 'ラベルの表示間隔 2=飛び飛びに氏名を表示 .DivisionsPerLabel = 1 '1名毎 'ラベルの区切り 2=2名一緒に一枠に表示 .DivisionsPerTick = 2 '2名毎に区切り線を表示 End With '区切りを設定しない場合 ' MSChart1.Plot.Axis(VtChAxisIdX).Tick.Style = VtChAxisTickStyleNone 'X 軸のラベルの図表の間隔線(桃色の縦線の部分) With MSChart1.Plot.Axis(VtChAxisIdX).AxisGrid .MajorPen.Style = VtPenStyleDitted .MajorPen.Width = 60 .MajorPen.VtColor.Set 255, 0, 255 End With ' Y軸の目盛り区分を示すマーカーのように長さや表示スタイルは ' 折れ線グラフの時のみ有効(別途、No.12 の表示例参照) '---------------------------------------------------------------
★上記実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno6-1.gif
|
第2Y軸の目盛り区分線を設定(VB6.0) (No.7の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/24 06:17
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:第2Y軸の目盛り区分を示すマーカーの設定 * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん MSChartで第2Y軸の目盛り区分線を設定 2007/07/24 -----------------------------------------------------------------------------------
>>5 で Y軸 に設定したのと同じ事を第2Y軸で実施 '第2Y軸の目盛り区分を示すマーカーの設定(右側の赤色の縦線の部分)
'------------------- 第2Y軸の目盛り区分線を設定 ---------------------- With MSChart1.Plot.Axis(VtChAxisIdY2, 1) .Tick.Length = 300 '結果が解り易いように長くしております。 '.Tick.Style = VtChAxisTickStyleOutside '目盛りは軸の外側に表示 .Tick.Style = VtChAxisTickStyleInside '目盛りは軸の内側に表示 .Pen.Width = 50 '線の太さを設定 .Pen.VtColor.Set 255, 0, 0 '線の色を設定(赤色) End With '---------------------------------------------------------------
★上記実行図 http://hanatyan.sakura.ne.jp/samplepic/chart005.gif
|
グラフタイトルの設定(VB6.0) (No.8の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/24 07:49
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:グラフタイトルの設定 * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん MSChartでグラフタイトルの設定 2007/07/24 ----------------------------------------------------------------------------------- TextLayout、VtFont、Backdrop 等のオブジェクトに対する、Size、Fill、Brush、Style、Shadow 等のプロパティの設定の組合せで、表示設定ができます、どのように表示できるかは、インテリセンス機能を使って、自動メンバー表示された物を選んで組合わせて試して見て下さい。 自分で試すのが面倒だからと言って、すぐ掲示板に質問するような事をしているといつまで経っても覚えられませんよ。 MSMSChart コントロールは、他のコントロールと違ってこの辺の組合せが複雑なので、エラーもでずに設定ができても、設定が有効にならない場合が多々あります。
下記をsChartViewSet() プロシージャ内に追加して下さい。
'★追加部分
'------------------- グラフタイトルの設定 ---------------------- With MSChart1.Title 'タイトル文字の設定 .Text = "期末テスト結果" '表示位置 .TextLayout.HorzAlignment = VtHorizontalAlignmentCenter 'タイトルを水平方向に表示 .TextLayout.Orientation = VtOrientationHorizontal .VtFont.Name = "MS 明朝" 'フォントサイズ .VtFont.Size = 18 'フォントスタイル .VtFont.Style = VtFontStyleBold '図表のフォント効果を設定(アンダーライン) .VtFont.Effect = VtFontEffectUnderline 'タイトルの文字の表示色 .VtFont.VtColor.Set 255, 0, 0 'タイトルの背景のスタイル .Backdrop.Fill.Style = VtFillStyleBrush 'タイトルの背景の色(黄色) .Backdrop.Fill.Brush.FillColor.Set 255, 255, 0 'ハッチングを設定 .Backdrop.Fill.Brush.Style = VtBrushStyleHatched 'タイトルの背景に影をつける .Backdrop.Shadow.Style = VtShadowStyleDrop End With '---------------------------------------------------------------
★上記実行図 http://hanatyan.sakura.ne.jp/samplepic/chart006.gif
|
Y軸のタイトルの設定(VB6.0) (No.9の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/24 11:04
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:Y軸のタイトルの設定 * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん Y軸のタイトルの設定 2007/07/24 -----------------------------------------------------------------------------------
下記をsChartViewSet() プロシージャ内に追加して下さい。
'★追加部分 '------------------- Y軸のタイトルの設定 ---------------------- With MSChart1.Plot.Axis(VtChAxisIdY).AxisTitle 'タイトルの設定 .Text = "点 数" 'タイトルのフォントサイズを設定 .VtFont.Size = 12 'タイトルのフォントカラーを設定(赤色) .VtFont.VtColor.Set 255, 0, 0 'タイトルのフォントを太字に設定 .VtFont.Style = VtFontStyleBold
'Y軸のタイトルを縦向き表示 .TextLayout.Orientation = VtOrientationVertical '縦書きで表示 '.TextLayout.Orientation = VtOrientationHorizontal '横書きで表示
'--------------------------------------------------------------------------- '.TextLayout.VertAlignment = VtVerticalAlignmentBottom '有効にならない '.TextLayout.HorzAlignment = VtHorizontalAlignmentCenter '有効にならない '従って、Y軸の中心以外の場所で表示できない。 End With '----------------------------------------------------------------------------------
★上記実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno9-1.gif
|
X軸のタイトル及び脚注の設定(VB6.0) (No.10の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/24 11:03
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:X軸のタイトル及び脚注の設定 * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん X軸のタイトル及び脚注の設定 2007/07/24 -----------------------------------------------------------------------------------
下記をsChartViewSet() プロシージャ内に追加して下さい。
'★追加部分
'------------ X軸のタイトル(生徒名)及び脚注(テストの実施日)の設定 ----------------- With MSChart1.Plot.Axis(VtChAxisIdX).AxisTitle 'タイトルの設定 .Text = "生 徒 名" 'タイトルのフォントサイズを設定 .VtFont.Size = 12 'タイトルのフォントカラーを設定(緑色) .VtFont.VtColor.Set 0, 255, 0 'タイトルのフォントを太字に設定 .VtFont.Style = VtFontStyleBold
'タイトル(生徒名)にフレームをつけます。 .Backdrop.Frame.FrameColor.Set 0, 0, 255 'フレームを青で作成 .Backdrop.Frame.Style = VtFrameStyleSingleLine '1重線で囲う
'X軸のタイトルを縦向き表示 '.TextLayout.Orientation = VtOrientationVertical '縦書きで表示 .TextLayout.Orientation = VtOrientationHorizontal '横書きで表示
'--------------------------------------------------------------------------- '.TextLayout.VertAlignment = VtVerticalAlignmentBottom '有効にならない .TextLayout.HorzAlignment = VtHorizontalAlignmentRight '有効にならない '従って、X軸の中心以外の場所で表示できない。 End With '脚注の設定 With MSChart1 .FootnoteText = "このテストは平成19年7月24日実施" .Footnote.VtFont.VtColor.Set 0, 255, 0 .Footnote.VtFont.Size = 12 End With
--------------------------------------------------------------------------------
★上記実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno10-1.gif
|
データポイントラベルの設定(VB6.0) (No.11の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/26 20:05
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:第2Y軸の目盛り区分を示すマーカーの設定 * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん MSChartで第2Y軸の目盛り区分線を設定 2007/07/24 ----------------------------------------------------------------------------------- よく個々のデータに対して設定ができないかと言った質問がありますが、基本的に系列単位の設定になります。 (従って、質問されても殆ど回答が返ってきません)
下記をsChartViewSet() プロシージャ内に追加して下さい。
'★追加部分 '------------------- データポイントラベルの設定 ---------------------- Dim s As Series For Each s In MSChart1.Plot.SeriesCollection With s.DataPoints.Item(-1).DataPointLabel '表示位置(ラベルはデータ ポイントの上に表示) .LocationType = VtChLabelLocationTypeAbovePoint 'データ ポイントの値がラベルに表示 .Component = VtChLabelComponentValue .ValueFormat = "0" '"0.0" "#,###.0" 表示フォーマット 'フォントサイズとスタイルを設定 .VtFont.Size = 12 .VtFont.Style = VtFontStyleBold '表示色棒の色と同じ色で .VtFont.VtColor.Set _ s.DataPoints(-1).Brush.FillColor.Red, _ s.DataPoints(-1).Brush.FillColor.Green, _ s.DataPoints(-1).Brush.FillColor.Blue If s.LegendText = "国語" Then .VtFont.VtColor.Set 255, 0, 255 '別に指定する場合 End If ' .Backdrop.Frame.Style = VtFrameStyleSingleLine '可能だが見苦しい End With Next '--------------------------------------------------------------- ※ データが 0 の場合ラベルに 0 を表示させたくないような場合は、値を "" と 置き換えて下さい。
★上記実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno11-1.gif
|
X軸の目盛り区分線を設定(折れ線の時のみ可)(VB6.0) (No.12の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/24 20:06
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:X軸の目盛り区分線を設定 * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん MSChartでX軸の目盛り区分線を設定 2007/07/24 ----------------------------------------------------------------------------------- 下記のように特定のグラフの時のみ設定が有効になる場合もあります。
下記をsChartViewSet() プロシージャ内に追加して下さい。
'★追加部分 '------------------- X軸の目盛り区分線を設定(折れ線の時のみ可) -------------- MSChart1.chartType = VtChChartType2dLine With MSChart1.Plot.Axis(VtChAxisIdX) '折れ線の時のみ有効 .CategoryScale.LabelTick = True '軸の中央に表示 '上記がTrurの場合に有効 .Tick.Length = 400 '結果が解り易いように長くしております。 .Tick.Style = VtChAxisTickStyleOutside '目盛りは軸の外側に表示 .Pen.Width = 50 '線の太さを設定 .Pen.VtColor.Set 0, 255, 0 '線の色を設定(緑色) End With '---------------------------------------------------------------
★上記実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno12-1.gif
|
縦棒と折線の複合グラフを表示(VB6.0) (No.13の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/27 10:58
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:縦棒と折線の複合グラフを表示、2次元組合せ * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん MSChartで縦棒と折線の複合グラフを表示 2007/07/25 ----------------------------------------------------------------------------------- 一応全部のコードを掲載しておきますが、表示するデータを追加しただけです。
Private Sub sChartViewSet() 'グラフの表示設定 '------------------- 複合グラフの表示設定 ---------------------- With MSChart1 'グラフの種類を 2次元組み合わせ を選択 .chartType = VtChChartType2dCombination '合計の系列だけを折線で表示 .Plot.SeriesCollection(4).SeriesType = VtChSeriesType2dLine '合計の系列だけを第2Y軸で表示 .Plot.SeriesCollection(4).SecondaryAxis = True End With ' 一応これだけの設定で表示できます。 '---------------------------------------------------------------
'以下の部分は好みで設定して下さい。 '目盛り線の設定(点数の横線)Y軸(数値軸) With MSChart1.Plot.Axis(VtChAxisIdY).ValueScale .Auto = False '自動設定を解除 .Maximum = 120 '最大値 .Minimum = 0 '最小値 .MajorDivision = 6 '目盛り線の数(等分)20点毎 .MinorDivision = 2 '補助目盛り線等分 10点毎 End With '目盛り線の設定(合計点数の横線)第2Y軸(第2数値軸) With MSChart1.Plot.Axis(VtChAxisIdY2).ValueScale .Auto = False '自動設定を解除 .Maximum = 300 '最大値 .Minimum = 0 '最小値 .MajorDivision = 6 '目盛り線の数(等分)50点毎 .MinorDivision = 2 '補助目盛り線等分 25点毎 End With '折れ線だけにマーカー・データポイントラベル・線の色を設定 With MSChart1.Plot.SeriesCollection(4) 'マーカーの設定 .SeriesMarker.Auto = False .DataPoints.Item(-1).Marker.Style = VtMarkerStyleCircle .DataPoints.Item(-1).Marker.Pen.VtColor.Set 255, 0, 255 .SeriesMarker.Show = True 'データポイントラベルの表示 .DataPoints.Item(-1).DataPointLabel.LocationType = VtChLabelLocationTypeAbovePoint '折れ線の色を水色で表示 .DataPoints(-1).Brush.FillColor.Set 0, 255, 255 End With End Sub
'----------------------------------------------- '折れ線で表示する 合計点 をデータに追加 Private Sub sDataOpen() 'グラフ用のデータを作成及び読み込み Dim Dat(0 To 5, 0 To 4) As Variant Dat(0, 1) = "国語" Dat(0, 2) = "数学" Dat(0, 3) = "英語" Dat(0, 4) = "合計" Dat(1, 0) = "浅野" Dat(1, 1) = 69 '国語の点数 Dat(1, 2) = 81 '数学の点数 Dat(1, 3) = 73 '英語の点数 Dat(1, 4) = 223 '合計の点数 Dat(2, 0) = "安室" Dat(2, 1) = 87 Dat(2, 2) = 80 Dat(2, 3) = 72 Dat(2, 4) = 239 '合計の点数 Dat(3, 0) = "加藤" Dat(3, 1) = 74 Dat(3, 2) = 82 Dat(3, 3) = 96 Dat(3, 4) = 252 '合計の点数 Dat(4, 0) = "斉藤" Dat(4, 1) = 71 Dat(4, 2) = 69 Dat(4, 3) = 81 Dat(4, 4) = 221 '合計の点数 Dat(5, 0) = "鈴木" Dat(5, 1) = 84 Dat(5, 2) = 86 Dat(5, 3) = 75 Dat(5, 4) = 245 '合計の点数 'グラフに表示する配列データを設定する MSChart1.ChartData = Dat() End Sub
'------------------------------------------------------------- ' 以下の部分は変更無し
Private Sub Form_Load() 'フォームのサイズを設定(好みで変更してください) Form1.Move 0, 0, 10400, 7000 'MSChart コントロールの表示サイズを設定 MSChart1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight Call sDataOpen 'データの読み込み Call sChartViewSet 'グラフの表示設定 End Sub
Private Sub Form_Resize() 'フォームのサイズ変更に合わせて MSChart コントロールの表示サイズも変更する MSChart1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight Me.Caption = "複合グラフで合計点を折れ線で表示" End Sub
'---------------------------------------------------------------
★上記実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno13-1.gif
|
棒グラフの棒の色を設定(VB6.0) (No.14の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/25 21:16
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:棒グラフの棒の色を設定 * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん MSChartで棒グラフの棒の色を設定 2007/07/25 -----------------------------------------------------------------------------------
下記をsChartViewSet() プロシージャ内に追加して下さい。
'★追加部分
'---------------------- 棒グラフの棒の色を設定 ---------------------- '棒グラフの棒の色を設定 Dim i As Long For i = 1 To 3 With MSChart1.Plot.SeriesCollection(i).DataPoints(-1).Brush '色の自動設定を解除します。 .FillColor.Automatic = False '色を設定します。 If i = 1 Then '国語 .FillColor.Set 200, 0, 200 End If If i = 2 Then '数学 .FillColor.Set 218, 165, 32 End If If i = 3 Then '英語 .FillColor.Set 0, 129, 128 End If End With Next i '---------------------------------------------------------------------- ★ くどいようですが、系列内の個々のデータに対しての設定は出来ません。
★上記実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno14-1.gif
|
棒グラフの棒の内部色を設定(VB6.0) (No.15の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/26 15:30
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:棒グラフの棒の内部色を設定 * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん MSChartで棒グラフの棒の内部色を設定 2007/07/25 -----------------------------------------------------------------------------------
下記をsChartViewSet() プロシージャ内に追加して下さい。
'★追加部分
'---------------------- 棒グラフの棒の内部色を設定 ---------------------- With MSChart1.Plot.SeriesCollection(1).DataPoints(-1).Brush 'ブラシタイプを設定します。(国語だけ設定) .Style = VtBrushStylePattern 'ビットマップ パターン ブラシ 'ブラシで使用されるパターンまたはハッチングを設定します。 .Index = VtBrushPatternChecks 'チェック模様 .PatternColor.Set 255, 255, 255 '白色の部分 End With
With MSChart1.Plot.SeriesCollection(3).DataPoints(-1).EdgePen '縁の線種を設定(反映されない) .Style = VtPenStyleDotted '系列の線 / ふちの幅の設定(英語だけ太く設定) .Width = 40 '系列の線 / ふちの色の設定(英語だけ赤色に設定) .VtColor.Set 255, 0, 0 End With '---------------------------------------------------------------
★ くどいようですが、系列内の個々のデータに対しての設定は出来ません。
★上記実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno15-1.gif
|
X 軸のラベルテキストの表示設定(VB6.0) (No.16の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/26 15:32
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:X 軸のラベルテキストの表示設定,,,,, * ***********************************************************************************
元質問:MSChartについて - しゅう 2005/02/03-11:11 No.1935
MSChartのX軸ラベルの内容を縦書きで20文字程度入れたのですが、上手く表示されません。
----------------------------------------------------------------------------------- 投稿者:花ちゃん X 軸のラベルテキストの表示設定 2007/07/25 -----------------------------------------------------------------------------------
縦書きに表示は、できますが、折り返して表示されないので縦に長くなってしまう。 (できないのか、方法が間違っているのかは不明) 因みにグラフタイトルでなら折り返して表示されます。
下記をsChartViewSet() プロシージャ内に追加して下さい。
'★追加部分
'------------------- X 軸のラベルテキストの表示設定 ---------------------- With MSChart1 .Row = 1 'テスト用に長い文字列をセット .RowLabel = "あいうえおかきくけこさしすせそたちつてと" End With With MSChart1.Plot.Axis(VtChAxisIdX).Labels.Item(1) .Auto = False .VtFont.Size = 12 '下記では WordWrap が有効にならない。(;_;) '(方法があれば教えてください) .TextLayout.WordWrap = True '上揃えで表示 .TextLayout.VertAlignment = VtVerticalAlignmentTop '縦書き表示 .TextLayout.Orientation = VtOrientationVertical End With '---------------------------------------------------------------
★上記実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno16-1.gif
|
グラフデータの表示単位を変更する方法(VB6.0) (No.17の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/26 11:14
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:グラフデータの表示単位を変更,,,,, * ***********************************************************************************
元質問:MSChartのY軸の倍率 - HB 2003/10/14-09:24 No.6229 元質問内容は、多分題名のような事だと思うのですが、....。 (詳しい質問内容は、上記ログをご覧下さい)
----------------------------------------------------------------------------------- 投稿者:花ちゃん グラフデータの表示単位を変更する方法 2007/07/26 -----------------------------------------------------------------------------------
'★追加部分
下記をsChartViewSet() プロシージャ内に追加して下さい。 '------------------- グラフデータの表示単位を変更 ---------------------- With MSChart1 Call setUnit(1000) '単位を千に設定 End With '---------------------------------------------------------------
別途、下記プロシージャを追加して下さい。 Private Sub setUnit(ByVal unit As Long) '表示するデータの桁合せ Dim i As Long, j As Long With MSChart1 For i = 0 To .ColumnCount - 1 .Column = i + 1 For j = 0 To .RowCount - 1 .Row = j + 1 '.Data = .Data * unit 参考図は、便宜上こちらを使用しました。 .Data = .Data / unit Next j Next i End With End Sub
---------------------------------------------------------------- 上記実行図、通常は、.Data / 1000 のようにして、単位を 単位:千円 のように するのですが、サンプルでは、使用した元データが2桁の数字なので、逆に桁上げ で表示しております。 又、結果が解り易いように別途、データポイントラベルも表示しております。
http://hanatyan.sakura.ne.jp/samplepic/chartno17-1.gif
|
グラフの表示を印刷用にモノクロ(白黒)で表示(VB6.0) (No.18の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/26 13:27
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:グラフをモノクロで表示,白黒,,,, * ***********************************************************************************
----------------------------------------------------------------------------------- 投稿者:花ちゃん グラフの表示を印刷用にモノクロ表示 2007/07/26 -----------------------------------------------------------------------------------
'★追加部分
下記をsChartViewSet() プロシージャ内に追加して下さい。
'------------------- グラフの表示を印刷用にモノクロ表示 ---------------------- Dim s As series For Each s In MSChart1.Plot.SeriesCollection With s.DataPoints(-1).Brush '表示スタイルをパターン表示にします .Style = VtBrushStylePattern '塗りつぶしパターンを決定します If s.LegendText = "国語" Then .Index = VtBrushPattern50Percent ' 50% パターン カラー ElseIf s.LegendText = "数学" Then .Index = VtBrushPatternChecks 'チェック模様 Else .Index = VtBrushPatternGrid 'グリッド模様 End If '塗りつぶす色の自動設定を解除します .FillColor.Automatic = False '塗りつぶす色を黒に設定します .FillColor.Set 0, 0, 0 'グラフ自体の色の自動設定を解除します .PatternColor.Automatic = False 'グラフ自体の色を白に設定します .PatternColor.Set 255, 255, 255 End With Next '---------------------------------------------------------------
★上記実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno18-1.gif
|
グラフ内のクリックした位置のデータを取得表示する(VB6.0) (No.19の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/27 14:07
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:グラフ内のクリックした位置のデータを取得表示する * ***********************************************************************************
元質問:MSChartのグラフの値について - MacB 2003/08/28-23:08 No.5652
Excelで作った折れ線グラフだとグラフの折れ線上にマウスを持っていくとその値が表示されますが、VBでも同じようなことができるのでしょうか?
----------------------------------------------------------------------------------- 投稿者:花ちゃん グラフ内のクリックした位置のデータを取得表示する 2007/07/26 ----------------------------------------------------------------------------------- 当時は、できませんと答えてしまったが、(^_^;)
'★追加部分
下記のイベントプロシージャを追加して下さい。 但し、一旦クリックしてアクティブにしてからクリックしないとうまく反応しないし、個別データに対してどうこうする事はできませんので、取得のみという事で。 (先にSeriesSelectedイベントが発生するようなので)
Private Sub MSChart1_PointSelected(Series As Integer, _ DataPoint As Integer, MouseFlags As Integer, Cancel As Integer) 'クリックした系列の個別のデータの値を取得表示する Dim kamoku As String Dim seito As String Dim data As Variant With MSChart1 kamoku = .ChartData(0, Series) '科目名 seito = .ChartData(DataPoint, 0) '生徒名 data = .ChartData(DataPoint, Series) '配列内のデータを取得 kamoku = .Plot.SeriesCollection(Series).LegendText '科目名(こちらでも可) End With MsgBox seito & "さんの" & kamoku & "の点数は" & data & "です。" End Sub
★上記実行図(一部合成しております) http://hanatyan.sakura.ne.jp/samplepic/chartno19-1.gif
|
MSChart コントロール 関係のサポート技術情報(VB6.0) (No.20の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/26 15:47
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:チャート関係のサポート技術情報 * ***********************************************************************************
----------------------------------------------------------------------------------- 投稿者:花ちゃん チャート関係のサポート技術情報 2007/07/26 -----------------------------------------------------------------------------------
http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=103&no=9
|
折れ線グラフで値が 0 の時に線を描画しないように設定(VB6.0) (No.21の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/28 23:08
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:折れ線グラフで値が 0 の時に線を描画しないように設定 * ***********************************************************************************
元質問:グラフ表示について - だいく 2002/10/17-10:49 No.1047
MSChartを使用して折れ線グラフを作成しています。 この折れ線グラフで値が0の時にこのポイントだけ線を描画しないようにしたいのですが、 どうすればよいか分かりません。
----------------------------------------------------------------------------------- 投稿者:花ちゃん 折れ線グラフで値が 0 の時に線を描画しないように設定 2007/07/26 ----------------------------------------------------------------------------------- 当時この質問も出来ないと答えてしまった。(^^ゞ
下記をsChartViewSet() プロシージャ内に追加して下さい。 グラフの種類を折れ線に設定して下さい。 データはどれか適当に 0 に設定して下さい。
'★追加部分
'--------------- 折れ線グラフで値が 0 の時に線を描画しないように設定 --------- Dim i As Long Dim j As Long With MSChart1 For i = 0 To .ColumnCount - 1 For j = 0 To .RowCount - 1 .Row = j + 1 .Column = i + 1 If Val(.data) = 0 Then .DataGrid.SetData j + 1, i + 1, 0, True End If Next j Next i End With
'---------------------------------------- 以前は、上記のように設定していたのですが、SetData メソッド の第4引数が True の場合、 データ ポイントは NULL 値になりチャート上では省略されるという事を知り下記のように 設定すると、上記と同様に設定した値が表示されません。
object.SetData (row, column, dataPoint, nullFlag)
'加藤 の英語の点数を プロット表示しない場合 MSChart1.DataGrid.SetData 3, 3, 96, True
'---------------------------------------------------------------
通常の場合の実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno21-1.gif
値が0の場合線を引かない設定の実行結果 http://hanatyan.sakura.ne.jp/samplepic/chartno21-2.gif
|
ADOを使ってCSVファイルをMSChartコントロールにセットする(VB6.0) (No.22の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/28 14:26
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:ADO,ADODC,データ連結,Recordset,DataSource, * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん ADOを使ってCSVファイルをMSChartコントロールにセットする 2007/07/26 ----------------------------------------------------------------------------------- HDR=NO や HDR=YES としても、国語、数学、英語 のデータが読み込まれなかったり、2行目の データが読み込まれなかったりします。
(下記サイトでも問題になっており、解決していないようです。) http://homepage1.nifty.com/MADIA/vb/vb_bbs2/200405/200405_04050078.html
MSChartコントロール では、最初の行・列のデータが文字列なら項目行として扱うように設定 されているのに対し、ADOでは、1行目を項目行として扱うか、扱わないかの設定になっている のでこのような事がおきます。 逆に、列の方の項目列は上手く読み込まれる事で理解して頂けるかと思います。
そこで、そう言った事を無視して全ての行、列、をデータ行として読み込むようにしてやれば いい訳で、HDR=YES とし(既定でHDR=YESなので省略してもよい)、RS.MoveFirst で最初のレコー ドに移動してから、MSChartコントロール に、Set MSChart1.DataSource = RS としてやれば 全てのデータが、MSChartコントロールにセットされるので、後は、MSChartコントロールが 文字列は、項目として扱ってくれるので上手く表示されるようになります。
当初は、1行目のデータは凡例としてしか使用しないので、別途コードで記入するようにして いたのですが、テストしていた時に偶然回避策が見つかったので、その方法を掲載して置きます。 (コロンブスの卵と同じで理由と対策が解れば何でもない事です。)
---------------------------------------------------------------------------------- デザイン画面は同じものを使って下さい。 参照設定で Microsoft ActiveX Data Objects 2.* Libraryにチェックを入れておいて下さい
Option Explicit Private Sub Form_Load() Form1.Move 0, 0, 10400, 7000 MSChart1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight Dim CN As New ADODB.Connection, RS As New ADODB.Recordset, strSQL As String Dim FolderName As String, DataFile As String FolderName = App.Path 'データのあるフォルダを取得 DataFile = "Test.csv" 'データファイル名を取得
'データベースに接続するための情報を設定する CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & FolderName & ";Extended Properties=""text;HDR=YES;FMT=Delimited;"";" CN.Open 'コネクションをオープン
'Recordsetオブジェクトのオープン strSQL = "Select * From " & DataFile RS.Open strSQL, CN, adOpenStatic, adLockReadOnly, adCmdText '※ 一旦先頭(最初)のレコードに移動(ここがミソ) RS.MoveFirst
Set MSChart1.DataSource = RS 'MSChartにデータを代入 MSChart1.ShowLegend = True '凡例を表示 'Recordset・Connection を閉じる RS.Close CN.Close '参照を解放。 Set RS = Nothing Set CN = Nothing End Sub
------------------------------------------------------------------------------ Excel で作成したCSVファイルの図 http://hanatyan.sakura.ne.jp/samplepic/chartno22-1.gif
上記コードの実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno22-2.gif
|
クリックした系列のグラフの色を任意の色に変更する(VB6.0) (No.23の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/27 14:50
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:グラフの色を指定の色に変更,クリックした系列 * ***********************************************************************************
----------------------------------------------------------------------------------- 投稿者:花ちゃん クリックした系列のグラフの色を任意の色に変更する 2007/07/26 ----------------------------------------------------------------------------------- 同様の質問も何度かでていたような(深く詮索しないでね)
但し、系列個別に指定の色で塗る事はできません。ピクチャーボックス上にでも転送すれば 出来るだろうが。
'★追加部分 CommonDialog1 をフォームに貼り付けておいて下さい。 下記のイベントプロシージャを追加して下さい。
Private Sub MSChart1_SeriesSelected(Series As Integer, _ MouseFlags As Integer, Cancel As Integer) 'クリックした系列のグラフの色を任意の色に変更する Dim r As Integer Dim g As Integer Dim b As Integer 'CommonDialog より指定の色を取得 On Error Resume Next With CommonDialog1 .CancelError = True .ShowColor If Err.Number <> 0 Then Err.Clear Exit Sub End If r = .Color And vbRed g = (.Color And vbGreen) \ &H100 b = (.Color And vbBlue) \ &H10000 End With
With MSChart1 '2D および 3D の折れ線グラフはPen オブジェクトを使用 If .chartType = VtChChartType2dLine Or .chartType = VtChChartType3dLine Then .Plot.SeriesCollection(Series).Pen.VtColor.Set r, g, b Else .Plot.SeriesCollection(Series).DataPoints(-1).Brush.FillColor.Set r, g, b End If End With End Sub
----------------------------------------------------------------------- 上記の実行図(一部合成しております)
http://hanatyan.sakura.ne.jp/samplepic/chartno23-1.gif
|
グラフの背景を設定(VB6.0) (No.24の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/27 15:39
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:グラフの背景を設定,グラフエリア,プロットエリア,,, * ***********************************************************************************
----------------------------------------------------------------------------------- 投稿者:花ちゃん グラフの背景を設定 2007/07/26 -----------------------------------------------------------------------------------
'★追加部分
下記をsChartViewSet() プロシージャ内に追加して下さい。
'------------------- グラフの背景を設定 ---------------------- With MSChart1.Plot .Backdrop.Fill.Style = VtFillStyleBrush 'グラフエリアの背景色を設定(薄い黄色の部分) .Backdrop.Fill.Brush.FillColor.Set 255, 255, 150 'フレーム(外枠)を表示 .Backdrop.Frame.Style = VtFrameStyleThickInner '影を付ける .Backdrop.Shadow.Style = VtShadowStyleDrop
'-------------------------------------------- 'プロットエリアを塗りつぶし .Wall.Brush.Style = VtBrushStyleSolid 'プロットエリアの背景色を設定(薄い水色の部分) .Wall.Brush.FillColor.Set 200, 255, 255 End With '---------------------------------------------------------------
上記コードの実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno24-1.gif
|
3D棒グラフを回転角、上昇角を指定して回転表示(VB6.0) (No.25の個別表示) [スレッド一覧へ] |
- 日時: 2011/03/28 15:24
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:回転させながら表示,ちらつく,チラツキ,転送,ピクチャーボックスに表示 * ***********************************************************************************
----------------------------------------------------------------------------------- 投稿者:花ちゃん 3D棒グラフを回転角、上昇角を指定して回転表示 2007/07/26 ----------------------------------------------------------------------------------- 3D グラフを回転角度、上昇角度変更しながら連続して回転させながら表示させている 尚、クリップボードを使って簡単なチラツキ防止対策を行っております。
チラツキ防止対策については、この掲示板でも紹介しておりますので、ご覧下さい。 http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view&no=30
'★追加部分 Timer1 コントロールとPicture1 コントロールをフォームに貼り付けておいて下さい。 グラフのタイプを 3D棒グラフにしておいて下さい。
下記をsChartViewSet() プロシージャ内かボタンのイベントにでも追加して下さい。
'------------------- グラフを回転表示する ---------------------- Timer1.Interval = 500 'お好みの速さで(10 〜 1000)設定して下さい。 '画面のチラツキ防止の為にPicture に表示 With Picture1 .AutoRedraw = True .Visible = True .Move 0, 0, Me.ScaleWidth, Me.ScaleHeight End With '---------------------------------------------------------------
下記コードをそのまま追加して下さい。 Private Sub Timer1_Timer() '3D棒グラフを回転表示 'VB5.0 ではエラーが発生 lngRotation = lngRotation + 10 '回転角度 lngElevation = lngElevation + 5 '上昇角度 DoEvents 'キーイベント等の取得の為 MSChart1.Plot.View3d.Set lngRotation, lngElevation DoEvents If lngElevation >= 90 Then lngElevation = -30 If lngRotation >= 360 Then lngRotation = 0 Dim tmpPic As New StdPicture Clipboard.Clear DoEvents 'クリップボードにコピー MSChart1.EditCopy DoEvents 'クリップボード内のイメージを読込 Picture1.Picture = Clipboard.GetData() End Sub
'下記変数をForm の宣言セクションに記入して下さい。 Private lngRotation As Long '回転角度 Private lngElevation As Long '上昇角度
------------------------------------------------------------------- 以上の設定で実行すれば、グラフが回転しながら表示されるはずです。
上記の実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno25-1.gif
|
系列を排除及び系列を非表示及び統計線を色々表示(VB6.0) (No.26の個別表示) [スレッド一覧へ] |
- 日時: 2007/07/31 08:41
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:最大値線,最小値線,平均値線,標準偏差線,トレンド線,統計線,系列の排除 * ***********************************************************************************
----------------------------------------------------------------------------------- 投稿者:花ちゃん 系列を排除及び系列を非表示及び統計線を色々表示 2007/07/31 -----------------------------------------------------------------------------------
下記をsChartViewSet() プロシージャ内に追加して下さい。
'★追加部分
'------------------- 系列を排除/非表示・統計線を表示 -------------------- '系列 2 を非表示にする MSChart1.Plot.SeriesCollection(2).Position.Hidden = True
'系列 3 を排除する MSChart1.Plot.SeriesCollection(3).Position.Excluded = True
With MSChart1.Plot.SeriesCollection.Item(1).StatLine '統計線を設定します。 '下記の Flag の設定は、1系列に対して1種類しか表示出来ません。 '(下記の定数の中から1つ選択して下さい) .Flag = VtChStatsMaximum '系列の最小値を表示します。 '.Flag = VtChStatsMinimum '系列の最小値を表示します。 '.Flag = VtChStatsMean '系列中の値の数学的平均を表示します。 '.Flag = VtChStatsStddev '系列中の値の標準偏差を表示します。 '.Flag = VtChStatsRegression '系列の値が示すトレンド線を表示します。
'線の種類を決めます。 .Style(VtChStatsMaximum) = VtPenStyleDashDitDit '線の色の自動設定を解除します。 .VtColor.Automatic = False '色を設定します。 .VtColor.Set 0, 0, 255 '線の幅を設定します。 .Width = 50 End With
'------------------------------------------------------------------------------------
MSChart1 コントロールには、MSChart1 コントロール上の任意の位置に Line を引くような メソッドやプロパティは用意されておりません。(文字列も同様です。)
MSChart1 コントロール で描画したものをPictureBox上に転送してPictureBox 上で加工する 事なるかと思いますが、それも色々条件が限定されます。
-------------------------------------------------------------------------------------
上記コードの実行図 http://hanatyan.sakura.ne.jp/samplepic/Chart026.htm
|
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
|
ADOを使ってExcelファイルをMSChartコントロールにセットする(VB6.0) (No.28の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/03 19:22
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][エクセル][] * * キーワード:ADO,ADODC,データ連結,Recordset,DataSource,エクセルファイル,*.xls * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん ADOを使ってExcelファイルをMSChartに表示する 2007/08/03 ----------------------------------------------------------------------------------- 別途、ADOを使ってCSVファイルをMSChartコントロールにセットする(VB6.0) (No.22) >>22 もご覧下さい。
Option Explicit
Private Sub Form_Load() Form1.Move 0, 0, 10400, 7000 MSChart1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight Dim CN As New ADODB.Connection, RS As New ADODB.Recordset Dim xlFileName As String, SheetNeme As String '読み込むExcelファイルのパス xlFileName = App.Path & "\Test.xls" CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & _ xlFileName & ";Extended Properties=Excel 8.0;" Set RS = New ADODB.Recordset 'シート[Test]を読み込む RS.Open "[Test$]", CN, adOpenStatic, adLockOptimistic '※ 一旦先頭(最初)のレコードに移動(これがミソ) RS.MoveFirst Set MSChart1.DataSource = RS 'MSChartにデータを代入 MSChart1.ShowLegend = True '凡例を表示 'Recordset・Connection を閉じる RS.Close CN.Close '参照を解放。 Set RS = Nothing Set CN = Nothing End Sub
---------------------------------------------------------------------------- 上記に使用したExcelファイルです。 http://hanatyan.sakura.ne.jp/samplepic/chartno28-1.gif
上記コードの実行結果の図です。 http://hanatyan.sakura.ne.jp/samplepic/chartno28-2.gif
|
データの行と列を入れ替えてグラフを表示する(VB6.0) (No.29の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/03 19:21
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:行列,行と列,系列の入れ替え * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん データの行と列を入れ替えてグラフを表示する 2007/08/03 -----------------------------------------------------------------------------------
Excel では、系列の入れ替え(系列を行方向、列方向に設定)が簡単にできるのだから MSChart コントロールでも出来るはずだと思って、プロパティ等を色々調べていたら やっとの事で見つかりました。 ヘルプの解説では下記のようになっているので、試して見ないと気がつかない。
DataSeriesInRow プロパティ
系列データの読み込み元は、図表と関連するデータ グリッドの行か列かを示す値を設定します。値の取得も可能です。
解れば、単純な事だが、DataSeriesInRow で検索しても国内ではヒットしないところを 見ると、私と同じで気がついた人がいないのかな。
下記をsChartViewSet() プロシージャ内かボタンのイベントにでも追加して下さい。
MSChart1.ShowLegend = True '凡例を表示(変更が解り易いように表示)
MSChart1.Plot.DataSeriesInRow = False '系列を列方向に定義 MSChart1.Plot.DataSeriesInRow = True '系列を行方向に定義
---------------------------------------------------------------------------------- 上記コードの実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno29-1.gif
|
MSChartコントロールのオブジェクト、プロパティ、メソッド一覧表(VB6.0) (No.30の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/03 19:50
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:オブジェクト,プロパティ,メソッド,イベント * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん オブジェクト、プロパティ、メソッド一覧表 2007/08/03 -----------------------------------------------------------------------------------
オブジェクト、プロパティ、メソッド一覧表 http://hanatyan.sakura.ne.jp/samplepic/chartno30-1.htm
MSChart コントロールのイベント一覧表 http://hanatyan.sakura.ne.jp/samplepic/chartno30-2.htm
この表をコピーしてExce上にペーストして、Excelの機能のフィルターオプションの設定で 検索抽出すれば、逆引きヘルプとして利用でき、簡単に目的のプロパティ等が調べられます。 又、印刷して手元に置いておけば必要時にすぐに調べる事ができ結構便利かと思います。 又、各オブジェクトに関しては大抵ヘルプに使用例が記載されているのでヘルプをご覧下さい。
|
当サイト内で掲載しているMSChart コントロールのサンプル集(VB6.0) (No.31の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/04 06:22
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][エクセル][] * * キーワード:サンプル集,Tips, * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん 当サイト内で掲載しているMSChart 関係のサンプル集 2007/08/04 ----------------------------------------------------------------------------------- 下記は、当サイト内の[MSChart 関係]で掲載しているサンプル集です。 http://hanatyan.sakura.ne.jp/vbhlp/MSChartFLM.htm
内容的には重複しているものもありますが、こちらの方をみれば、MSChart 関係の事が すべて解るようにと掲載しました。
-------------------------------------------------------------------------------------- 表示するグラフのタイプを変更・データポイントラベル・凡例・マーカの表示設定(その2) http://hanatyan.sakura.ne.jp/vbhlp/mscsono2.htm
タイトル関係・目盛り・表示線・グラフのハッチングを設定する(その3) http://hanatyan.sakura.ne.jp/vbhlp/mscsono3.htm
グラフを印刷する(その4) 1.PrintForm メソッドを使用しての印刷 2.クリップボード経由の印刷 http://hanatyan.sakura.ne.jp/vbhlp/MSChart02.htm
グラフをモノクロで表示する(その5) http://hanatyan.sakura.ne.jp/vbhlp/MSChart03.htm
3Dグラフの回転表示(その6) http://hanatyan.sakura.ne.jp/vbhlp/MSChart04.htm
積み上げ棒グラフで合計のデータポイントラベルを表示 http://hanatyan.sakura.ne.jp/vbhlp/MSChart05.htm
散布図を表示(プロット表示・ライン表示の2種類) http://hanatyan.sakura.ne.jp/vbhlp/sanpuzu.htm
グラフを点(プロット)だけで表示(折れ線のマーカの設定・折れ線の線の非表示) (2D折れ線グラフを使って折れ線を非表示設定して、マーカーを表示して実現) http://hanatyan.sakura.ne.jp/vbhlp/MSChart10.htm
|
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
|
MSChartコントロールの色々なグラフの表示座標を取得する(VB6.0) (No.33の個別表示) [スレッド一覧へ] |
- 日時: 2007/08/24 11:43
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:ピクチャーボックス,項目の位置,位置,座標,描画,塗る,こんな事も出来ます* *********************************************************************************** >>27 MSChartコントロールで作成したグラフをPictureBoxに転送表示する の応用例で今まで 色々掲示板で質問があったのですが、MSChartコントロール 上では出来なくてもPictureBox上 に転送する事により出来るのでここに紹介して置きます。 色々なケースに合せて作成するのは大変なので、今回は、一部決め打ちを行っておりますので ご使用状況に合せて変更願います。
下記のような場合は、これで解決できるかと思います。
MSChartで補完してプロットする.. - ラトリア 2007/05/23-14:58 No.9211 MSChartの座標値を求めるには - わかば 2007/07/08/21-20:17 No.9938
----------------------------------------------------------------------------------- 投稿者:花ちゃん MSChartコントロールの色々なグラフの表示位置を取得する 2007/08/24 ----------------------------------------------------------------------------------- 1.数値軸及び第二数値軸のX座標位置の取得 これにより各ラベルの間隔・位置等も取得できます。 2.数値軸の目盛りの基点(0 点)の横線のY座標を取得 3.数値軸の目盛りの終点(100 点)の横線のY座標を取得 (これにより座標位置でのデータの値が取得できグラフの表示位置が求められる) 4.マウス位置の色を取得する事により上記と組み合わせれば、マウス位置のデータの値が 取得できる
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
'----------------------------------------------------------------------------- 'ピクセルカラー値を取得する(P489) Private Declare Function GetPixel Lib "gdi32" _ (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long Private LPos() As Single 'ラベルの表示座標
Private Sub Form_Resize() 'フォームのサイズ変更に合わせて MSChart コントロールの表示サイズも変更する If Me.Visible = False Then Exit Sub MSChart1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight Picture1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight 'フォームのサイズが変更されたら転送しなおす。 Call SetPicture(MSChart1, Picture1)
Dim i As Long Dim X1 As Single Dim X2 As Single 'X軸の始点のX座標を求める(一番左側の目盛りの縦線) For i = 20 To 100 If GetPixel(Picture1.hdc, i, 50) = 0 Then X1 = i Exit For End If Next i 'X軸の終点のX座標を求める(一番右側の目盛りの縦線) For i = Picture1.ScaleWidth - 40 To Picture1.ScaleWidth - 150 Step -1 If GetPixel(Picture1.hdc, i, 50) = 0 Then X2 = i Exit For End If Next i '生徒名1人当たりの幅を取得 Picture1.DrawStyle = 6 Dim XPos As Single XPos = (X2 - X1) / MSChart1.RowCount ReDim LPos(MSChart1.RowCount) As Single For i = 0 To MSChart1.RowCount LPos(i) = X1 + (i * XPos) '各ラベルの左側の座標位置を取得 Next i '目盛りの始点のY座標を求める(グラフの 0点の横ラインの位置) Dim MinPos As Long For i = Picture1.ScaleHeight - 30 To Picture1.ScaleHeight - 80 Step -1 If GetPixel(Picture1.hdc, 60, i) = 0 Then MinPos = i '目盛り 0 の位置のY座標 Exit For End If Next i '目盛りの最大点のY座標を求める(グラフの 100点の横ラインの位置) Dim MaxPos As Long For i = Picture1.ScaleTop + 10 To Picture1.ScaleTop + 80 If GetPixel(Picture1.hdc, 60, i) = 0 Then MaxPos = i '目盛り 100 の位置のY座標 Exit For End If Next i 'これで縦棒の位置と間隔が求められます。 Dim co As Long Dim b(10) As Long Dim n As Long For i = LPos(0) To LPos(1) If co <> GetPixel(Picture1.hdc, i, 370) Then b(n) = i - LPos(0) - 1 ' Debug.Print b(n) n = n + 1 End If co = Picture1.Point(i, 370) Next i
' 以上の事が解れば個々のグラフの表示位置が計算すれば求められます。 End Sub
Private Sub Picture1_MouseMove(Button As Integer, _ Shift As Integer, x As Single, y As Single) 'マウス位置のデータをToolTipTextで表示 Picture1.ToolTipText = "" With MSChart1 Select Case x Case LPos(0) To LPos(1) If Picture1.Point(x, y) = RGB(255, 0, 0) Then Picture1.ToolTipText = .ChartData(1, 0) & "さんの" & _ .ChartData(0, 1) & "の点数は" & _ .ChartData(1, 1) & "点です。" End If If Picture1.Point(x, y) = RGB(0, 255, 0) Then Picture1.ToolTipText = .ChartData(1, 0) & "さんの" & _ .ChartData(0, 2) & "の点数は" & _ .ChartData(1, 2) & "点です。" End If If Picture1.Point(x, y) = RGB(0, 0, 255) Then Picture1.ToolTipText = .ChartData(1, 0) & "さんの" & _ .ChartData(0, 3) & "の点数は" & _ .ChartData(1, 3) & "点です。" End If Case LPos(1) To LPos(2) If Picture1.Point(x, y) = RGB(255, 0, 0) Then Picture1.ToolTipText = .ChartData(2, 0) & "さんの" & _ .ChartData(0, 1) & "の点数は" & _ .ChartData(2, 1) & "点です。" End If If Picture1.Point(x, y) = RGB(0, 255, 0) Then Picture1.ToolTipText = .ChartData(2, 0) & "さんの" & _ .ChartData(0, 2) & "の点数は" & _ .ChartData(2, 2) & "点です。" End If If Picture1.Point(x, y) = RGB(0, 0, 255) Then Picture1.ToolTipText = .ChartData(2, 0) & "さんの" & _ .ChartData(0, 3) & "の点数は" & _ .ChartData(2, 3) & "点です。" End If Case LPos(2) To LPos(3) If Picture1.Point(x, y) = RGB(255, 0, 0) Then Picture1.ToolTipText = .ChartData(3, 0) & "さんの" & _ .ChartData(0, 1) & "の点数は" & _ .ChartData(3, 1) & "点です。" End If If Picture1.Point(x, y) = RGB(0, 255, 0) Then Picture1.ToolTipText = .ChartData(3, 0) & "さんの" & _ .ChartData(0, 2) & "の点数は" & _ .ChartData(3, 2) & "点です。" End If If Picture1.Point(x, y) = RGB(0, 0, 255) Then Picture1.ToolTipText = .ChartData(3, 0) & "さんの" & _ .ChartData(0, 3) & "の点数は" & _ .ChartData(3, 3) & "点です。" End If Case LPos(3) To LPos(4) If Picture1.Point(x, y) = RGB(255, 0, 0) Then Picture1.ToolTipText = .ChartData(4, 0) & "さんの" & _ .ChartData(0, 1) & "の点数は" & _ .ChartData(4, 1) & "点です。" End If If Picture1.Point(x, y) = RGB(0, 255, 0) Then Picture1.ToolTipText = .ChartData(4, 0) & "さんの" & _ .ChartData(0, 2) & "の点数は" & _ .ChartData(4, 2) & "点です。" End If If Picture1.Point(x, y) = RGB(0, 0, 255) Then Picture1.ToolTipText = .ChartData(4, 0) & "さんの" & _ .ChartData(0, 3) & "の点数は" & _ .ChartData(4, 3) & "点です。" End If Case LPos(4) To LPos(5) If Picture1.Point(x, y) = RGB(255, 0, 0) Then Picture1.ToolTipText = .ChartData(5, 0) & "さんの" & _ .ChartData(0, 1) & "の点数は" & _ .ChartData(5, 1) & "点です。" End If If Picture1.Point(x, y) = RGB(0, 255, 0) Then Picture1.ToolTipText = .ChartData(5, 0) & "さんの" & _ .ChartData(0, 2) & "の点数は" & _ .ChartData(5, 2) & "点です。" End If If Picture1.Point(x, y) = RGB(0, 0, 255) Then Picture1.ToolTipText = .ChartData(5, 0) & "さんの" & _ .ChartData(0, 3) & "の点数は" & _ .ChartData(5, 3) & "点です。" End If Case Else Picture1.ToolTipText = "" End Select End With
'--------------------------------------------------------------------- ' 折れ線グラフのような場合は下記でもいいかな。 ' With MSChart1 ' Select Case X ' Case LPos(0) To LPos(1) ' Picture1.ToolTipText = .ChartData(1, 0) & "さんの" & _ ' .ChartData(0, 1) & "の点数は" & _ ' .ChartData(1, 1) & "点で" & vbCrLf & _ ' .ChartData(0, 2) & "の点数は" & _ ' .ChartData(1, 2) & "点で" & vbCrLf & _ ' .ChartData(0, 3) & "の点数は" & _ ' .ChartData(1, 3) & "点です。" '--------------------- 以下 省略 -------------------------- End Sub
'----------------- 以下のコードは No.27 のサンプルと同様です -----------------------
Private Sub Form_Load() 'フォームのサイズを設定(好みで変更してください) Me.Visible = False 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 Me.Visible = True End Sub Private Sub sChartViewSet() With MSChart1 .chartType = VtChChartType2dBar 'デフォルトのグラフタイプ(2D棒) .ShowLegend = True '凡例を表示する '背景を塗っておく(この色の部分はクリックしても塗りつぶさない) .Backdrop.Fill.Brush.Style = VtBrushStyleSolid .Backdrop.Fill.Brush.FillColor.Set 255, 255, 255 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 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/chartno33-1.gif
|
複合グラフで折れ線を最前面に表示する(VB6.0) (No.34の個別表示) [スレッド一覧へ] |
- 日時: 2007/09/04 18:25
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:複合グラフ、2次元組合せ,最前面,表示順,重なり * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん MSChartで縦棒と折線の複合グラフを表示 2007/09/04 ----------------------------------------------------------------------------------- 基本的な設定は、>>13 縦棒と折線の複合グラフを表示(VB6.0) と同じです。
'------------------- 複合グラフの表示設定 ---------------------- With MSChart1 'グラフの種類を 2次元組み合わせ を選択 .chartType = VtChChartType2dCombination '合計の系列だけを折線で表示 .Plot.SeriesCollection(4).SeriesType = VtChSeriesType2dLine '合計の系列だけを第2Y軸で表示 .Plot.SeriesCollection(4).SecondaryAxis = True
'下記の1行を追加するだけでOKです。 .Plot.SeriesCollection(4).Position.Order = -1
End With ' 一応これだけの設定で表示できます。 '---------------------------------------------------------------
Order プロパティ 図表内の系列の位置を設定します。値の取得も可能です。 順序の位置が別の系列と一致すると、その系列はスタックされます。
order 整数 (Integer)。位置順序です。
.Order = -1 全ての系列の最前面に表示されます。 .Order = 0 系列2.3の前面で、系列1の背面に表示されます。 .Order = 1 系列3の前面で、系列1.2の背面に表示されます。 .Order = 2〜 全ての系列の背面に表示されます。
|
MSChart コントロール (一部機能が動作不良)(VB6.0) (No.35の個別表示) [スレッド一覧へ] |
- 日時: 2013/06/21 08:42
- 名前: VBレスキュー(花ちゃん)
- ***********************************************************************************
* カテゴリー:[チャート][][] * キーワード: , , , , , *********************************************************************************** サイトの改装に伴い、サンプルを見直していたら、一部機能が動作しなくなっております。 又、VB6.0 の IDE が落ちたりもします。 現在調査中ですが、何かご存知の方がおられましたら書き込み願います。
|
|