[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/08/01(Mon) 19:32
投稿者名:モモ
URL :
タイトル:
MSChartのマーカー色変更
MSChartにてユーザーがグラフの線の色を変更したら
同時にマーカーの色変更を行いたいのですができなくて困っています。
系列1は変更できるのですが  
系列2以降のマーカー色が変わってくれません。
エラーもでないのでコードは間違っていないと思うのですが
系列1しか変更できない仕様なのでしょうか?

MSChart1.Plot.SeriesCollection _
      .Item(2).DataPoints.Item(-1).Marker.FillColor.Set 0, 0, 0

VB6.0 Windows2000

投稿時間:2005/08/01(Mon) 20:32
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: MSChartのマーカー色変更
>  MSChart1.Plot.SeriesCollection _
>       .Item(2).DataPoints.Item(-1).Marker.FillColor.Set 0, 0, 0

上記の設定で本当に系列1のマーカの色が変りましたか?

マーカの色を変更するなら下記では。(下記なら変更できましたが)
    MSChart1.Plot.SeriesCollection _
    .Item(2).DataPoints.Item(-1).Marker.Pen.VtColor.Set 0, 0, 0

投稿時間:2005/08/02(Tue) 08:57
投稿者名:モモ
Eメール:
URL :
タイトル:
Re^2: MSChartのマーカー色変更
花ちゃんさん
ご回答ありがとうございました。
このコードはMSDNライブラリの「Marker オブジェクトの例」という
ところを参考にしたものです。

>上記の設定で本当に系列1のマーカの色が変りましたか?
当方の環境では 系列1のマーカーを変更することができました。

ですが、系列2以降のマーカーを変更することはできませんでした。
そのため他のイベントが影響しているのではないかとか
カラムの参照ができていないのかも とか
DoEventsを入れてみたりと いろいろ試してみたのですが
実現することができませんでした。

今考えると悩んでいた時間がほんとにもったいない。
花ちゃんさんのおかげで助かりました。
これで先に進めます。ありがとうございました。

Option Explicit
Option Base 1
Private Sub Command1_Click()
   ' 系列 1 のマーカーを表示します。
   Dim i As Integer
   For i = 1 To MSChart1.Plot.SeriesCollection.Count
      With MSChart1.Plot.SeriesCollection _
      .Item(i).DataPoints.Item(-1).Marker
         .Visible = True
         .Size = 20
         .Style = VtMarkerStyleX
         .FillColor.Automatic = False
         .FillColor.Set 0, 0, 0
      End With
   Next i
End Sub

VB6.0 Windows2000

投稿時間:2005/08/02(Tue) 09:13
投稿者名:モモ
Eメール:
URL :
タイトル:
Re^2: 質問!MSChartのマーカー色変更
解決したと思ったのですが、花ちゃんさんにご回答いただいた
MSChart1.Plot.SeriesCollection _
.Item(1).DataPoints.Item(-1).Marker.Pen.VtColor.Set 0, 0, 0
系列2以降のマーカーを変更することができましたが、
同じように系列1のマーカー色は変更できませんでした(?)

ライブラリに載っている
MSChart1.Plot.SeriesCollection _
.Item(1).DataPoints.Item(-1).Marker.Pen.VtColor.Set 0, 0, 0
では系列1の変更はできるのです。


MSChart1.Plot.SeriesCollection _
.Item(2).DataPoints.Item(-1).Marker.Pen.VtColor.Set 0, 0, 0
のコードでは系列2以降のマーカーを変更し、

MSChart1.Plot.SeriesCollection _
.Item(1).DataPoints.Item(-1).Marker.Pen.VtColor.Set 0, 0, 0
では系列1のマーカーのみ変更できる。

という認識でいいのでしょうか?
それともコード自体が間違っているのしょうか?
分からなくなってしまいました・・・

投稿時間:2005/08/02(Tue) 10:25
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: 質問!MSChartのマーカー色変更
> それともコード自体が間違っているのしょうか?

前後のコードが書いていないので解りません。

下記を試して見て下さい。
Dim ser As series
For Each ser In MSChart1.Plot.SeriesCollection
    ser.SeriesMarker.Auto = False
    With MSChart1.Plot.SeriesCollection
        .Item(1).DataPoints.Item(-1).Marker.Pen.VtColor.Set 0, 0, 0
        .Item(2).DataPoints.Item(-1).Marker.Pen.VtColor.Set 255, 0, 0
        .Item(3).DataPoints.Item(-1).Marker.Pen.VtColor.Set 0, 255, 0
    End With
    ser.SeriesMarker.Show = True
Next

投稿時間:2005/08/02(Tue) 11:57
投稿者名:モモ
Eメール:
URL :
タイトル:
Re^4: 質問!MSChartのマーカー色変更
花ちゃんさん、ご回答ありがとうございます。
提示されたコードでマーカーの色を変更することは
できました。

私の作成したコードは花ちゃんさんの
サイトのMSChart関係を参考させていただいております。
コードをコピってよく理解せずに使用しているかもしれませんが
色の指定を付け加えただけです。

    Dim x     As Integer
    Dim colorTemp, red, green, blue
    Dim Series As Object

    '======================================================
    '折れ線の場合マーカを表示
    If intChartType = VtChChartType2dLine And _
                    mnuOption2dLineMarker.Checked = True Then
                    
        'マーカの表示
        For Each Series In MSChart1.Plot.SeriesCollection
        
            Series.SeriesMarker.Show = False

            '自動のマーカを解除
            Series.SeriesMarker.Auto = False
            
            With Series.DataPoints.Item(-1)
                        
                '個別にマーカを指定 (※TyDBの構造体のLintColorに色を指定)
                For j = LBound(TyDB) To UBound(TyDB)

                    '系列は7つとし、ユーザーが任意で表示する項目を選択する
            ’その際に表示する構造体にグラフのカラムをColNoに代入しておく
                    If 0 < TyDB(j).ColNo And TyDB(j).ColNo <= chParts.ColumnCount Then
             
              ’マーカーの種類を指定
                        Select Case Series
                            Case "A1": .Marker.Style = VtMarkerStyleUpTriangle
                            Case "A2": .Marker.Style = VtMarkerStyle3dBall
                            Case "A3": .Marker.Style = VtMarkerStyleCircle
                            Case "A4": .Marker.Style = VtMarkerStyleStar
                            Case "A5": .Marker.Style = VtMarkerStyleUpTriangle
                            Case "A6": .Marker.Style = VtMarkerStyleSquare
                            Case "A7": .Marker.Style = VtMarkerStyleDiamond
                        End Select
                        
                          '*--マーカーの色を設定
                    
                        '色の三原色を取得
                        colorTemp = TyDB(j).LintColor

                        red = colorTemp And 255
                        green = Int(colorTemp / 256) And 255
                        blue = Int(colorTemp / 65536) And 255
                        
                        '色を設定します。
               '****ここで、系列1のみ変更ができない***
                    MSChart1.Plot.SeriesCollection _
                            .Item(TyDB(j).ColNo).DataPoints.Item(-1).Marker.Pen.VtColor.Set
red, green, blue

              ’指定した色の確認    
                       ’If TyDB(j).ColNo = 1 Then Text1.BackColor = RGB(red, green, blue)
                       ’If TyDB(j).ColNo = 2 Then Text2.BackColor = RGB(red, green, blue)
                       ’If TyDB(j).ColNo = 3 Then Text3.BackColor = RGB(red, green, blue)
                      
                    End If
                Next
                
            End With
            
           Series.SeriesMarker.Show = True
          
        Next
                  
    Else
        If 1 <= MSChart1.ColumnCount Then
            For Each Series In MSChart1.Plot.SeriesCollection
                Series.SeriesMarker.Show = False   'マーカーの非表示
                Series.Pen.Width = 30              '2D折線の太さ
            Next
        End If
    End If
    '======================================================
    
Debugで確認したところ 系列1のマーカーを変更する時だけ
マーカーが表示されていませんでした。
なにか関係があるのでしょうか?

VB6.0 Windows2000

投稿時間:2005/08/02(Tue) 12:24
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: 質問!MSChartのマーカー色変更
> Debugで確認したところ 系列1のマーカーを変更する時だけ
> マーカーが表示されていませんでした。

> If 0 < TyDB(j).ColNo And TyDB(j).ColNo <= chParts.ColumnCount Then

系列 1 はここを通っていますか

TyDB(0).ColNo = 1  でしょうか?

後、下記の部分は間違いないのでしょうか?
一度コメントアウトして試して見ては。

If 1 <= MSChart1.ColumnCount Then
  For Each Series In MSChart1.Plot.SeriesCollection
    Series.SeriesMarker.Show = False 'マーカーの非表示
    Series.Pen.Width = 30 '2D折線の太さ
  Next
End If

投稿時間:2005/08/02(Tue) 13:29
投稿者名:モモ
Eメール:
URL :
タイトル:
Re^6: 解決!MSChartのマーカー色変更
花ちゃんさん
幾度となくご回答いただきありがとうございました。

FillColorプロパティは図表要素の塗りつぶしに使うプロパティで
Penプロパティは図表要素の線やエッジのプロパティだと
いうことがやっと分かりました。

花ちゃんさんからご提示いただいたコードで
系列1の色が変わらなかったのは スタイルを
VtMarkerStyle3dBall に設定していた為でした。
気づくのが遅くなりすみませんでした。