[リストへもどる]
一括表示

投稿時間:2003/09/11(Thu) 11:44
投稿者名:HB
Eメール:
URL :
タイトル:
オブジェクトの保存
またまたお邪魔します。 MsChartを使ったプログラムを作成中です。
質問の要旨は、カラーのグラフをモノクロ表示にした後、別のグラフの選択でまたカラー表示に戻したいのです。

現象は、同一Formであるカラー表示のグラフをメニューのクリックなどでモノクロ表示にします。
その後、メニューのグラフ選択で別のグラフを表示しても、カラーで表示されずモノクロで表示されてしまいます。

方法としては、モノクロ表示前のグラフのプロパテーなどを保存しておき、
カラーで表示する場合はその保存したものをMsChartにSetしてやればいいと考え、
ダメモトで、Dim obj as object、set obj = MsChart1 で保存しておき、
カラー表示の場合は、Set MsChart1 = obj とやったら見事エラーです。 当然か! アハハ。

MsChartの場合、いろんなオブジェクトの塊みたいなものなので、
for each ・・・などで、グラフのすべてのオブジェクトを保存しなければならないみたいですが、その方法が分かりません(^^ゞ

なお、モノクロ表示の場合は別のFormで表示させ、前に戻る場合はモノクロのFormをUnloadして、
前のカラーのFormを表示させれば目的は達せられますが、やりかたがヤボッタイので躊躇しています。

動作環境はWinXPのVB6.0です。 ご存知の方おられましたらお願いします。

投稿時間:2003/09/11(Thu) 16:49
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: オブジェクトの保存
ようは、モノクロ表示にした後、元のカラー表示に簡単に戻せればいいのでしょうか?
元々モノクロ表示は塗りつぶしのパターンをハッチングに変更して
いるだけなので、表示パターンを塗りつぶしにして再表示すればできます。

私のサンプルなら下記のように(MSChart関係参照)

Private Sub mnuSolid_Click()
    Dim series As Object
    For Each series In MSChart1.Plot.SeriesCollection
        With series
            '表示スタイルを塗りつぶしパターンに
            .DataPoints(-1).Brush.Style = VtBrushStyleSolid
        End With
    Next
    '2D棒グラフで再表示
    intChartType = VtChChartType2dBar
    Call sChartViewSet
End Sub

投稿時間:2003/09/11(Thu) 19:57
投稿者名:HB
Eメール:
URL :
タイトル:
Re^2: オブジェクトの保存
花ちゃん ありがとうございます(^^
ご指示いただいた上記のコードを実行してみました。
確かにパターンは塗りつぶしになりますが、カラーは黒でした。

そこで「MSChart関係」を参照して、下記のコードに変更して試したところ、色は設定出来ました。

Private Sub mnuSolid_Click()

   dim i as integer

    For i = 1 To 3
        With MSChart1.Plot.SeriesCollection(i).DataPoints(-1).Brush
            .FillColor.Automatic = False    '色の自動設定を解除します。
            .Style = VtBrushStyleSolid
            If i = 1 Then .FillColor.Set 255, 0, 0   '色を設定します、 国語
            If i = 2 Then .FillColor.Set 0, 255, 0  '数学
            If i = 3 Then .FillColor.Set 0, 0, 255  '英語
        End With
    Next i

   Mschart1.ChartType = VtChChartType2dBar

End Sub

が、これですとモノクロ表示前の任意の色に戻せません。
例えば「MSChart関係」で使用されている2D棒の3系列のデータで、系列ごとに使用されているパターンのRGBの値を読み取る方法はないんでしょうか?
そうすれば上記コードの 「FillColor.Set 保存しているRGBカラー」とすればモノクロ前の任意のカラーに復元可能かと思うんですが・・・。

いろいろ調べてみたんですが分かりません(ーー;)

投稿時間:2003/09/11(Thu) 21:22
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: オブジェクトの保存
これではどうでしょう?
長くなりますので必要部分のみ

'デフォルトカラーの保存用変数(動的配列にするなり適当に)
Private pColor(2, 2)  As Long


'デフォルトカラーを取得及び保存(最初の表示時に適当な場所で)
Dim j As Long
j = -1
For Each series In MSChart1.Plot.SeriesCollection
    With series.DataPoints(-1).Brush.FillColor
        j = j + 1
        pColor(j, 0) = .Red
        pColor(j, 1) = .Green
        pColor(j, 2) = .Blue
    End With
Next

モノクロ表示の時にフラグを立てて、フラグが立っていたら下記を実施するの方がいいかも。

'元のパターンとカラーに戻して表示(プロシージャ化)
Private Sub mnuSolid_Click()
    Dim series As Object
    Dim j As Long
    j = -1
    For Each series In MSChart1.Plot.SeriesCollection
        With series
            j = j + 1
            .DataPoints(-1).Brush.Style = VtBrushStyleSolid
            .DataPoints(-1).Brush.FillColor.Red = pColor(j, 0)
            .DataPoints(-1).Brush.FillColor.Green = pColor(j, 1)
            .DataPoints(-1).Brush.FillColor.Blue = pColor(j, 2)
        End With
    Next
End Sub

投稿時間:2003/09/12(Fri) 11:00
投稿者名:HB
Eメール:
URL :
タイトル:
Re^4: オブジェクトの保存
花ちゃん ありがとうございます!
そのものズバリでバッチリです(^^♪

ただなんか、プログラムを作ってもらっているようで申し訳ないですm(__)m
私ももう少しVBの事が分かるようになったら、回答者になってお返ししたいと思っています(^^