初めて質問させていただきます。
VB6のMSChartを使って、2次元XY分布図(スペクトル)を描いています。
MSChart1.Plot.Axis(VtChAxisIdY).ValueScale.〜
の設定でY軸の範囲を指定して作画させることはできるのですが、
同じように
MSChart1.Plot.Axis(VtChAxisIdX).ValueScale.〜
と記述してもうまくいきません。実行時にエラーにもなりません。
XY両方の作画範囲を指定できると便利なのですが…
詳しい方、どなたか御教授下さい。
よろしくお願いします。
実際にどのように設定しておられるのかコードを投稿して下さい。
(実際に設定できたY軸と出来なかったX軸のコードをできれば事象が再現できればいいのですが)
設定する前に Auto を解除しておられますか?
次の発言でコードを投稿させていただきます。
作画プロシージャは標準モジュールにあります。
花ちゃんさんのサイトを参考にして、データは2次元配列(myStrAB(2,1001):バリアント型)で渡しています。
MSDNのサイトにあるように、.Maximum→.Minimumの順に記述していますし、
.Auto=Falseにしています。
使用している変数は、すべて標準モジュールにPublic宣言しています。
Form1のText1〜4でX・Yの作画範囲(MaxX・MinX・MaxY・MinY:整数型)を指定し、Form1の作画ボタンを押すとMSChartを貼ったForm2が現れ、Form2のLoadイベントで標準モジュールの作画プロシージャを実行するようにしています。
作画プロシージャです。
Sub SpectrumDraw()
'MSChart設定
MaxY = Form1.Text1.Text
MinY = Form1.Text2.Text
MaxX = Form1.Text3.Text
MinX = Form1.Text4.Text
With Form2.MSChart1.Plot.Axis(VtChAxisIdX, 0).ValueScale
.Auto = False
.Maximum = MaxX
.Minimum = MinX
.MajorDivision = 10
.MinorDivision = 2
End With
With Form2.MSChart1.Plot.Axis(VtChAxisIdY).ValueScale
.Auto = False
.Maximum = MaxY
.Minimum = MinY
.MajorDivision = 10
.MinorDivision = 2
End With
'MSChart作画
With Form2.MSChart1
.chartType = VtChChartType2dXY
.Plot.UniformAxis = False
.ColumnCount = 2
.RowCount = 1001
For i = 1 To .RowCount
For n = 1 To .ColumnCount
.Column = n
.Row = i
.Data = myStrAB(n, i)
Next n
Next i
End With
End Sub
Yの作画範囲は変更できます。
Xの作画範囲が変更できない以外は、きちんと表示されています。
よろしくお願いいたします。
上記サンプルをそのまま起動して確認する事ができませんので(部分的なので)、
私のサンプルに下記の部分を追加して試して見ましたが問題なく表示できましたが?
With MSChart1.Plot.Axis(VtChAxisIdX, 0).ValueScale
.Auto = False
.Maximum = 100
.Minimum = 50
.MajorDivision = 10
.MinorDivision = 2
End With
With MSChart1.Plot.Axis(VtChAxisIdY).ValueScale
.Auto = False
.Maximum = 100
.Minimum = 50
.MajorDivision = 10
.MinorDivision = 2
End With
私のサンプルをご覧になられたのならあのサンプルに上記の部分を追加して
試して見て下さい。
又は、貴方のサンプルでそのまま再現できるコードを投稿して下さい。
再現できない以上下記のどの部分が有効にならないかも解りません。
少なくても、私のサンプルでは設定値が有効になります。
(MaxY や MinY に何が入っているかも解らないし)
With Form2.MSChart1.Plot.Axis(VtChAxisIdY).ValueScale
.Auto = False
.Maximum = MaxY
.Minimum = MinY
.MajorDivision = 10
.MinorDivision = 2
End With
花ちゃんさんのサンプルにコードを追加して、作動することを確認しました。
私のコードでは、ちらつき防止のためにMSChartの内容をPictureBoxにコピーして表示させていましたが、これを外してMSChartでじかに表示させるとうまくいきました。MSChartに関するコードには問題がなかったものと思われます。ありがとうございました。
原因は、X・Yともに作画範囲が設定されているMSChartをコピーして、PictureBoxに渡すと、PictureBoxの表示はX軸の作画範囲が解除された状態になることです。
花ちゃんさんのサイトにある、
「Q. EditCopy がクリップボードへ正しい内容をコピーしない」
はこのことだったんですね。
ツイート | ![]() |