ニュートン メニュー

株式会社ニュートン

マイクロソフトパートナー

体験版ダウンロード

製品案内

ライセンスパック

ライセンスについて

カスタマイズ受付

製品購入ガイド









直販ショップ!
ニュートンストアで購入
コンポーネントソースで購入
SE Shopで購入

優待販売・
 キャンペーン情報

ユーザサービス
〔サポートページ〕

サポート体制

お知らせ
・ニュースリリース
・イベント出展
・製品関連記事

会社概要

個人情報保護方針

お問い合わせ先

SSL GMOグローバルサインのサイトシール

ニュートンホーム Q&A
TeeChart Pro JP ActiveX

チャートコンポーネント
TeeChart Pro JP ActiveX

このページは、TeeChart Pro JP ActiveX のユーザ様より寄せられたご質問の一部とその回答を掲載しております。


【TeeChart Pro JP ActiveX Q&A 一覧】

QNo. Q.質問 日付
A.回答
51

Q.64ビットアプリケーションで使用できますか?

2013/09/24

A. TeeChart Pro JP ActiveXのインストールフォルダに「64bit files」フォルダがございます。
そのフォルダに64ビット用のOCXおよびCABファイルが入っています。
64ビット用のOCXをレジストリにご登録して、ご利用いただけます。

50

Q.マウスホイールによるチャートのスクロールを無効にしたいのですがどうすればよいですか?

2013/09/24

A.下記のコードを設定してください。

TChart1.Environment.MouseWheelScroll = False

49

Q.OpenGLは日本語に対応していますか?

2013/09/24

A.いいえ、対応していません。
英数字のみの対応となります。

48

Q.Visual C++ .NET 2003/2005/2008でTeeChartのコントロールをMFCで使用するにはどうすればよいですか?

2013/09/24

A.次のテキストファイルを参考にしてください。
TeeJPAX_MFCApplication.txt

47

Q.カスタム軸をズームするには?

2013/09/24

A.カスタム軸は一部のTeeChartイベントを使用してズームさせることができます。VB6フォームにTeeChart Pro ActiveXコントロールを配置してVB6フォーム内で下記のコードをお試しください。

Dim myX0, myX1, myY0, myY1 As Long
Private Sub Form_Load()
TChart1.AddSeries scLine
TChart1.Series(0).FillSampleValues 10
TChart1.Panel.MarginBottom = 15
TChart1.Panel.MarginLeft = 15

TChart1.Series(0).VerticalAxisCustom = TChart1.Axis.AddCustom(False)
With TChart1.Axis.Custom(0)
    .AxisPen.Color = vbGreen
    .Title.Caption = "Extra axis"
    .Title.Font.Bold = True
    .Title.Angle = 90
End With

TChart1.Series(0).HorizontalAxisCustom = TChart1.Axis.AddCustom(True)
With TChart1.Axis.Custom(1)
    .AxisPen.Color = vbGreen
    .Title.Caption = "Extra axis2"
    .Title.Font.Bold = True
End With
End Sub
Private Sub TChart1_OnMouseDown(ByVal Button As TeeChart.EMouseButton, ByVal Shift As _
TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
    myX0 = X
    myY0 = Y
End Sub
Private Sub TChart1_OnMouseUp(ByVal Button As TeeChart.EMouseButton, ByVal Shift As _
TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
    myX1 = X
    myY1 = Y
End Sub
Private Sub TChart1_OnUndoZoom()
    TChart1.Axis.Custom(0).Automatic = True
    TChart1.Axis.Custom(1).Automatic = True
End Sub
Private Sub TChart1_OnZoom()
    With TChart1.Axis.Custom(0)
        .SetMinMax .CalcPosPoint(myX1), .CalcPosPoint(myX0)
    End With
    With TChart1.Axis.Custom(1)
        .SetMinMax .CalcPosPoint(myY1), .CalcPosPoint(myY0)
    End With   
End Sub

これでチャートのズームやスクロールができるはずです。

46

Q.チャートがズームされたかどうかを、どのように確認しますか?

2013/09/24

A.チャートがズームされる際に、軸の最小値と最大値は再計算されます。従って、軸のAutomaticプロパティはFalseに設定されます。
逆にチャートがアンズームされる場合、軸のすべてのAutomaticプロパティがTrueに設定されます。従って、すべての軸(あるいは指定の軸)のAutomaticプロパティがTrueの場合、チャートはズームされません。

また、Zoomedプロパティを使用すると、ズームの状態を取得できます。このプロパティは、チャートがズームされる際にtrueを返し、ズームされない場合はfalseを返します。CommandButton に下記のコードを入れて、チャートをズームまたはアンズームしてCommandButtonをクリックすることによって、この機能を確認できます。

Private Sub Command1_Click()
  MsgBox TChart1.Zoom.Zoomed
End Sub

45

Q.サーフェス系列を表示する際、チャートの凡例があまり役に立ちません。

2013/09/24

A.ここでの凡例は各色の「レベル」に該当する色と値を示します。色と値の数はサーフェス系列のPaletteSteps プロパティとPalette プロパティから取得されます。

44

Q.値によってデータポイントの色を変更するには?

2013/09/24

A.各ポイントの値を評価して独自の色を適用するにはPointColorプロパティを使用できます。

Private Sub Form_Load()
  Dim t As Integer
  TChart1.AddSeries scPoint
  For i = 1 To 14
    TChart1.Series(0).AddXY i, Rnd(i) * 100, "", clTeeColor
  Next i
  TChart1.Series(0).ColorEachPoint = True
  For t = 0 To TChart1.Series(0).Count - 1
    If TChart1.Series(0).YValues.Value(t) < 50 Then 'put your threshold here
      TChart1.Series(0).PointColor(t) = vbRed
    Else
      TChart1.Series(0).PointColor(t) = vbBlue
    End If
  Next t
End Sub

43

Q.実行時に系列の順番を変更するには?

2013/09/24

A.系列の順番は、Chart1.Seriesの配列プロパティ内の系列の順番と同じに描画されます。Chart1.ExchangeSeriesメソッドを使用して、系列を前面または背面に移動できます。

42

Q.系列内のポイントを削除した後にギャップを削除するには?

2013/09/24

A.系列値のFillSequenceメソッドを呼び出して、各ポイントに新しい異なるX座標値を割り当てることができます。

41

Q.チャートにNULL値を追加するには?

2013/09/24

A.SeriesのAddNullメソッドまたはAddNullXYメソッドを使用してください。Nullポイントは表示されません。

40

Q.チャート系列のすべての値の合計を表示するには?

2013/09/24

A.Series.YValuesのTotalプロパティまたはTotalABSプロパティを使用してください。

39

Q.TeeChartの印刷出力と、別のTeeChartではない印刷出力を組み合わせるには?

2013/09/24

A.既存の印刷ジョブにTeeChartを添付するには、PrintPartialHandleメソッドを使用してください。

例:
Private Sub Command2_Click()
  Dim HWidth, HHeight, I, Msg1, Msg2 ' Declare variables.
  On Error GoTo ErrorHandler ' Set up error handler.
  Msg1 = "チャートの前のページに印刷されます。"
  Msg2 = "チャートの後のページに印刷されます。"
  'Scale & position text.
  HWidth = Printer.TextWidth(Msg) / 2 ' Get half width.
  HHeight = Printer.TextHeight(Msg) / 2 ' Get half height.
  Printer.CurrentX = Printer.ScaleWidth / 3 - HWidth
  Printer.CurrentY = Printer.ScaleHeight / 3 - HHeight

  Printer.Print Msg1 & Printer.Page & "." ' Print.
  With TChart1.Printer
    .Orientation = poPortrait
    .PrintPartialHandle Printer.hDC, _
    .PageWidth / 3 _
    , (.PageHeight / 3) + 10 _
    , (.PageWidth / 3) * 2 _
    , (2 * (.PageHeight / 3)) - HHeight - 10
  End With
  Printer.CurrentY = 2 * Printer.ScaleHeight / 3 - HHeight
  Printer.CurrentX = Printer.ScaleWidth / 3 - HWidth
  Printer.Print Msg2 & Printer.Page & "." ' Print.

  Printer.EndDoc ' 印刷終了
  Exit Sub

ErrorHandler:
  MsgBox "印刷時に問題が発生しました。"
  Exit Sub
End Sub

38

Q.モノクロのプリンタにチャートを印刷するには?

2013/09/24

A.それぞれの異なった系列型のために解決法があります。そのプリンタが「グレースケール」印刷出力に適している場合、単にそれぞれのグレーレベルにあった色を選択するだけでよいかもしれません。

しかし、最善の解決法は、各系列に対して異なるBrush.Styleを選択することです。たとえば、円系列には「UsePatterns」プロパティがあり、異なるパターンスタイルを使用して各パイスライスを描きます。

また、Brush.Bitmapプロパティを使用して、ビットマップ(イメージ)形式のカスタムな「パターン」を使用してポイントを塗りつぶすこともできます。

37

Q.複数ページにわたってチャートを印刷するには?

2013/09/24

A.Chart1.MaxPointsPerPageプロパティを使用して1ページあたりのポイントの数を定義します。そして、NumPagesおよびPageプロパティを使用してループし、全てのページを印刷します。

36

Q.TeeChart Pro ActiveXコントロールは、MicrosoftのJavaやJavaScriptと互換性がありますか?

2013/09/24

A.はい。TeeChartはMicrosoftのVisual J++で使用できます。
J++のサンプルはサポートの関係上TeeChart Pro JPには含まれていませんが、コントロールは使用可能です。

クライアントサイドとサーバサイドのJScriptのTeeChartサンプルがあります。次の「JavaScriptのサンプル」と「サーバーサイドのJScript」のASPサンプルを参照してください。

「JavaScriptのサンプル」を含むページ
「サーバサイドのJScript」を含むページ

35

Q.Visual C++で実行時にチャートヘッダーとフッターのテキストを追加/変更するには?

2013/09/24

A.次のコードが使用できます。
COleVariant var(CString ("MyTitle"));
m_Chart1.GetHeader().GetText().Clear();
m_Chart1.GetHeader().GetText().Add(*(LPCVARIANT)var);
または
m_Chart1.GetHeader().GetText().SetItem(0, COleVariant("MyTitle"));

34

Q.Visual C++でデザイン時のチャートエディタの変更がいつも保存されません。

2013/09/24

A.デザイン時のチャートのプロパティの変更について
デザイン時にチャートのプロパティを変更する場合は、フォーム上のチャートを右クリックし、メニューから「プロパティ」を選択し、「TeeChart Pro Editor」タブで「チャートの編集」ボタンをクリックしてください。TeeChartメニューを表示するためにフォーム上のチャートを右ク リ ックしてメニューから「TeeChart Pro Activex control v2013 オブジェクト(バージョンは製品発売時のものです)」を選択するとデザイン時に変更できますが、実行時に無効になります。

33

Q.Visual C++用のGetSeries()、Add()やその他の類似関数などの関数の説明はどこにありますか?

2013/09/24

A.全クラスのメソッドやプロパティの定義の概要に関してはオンラインヘルプファイルを使用できます。一部のポインタに関しては、VCサンプルを参照してください。VC++のチュートリアルでは構文に関するいくつかの基本的なルールを説明しています。

Visual Basicの
TChart1.Series(0).Add 3, "1st value", clTeeColor

m_Chart1.GetSeries(0).Add(3,"1st Value",clTeeColor);
になります。
(TChartに「m_Chart1」と名前をつけて、TeeChartdefines.hファイルを含んでいるとします。)

32

Q.Visual C++でTeeChart定数を使用するには?

2013/09/24

A.定数はVC++では使用できませんが、定数のヘッダーファイルを作成することができます。インストールしたフォルダの階層化にあるExamples\Visual C++フォルダのTeeChartDefines.hを使用してください。

31

Q.Visual Basicで記述されたActiveX コントロール内にTeeChartを含めることができますか?

2013/09/24

A.はい。サンプルモデルをビルドするのに必要なステップは下記の通りです。

ActiveXコントロールのプロジェクトフォームにTeeChartを追加。
チャートエディタを開き、リボン系列を追加し、パネルグラデーション(モニタにChartプロパティを見やすくする)を有効に設定。
フォームにボタンとコードを追加(例:TChart1.Series(0).FillSampleValues 10)。
プロジェクトの作成。
新しいExeプロジェクトを作成。
新しく作成したActiveXコントロールを追加。
実行。
ボタンを押す- チャートには、10のランダムポイントが表示されます。
デザイン時にランダムなデータが表示されると思わないでください。

TeeChartのサンプルフォルダにVBで書かれたユーザーコントロールのコード化されたサンプルがあります。

30

Q.IISがページを更新する前にページを更新するには?

2013/09/24

A.新しいファイルに更新する時間の設定方法はありません。これはIISに関する問題で、保存する際に動的に新しいファイル名をつけることにより回避できます。teeファイルとjpegファイルにそのアプリケーションを表示するオプションが次にあります。

<HTML>
<%
dim filePath
dim httpPath
dim outputTeefile
dim outputJpegfile

' 下記のURLと同じところにサーバーのファイルパスがある場合
filePath = "d:dataWebTestFiles"
httpPath = "http://128.0.0.55/testfiles/"
outputTeefile = "Chart" & Session.Sessionid & Replace(Time, ".", "") & ".tee"
outputJpegfile = "Chart" & Session.Sessionid & Replace(Time, ".", "") & ".jpg"
Set Chart1 = CreateObject("TeeChart.TChart")
Chart1.AddSeries(1)
Chart1.Aspect.View3D=False
Chart1.Series(0).FillSampleValues 20
Chart1.Export.SaveToFile filepath & outputTeefile
Chart1.Export.SaveToJPEGFile filepath & outputJpegfile, False, jpegBestQuality, 100, 450, 290
%>
<HEAD></HEAD><BODY>
<p>In the client section of the page you can display JPEG or Live Charts.</p>

<SCRIPT LANGUAGE=VBSCRIPT>
Sub FillChart()
TChart1.Import.LoadFromURL("<%=httpPath%><%=outputTeefile %>")
End Sub
Sub TChart1_OnAfterDraw()
TChart1.Canvas.Font.Color = RGB(240,240,50)
TChart1.Canvas.Font.Bold=True
If TChart1.SeriesCount > 0 then
If TChart1.Series(0).Count > 0 then
TChart1.Canvas.TextOut TChart1.Axis.Left.Position, _
TChart1.Axis.Top.Position - 18, _
"Max point: " & TChart1.Series(0).YValues.Maximum
End if
End if
end sub
</SCRIPT>

<p>ボタン(あるいはIEのWindow_Onloadイベント)を使用してチャートをロードします。</p>
<p><input type="button" value="Populate Chart" onclick="FillChart"
name="cdmChart1"></p>

<OBJECT ID="TChart1" WIDTH=450 HEIGHT=290
CLASSID="CLSID:FCB4B50A-E3F1-4174-BD18-54C3B3287258">
</OBJECT>

<IMG SRC=<%=httpPath%><%=outputJpegfile%>> </A>

</BODY></HTML>

回避策として、下記のメインテナンス対処法(テンポラリファイルなし)として、チャートをブラウザに直接テンプレートまたはイメージとして描画することをお勧めします。

<!--METADATA NAME="TeeChart Pro v2013 ActiveX Control" TYPE="TypeLib"
UUID="{5006E56D-FEDE-4C64-9CC2-78C320929406}"-->
<%
' スクリプトでのTeeChart定数を使用できるようにするメタデータセクション(上述)

Set Chart1 = CreateObject("TeeChart.TChart")

Chart1.AddSeries(scPoint)
Chart1.Series(0).FillSampleValues(10)

Response.BinaryWrite (Chart1.Export.asPNG.SaveToStream)
%>

29

Q.TeeChartのEConstantsがVBScriptでは動作しません。

2013/09/24

A.VBScriptでは、標準のTeeChartの列挙体の定数を数値に変換する必要があります。TeeChartのヘルプファイルで必要な数値を示しています(例:EMultibar Type 'mbNone = 0')。

例:
'この場合の結果は次のようになります。
TChart1.Series(0).asBar.MultiBar = 0

しかし常に数値に変換する必要があるわけではありません。ASPスクリプトの最初にMetaDataセクションがあれば、TeeChart定数を使用できます。

例:
<!--METADATA NAME="TeeChart Pro v2013 ActiveX Control" TYPE="TypeLib"
UUID="{5006E56D-FEDE-4C64-9CC2-78C320929406}"-->

28

Q.ODBCデータソースを使用しています。HTMLページを読み込む時に現在のデータを更新するために"myfilename.tee"チャートを取得するには?

2013/09/24

A.tee形式ファイルは(データがある場合)現在のデータでチャートの定義を保存します。htmlページで更新可能なデータを使用するには、そのページ上でデータソースを定義する必要があります。

Sub Window_onload()
  TChart1.Import.LoadFromFile("c:tempdbchart.tee")   
  TChart1.Series(0).DataSource = "DSN=TeeChart Pro Database;
  sql=SELECT * from employee"
  TChart1.Series(0).LabelsSource = "LASTNAME"
  TChart1.Series(0).YValues.ValueSource = "SALARY"

  TChart1.TimerEnabled = True 'データ更新の設定
  TChart1.TimerInterval = 4000
end Sub

Sub TChart1_OnTimer()
  TChart1.Series(0).CheckDatasource
End Sub

上記のコードは系列のデータソースを再定義し、4000ミリ秒毎にデータを更新するためにCheckDatasourceでタイマーを設定します。このコードはODBC DSNがクライアントにあることが必要です。

27

Q.IIS7.5でTeeChartのサーバサイドのインスタンスを実行するには?

2013/09/24

A.http://www.newtone.co.jp/TeeChartJpAx/asphome.htmにソースコード付きのASPサンプルがございますので、そちらをご覧ください。

26

Q.実行時にコードでリボン系列の線のスタイル(点線、破線など)を設定したいのですが、上手くできません。

2013/09/24

A.LinePen Styleプロパティを下記コードのように設定してください。

 TChart1.Series(0).asLine.LinePen.Style = psDashDot

25

Q.リボン系列を使用して円を描くには?

2013/09/24

A.デフォルトでは、ほとんどの系列はX座標を使用してポイントを並べます。

X座標(AddXYメソッドの呼び出し)を定義しない場合、X座標は系列に追加された順にポイントを並べます。

円を描くには、まず自動整列を無効にし、系列に追加した順にポイントを描画します。円の描画は下記コードを使用して行えます。

Private Sub Form_Load()
  With TChart1
    .AddSeries scLine
    .Aspect.View3D = False
    .Series(0).XValues.Order = loNone
    .Series(0).YValues.Order = loNone
    For i = -4 To 4 Step 1 / 90
      .Series(0).AddXY Cos(i), Sin(i), "", clTeeColor
    Next i
    .Axis.Bottom.SetMinMax -1.25, 1.25
    .Axis.Left.SetMinMax -1.25, 1.25
  End With
End Sub

24

Q.htmlページ内でURLからTeeChart ActiveXに値を読み込むには?

2013/09/24

A.Internet Explorer内でVBScript か JScriptを使用して、リモートURLアドレスからファイルをダウンロードして処理できます。
http://www.newtone.co.jp/teechartJpAx/tcax/animated.htmのサンプルを参照してください。

23

Q.TeeChart ActiveXは、UNICODEをサポートしますか?

2013/09/24

A.はい。

22

Q.系列の色を変更しても凡例の系列の色が変更できません。

2013/09/24

A.TeeChartには次のものがあります。
  1. 系列のポイント色
  2. 系列色

従って、系列は色で定義されますが、個々のポイントは異なる色になる場合があります(例:色でポイント範囲を示すことで使用されます)。

TeeChartに系列を追加する場合、自動的にTeeChart が作成した色(clTeeColor)を取得します。clTeeColorを使用して系列にポイントを追加すると、ポイントの色は系列の色と同じになります。

Dim t As Integer
With TChart1
  For t = 0 To 10
    .Series(0).Add Rnd(t), "", clTeeColor
    .Series(1).Add Rnd(t), "", clTeeColor
    .Series(2).Add Rnd(t), "", clTeeColor
    .Series(3).Add Rnd(t), "", clTeeColor
    .Series(4).Add Rnd(t), "", clTeeColor
  Next t
End With

下記のように系列の色を変更できます。

TChart1.Series(0).Color = vbGreen

clTeeColorでポイントを追加すると、自動的に新しい色を取得します。次のコードはAddメソッドでポイントの色を設定しています。

Dim t As Integer
With TChart1
  For t = 0 To 10
    .Series(0).Add Rnd(t), "", RGB(255, 20 * t, 30 * t)
    .Series(1).Add Rnd(t), "", RGB(30 * t, 255, 20 * t)
    .Series(2).Add Rnd(t), "", RGB(20 * t, 30 * t, 2 * t)
    .Series(3).Add Rnd(t), "", RGB(30 * t, 20 * t, 30 * t)
    .Series(4).Add Rnd(t), "", RGB(2 * t, 5 * t, 30 * t)
  Next t
End With


上記のコードでは凡例にはどの色が表示されるでしょうか?
各系列の最終ポイントは?
そのような場合、凡例はTChart1.Series(xx).Colorで定義できます。

TChart1.Series(0).Color = vbYellow
TChart1.Series(1).Color = vbWhite
TChart1.Series(2).Color = vbBlue
TChart1.Series(3).Color = vbCyan
TChart1.Series(4).Color = vbMagenta

Dim t As Integer
With TChart1
  For t = 0 To 10
    .Series(0).Add Rnd(t), "", clTeeColor
    .Series(1).Add Rnd(t), "", clTeeColor
    .Series(2).Add Rnd(t), "", clTeeColor
    .Series(3).Add Rnd(t), "", clTeeColor
    .Series(4).Add Rnd(t), "", clTeeColor
  Next t
End With

凡例はSeries.Colorで設定された色を表示し、追加されたポイントはその色を使用します。

21

Q.1ピクセル以上の幅の点線や破線は描けますか?

2013/09/24

A.はい、対応しています。

20

Q.TeeChartは解像度が低い場合、系列の数を縮小しますか?

2013/09/24

A.いいえ。すべてのポイントを描画するために十分なピクセルがない(解像度が低い[640x480])場合などに発生する可能性がありますが、描画される系列数あるいはポイント数の内部制限はありません。

19

Q.ガントチャートをページ分割すると問題が発生します。

2013/09/24

A.TChartのMaxPointsPerPageプロパティが系列のXポイント座標値によってページ分割します。
ガントチャートを使用する場合、各ポイントには2つのX座標があり、アルゴリズムは失敗に終わります。これは最初のX座標値(各ガントバーの開始X座標値)だけを考慮するために発生します。解決法はガント系列を使用する際にはMaxPointsPerPageプロパティを使用する代わりにBottomAxisのSetMinMaxメソッドを使用することです。

  TChart1.Axis.Bottom.SetMinMax MyMin, MyMax

MyMinとMyMaxのところはページの開始および終了X座標値になります。

18

Q.系列に関連付けられた関数を変更するには?

2013/09/24

A.すべての系列には(関数オブジェクトを返す)FunctionTypeメソッドと、関数オブジェクトを割り当てるためのSetFunctionメソッドがあります。

17

Q.チャートのあるポイントにマウスポインタを置いた時に、値を示すツールチップの表示方法がありますか?

2013/09/24

A.下記のコードは、マウスがポインタ上に移動した際に散布図系列のポイント値を表示します。

Private Sub TChart1_OnMouseMove(ByVal Shift As TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
  Dim tmp As Integer
  tmp = TChart1.Series(0).Clicked(X, Y)
  If tmp > -1 Then
    TChart1.ToolTipText = TChart1.Series(0).XValues.Value(tmp) & " " &
    TChart1.Series(0).YValues.Value(tmp)
  Else
    TChart1.ToolTipText = ""
    TChart1.Repaint
  End If
End Sub

16

Q.株価のチャートがあります。特定ポイントA、B、Cにラベルまたは別のテキスト表現を表示したい。

2013/09/24

A.2つの方法があります。

OnAfterDrawイベントに次のようなコードを設定します。7ポイント間に線を引き、11番目のポイントに2点間の距離(値)を表示します。

Visual Basicの例:
With TChart1
  If .SeriesCount > 0 Then
    If .Series(0).Count > 10 Then
      'Set up drawing pen
      .Canvas.Pen.Color = vbBlue
      .Canvas.Pen.Width = 1
      .Canvas.Pen.Style = psDot
      .Canvas.Brush.Style = bsClear
      '線を追加。
      'ここでは、軸上の希望するポイントを取得し、画面座標値に変換します。
      .Canvas.MoveTo .Axis.Bottom.CalcXPosValue(.Series(0).XValues.
Value(3)), _
      .Axis.Left.CalcYPosValue(.Series(0).YValues.Value(3))
      .Canvas.LineTo .Axis.Bottom.CalcXPosValue(.Series(0).XValues.
Value(10)), _
      .Axis.Left.CalcYPosValue(.Series(0).YValues.Value(10))
      'ここでテキストの背面に不透明のボックスを配置するために、ブラシを無地に設定(オプション)します。
      'テキストの周りにボックスの配置(Rectangle メソッド)や、または色の変更などができます。
      .Canvas.Brush.Style = bsSolid
      '画面座標値を変換するために再度ポイントインデックスを使用
      .Canvas.TextOut .Axis.Bottom.CalcXPosValue(.Series(0).XValues.
Value(3)), _
.Axis.Left.CalcYPosValue(.Series(0).YValues.
Value(3)),
"Point value: " + Str$(.Series(0).YValues.Value(3))
      .Canvas.TextOut .Axis.Bottom.CalcXPosValue(.Series(0).XValues.
Value(10)), _
.Axis.Left.CalcYPosValue(.Series(0).YValues.
Value(10)), _
"Point value: " + Str$(.Series(0).YValues.Value(10))
      ' 2つ目の線のテキストの位置はテキストの高さを取得することにより決定されます。
      .Canvas.TextOut .Axis.Bottom.CalcXPosValue(.Series(0).XValues.
Value(10)), _
.Axis.Left.CalcYPosValue(.Series(0).YValues.
Value(10)) + _
.Canvas.TextHeight("Any letter"), "Change is: " + _
Str$(.Series(0).YValues.Value(10) - .Series(0).
YValues.Value(3))
    End If
  End If
End With

TeeChart Pro JP ActiveXコントロールで同じ結果を得られるより簡単な方法があります。チャートのキャンバスに直接描画するのではなく、アノテーションツールを使用して、テキストを入れることができます。これはテキストとテキストボックスの両方を簡単に書式化できるという点 で はより柔軟性があります(Visual Basicの例)。

Dim Anno1, Anno2, Anno3 As Integer

Private Sub Form_Load()
  With TChart1
    .AddSeries scPoint
    .Series(0).FillSampleValues 15
    Anno1 = .Tools.Add(tcAnnotate)
    Anno2 = .Tools.Add(tcAnnotate)
    Anno3 = .Tools.Add(tcAnnotate)
    For i = 0 To .Tools.Count - 1
      With .Tools.Items(i).asAnnotation.Shape
        .Font.Name = "Broadway"
        .Font.Color = vbGreen
        .Gradient.Visible = True
        .Gradient.Direction = gdRightLeft
        .Gradient.EndColor = vbBlue
        .ShadowColor = vbYellow
      End With
    Next i
    .Environment.InternalRepaint
  End With
End Sub

Private Sub TChart1_OnAfterDraw()
  With TChart1
    If .SeriesCount > 0 Then
      If .Series(0).Count > 10 Then
        '描画ペンの設定
        .Canvas.Pen.Color = vbBlue
        .Canvas.Pen.Width = 1
        .Canvas.Pen.Style = psDot
        .Canvas.Brush.Style = bsClear
        '線を追加。
        'ここでは、軸上の希望するポイントを取得し、画面座標値に変換します。
        .Canvas.MoveTo .Axis.Bottom.CalcXPosValue(.Series(0).XValues.Value(3)), _
.Axis.Left.CalcYPosValue(.Series(0).YValues.Value(3))
        .Canvas.LineTo .Axis.Bottom.CalcXPosValue(.Series(0).XValues.Value(10)), _
.Axis.Left.CalcYPosValue(.Series(0).YValues.Value(10))
        'テキストを描画するために、アノテーションツールを使用できます。
        '画面座標値を変換するために再度ポイントインデックスを使用
        With .Tools.Items(Anno1).asAnnotation
          .Shape.CustomPosition = True
          .Shape.Left = TChart1.Axis.Bottom.CalcXPosValue(TChart1.Series(0).XValues.Value(3))
          .Shape.Top = TChart1.Axis.Left.CalcYPosValue(TChart1.Series(0).YValues.Value(3))
          .Text = "Point value: " + Str$(TChart1.Series(0).YValues.Value(3))
        End With
        With .Tools.Items(Anno2).asAnnotation
          .Shape.CustomPosition = True
          .Shape.Left = TChart1.Axis.Bottom.CalcXPosValue(TChart1.Series(0).XValues.Value(10))
          .Shape.Top = TChart1.Axis.Left.CalcYPosValue(TChart1.Series(0).YValues.Value(10))
          .Text = "Point value: " + Str$(TChart1.Series(0).YValues.Value(10))
        End With
        With .Tools.Items(Anno3).asAnnotation
          .Shape.CustomPosition = True
          .Shape.Left = TChart1.Axis.Bottom.CalcXPosValue(TChart1.Series(0).XValues.Value(10))
          .Shape.Top = TChart1.Axis.Left.CalcYPosValue(TChart1.Series(0).YValues.Value(10)) + _
(TChart1.Canvas.TextHeight("Any letter") * 1.25)
         .Text = "Change is: " + Str$(TChart1.Series(0).YValues.Value(10) -
TChart1.Series(0).YValues.Value(3))
        End With
      End If
    End If
  End With
End Sub

Private Sub TChart1_OnUndoZoom()
  TChart1.Environment.InternalRepaint
End Sub

Private Sub TChart1_OnZoom()
  TChart1.Environment.InternalRepaint
End Sub

15

Q.印刷プレビューでキャンバスのテキストが表示されないのはどうしてですか? また、印刷できないのはどうしてですか?

2013/09/24

A.Visual BasicやVisual C++などのデバッグモードでは、TChart.Canvasオブジェクトに描画された項目は印刷プレビューウィンドウには表示されず、印刷もできません。しかし、プロジェクトをコンパイルしてExeファイルを作成すると、これらの項目は表示され印刷できます。

14

Q.チャートに特別なものを描画するには?

2013/09/24

A.TChart1.Canvasオブジェクトを使用してください(TeeChartのヘルプを参照)。チャートの再描画や印刷の際に描画が持続するように、描画コードはすべてTChart1_OnAfterDrawイベントで行ってください。

13

Q.キャンドルのODBCデータベースのチャートで週末を削除するには?

2013/09/24

A.チャートエディタで、キャンドル系列のデータソースタブの「日付」コンボボックスにテーブルの「日付」フィールドを選択しないでください。これは(キャンドルの日付時間の値の代わりに)各ポイントに対して1,2,3,4,5,6.....などの異なるX値を割り当てます。

日付ラベルを設定するには、テーブルをデータソースタブの「ラベル」コンボボックスに「日付」フィールドを選択してください。

コードで週末を削除する場合は、TeeChart AX JPに含まれているTeeChart Pro AX JP feature demoの「週末日なしの軸ラベル」チャートを参照してください。これは、各ポイントのX値は日付値(つまりデータ系列の値)から数値(つまり系列ポイント)に変更されます。コードでこれを行うには、まずX軸のDateTime をfalseに設定しなければなりません。

  TChart1.Series(0).XValues.DateTime = False

では、系列ポイントを表示できるようにX軸を定義してください。一番簡単な方法はLabel Styleプロパティを変更することです。

  TChart1.Axis.Bottom.Labels.Style = talMark

ここからは2つの方法があります。どちらの方法にもデータベーステーブルのフィールドの1つには希望の日付(つまり、週末を削除してある日付)があるとします。1つ目の選択肢はPointLabelプロパティを使用することです(ここではTeeChart Proのデータベースからチャートにデータを持ってくるためにADOを使用しています)。

With Record
  .MoveFirst
  While Not .EOF
    TChart1.Series(0).Add .Fields("Salary"), .Fields("LastName"), clTeeColor
    TChart1.Series(0).PointLabel(t) = .Fields("Birth_Date")
    t = t + 1
    .MoveNext
  Wend
End With


もう1つの方法はOnGetAxisLabel()イベントを使用して、X軸のラベルを変更することです。

Private Sub TChart1_OnGetAxisLabel(ByVal Axis As Long, ByVal SeriesIndex As Long,
ByVal ValueIndex As Long, LabelText As String)
  If Axis = atBottom Then
    With TChart1
      If .SeriesCount > 0 Then
        If .Series(0).Count > 0 Then
          If ValueIndex <> -1 Then
            LabelText = LabelLocations(ValueIndex)
          End If
        End If
      End If
    End With
  End If
End Sub


このインスタンスでは、データベースをもう一度開かずにすむように、LabelLocationsグローバル配列内にデータフィールドをコピーしてあります。

12

Q.複数のバー系列を積み重ねるにはどうすればいいですか?

2013/09/24

A.チャートにあるすべてのバー系列に対して下記のように設定してください。

  TChart1.Series(0).asBar.MultiBar = mbStacked

11

Q.独自の対数軸のラベルを設定するには?

2013/09/24

A.特別な対数軸のラベルはOnGetNextAxisLabelで設定する必要があります。

例: このデータを設定すると仮定します。
  TChart1.Series(0).Add 0.002, "", clTeeColor
  TChart1.Series(0).Add 0.0035, "", clTeeColor
  TChart1.Series(0).Add 0.005, "", clTeeColor
  TChart1.Series(0).Add 0.007, "", clTeeColor

軸を設定:
TChart1.Axis.Left.Logarithmic = True
TChart1.Axis.Left.TickOnLabelsOnly = True
TChart1.Axis.Left.SetMinMax 0.001, 0.1


TeeChart Pro JP ActiveXコントロールは、上付きフォントの指数形式で軸ラベルを表示できます。これは特に対数軸のチャートを作成する際に便利で、下記のコード(2行)で対応できます。

  TChart1.Axis.Left.Labels.Exponent = True
  TChart1.Axis.Left.Labels.ValueFormat = "00e-0"

上記のコードはTeeChartで軸のラベルのデフォルト設定を割り当てるのに十分です。さらにラベルの表示位置を変更する場合、デフォルトの動作をオーバーライドすることにより、OnGetNextAxisLabelイベントを使用して軸の特定ラベルを定義できます。

Private Sub TChart1_OnGetNextAxisLabel(ByVal Axis As Long, ByVal LabelIndex As Long,
LabelValue As Double, MoreLabels As Boolean)
  If Axis = atBottom Then
   MoreLabels = True
      Select Case LabelIndex
        Case 0: LabelValue = 0.001
        Case 1: LabelValue = 0.005
        Case 2: LabelValue = 0.007
        Case 3: LabelValue = 0.01
        Case Else: MoreLabels = False
End Select
End If
End Sub

10

Q.すべての軸ラベルを描画するには?

2013/09/24

A.軸はデフォルトでラベルが重なり合わないように一部のラベルを隠すので、ラベルを描画するために十分なスペースがあります。
LabelsSeparationプロパティをゼロに設定して、この機能を無効にすることができます。

  TChart1.Axis.Bottom.Labels.Separation = 0

重なり合わないようにする別の方法としては、軸ラベルの回転角度を90度に設定してラベルを垂直にすることです。

  TChart1.Axis.Bottom.Labels.Angle = 90

9

Q.チャートをスクロールやズームできるように軸スケールを変更するには?

2013/09/24

A.軸のSetMinMaxメソッドを使用してください。

8

Q.Visual Basicでチャートをズームした時に日付軸のラベル間隔を再スケールするには?

2013/09/24

A.TeeChartは自動的にラベルの間隔を調整しないため、ラベルを調整するにはOnZoom イベントやOnUndoZoomイベントを使用します。

下記のようなラベル指標のチャートがあるとします。

With TChart1.Axis.Bottom
  .ExactDateTime = True
  .Increment = TChart1.GetDateTimeStep(dtOneMonth)
  .Labels.DateTimeFormat = "mmm-yyyy"
End With

そして、Zoom領域が31日(1ヶ月)以内の場合、ラベルの間隔を変更したい。OnZoomイベントに下記のコードを入れてください。

Private Sub TChart1_OnZoom()
  With TChart1.Axis.Bottom
   If .Maximum - .Minimum <31 Then '例:1ヶ月以下
   .Increment=TChart1.GetDateTimeStep(dtOneWeek)
   .Labels.DateTimeFormat="dd-mmm-yyyy"
   End If
  End With
End Sub

7

Q.軸の小さな値を適切に表示できません。

2013/09/24

A.軸ラベルのデフォルトの書式文字列は#,##0.###です。

非常に小さな値の場合(例:1E-09)、(小数点以下の表示桁数が3桁以上なので)上記の書式文字列は常に同じ形式を返します。
従って、これを(0.##################のような)適切な書式に変更するか空文字に設定すると正確にラベルが表示されます。

6

Q.特定範囲の値をピクセル単位で取得するにはどうすればいいですか?

2013/09/24

A.水平ピクセルではCalcXSizeValue関数、垂直ピクセルではCalcYSizeValue関数を使用してください。

5

Q.2つのチャートを同じ位置に揃えたい。同じ位置に左軸を配置するにはどうすればいいですか?

2013/09/24

A.Label Sizeプロパティを使用して、各チャートを同じ位置にするためには左軸のラベルの間隔(幅)を同じにします。

例:
  TChart1.Axis.Left.Labels.Size = 30
  TChart2.Axis.Left.Labels.Size = 30

4

Q.Visual Basicでチャートのタイトルを変更するには?

2013/09/24

A.一部のVisual Basicのバージョンでは、定数としてパラメータ文字列をオブジェクトメソッドに直接渡すことができないようです。従って、まず一時的な文字列変数を使用して、そこに変数を渡す必要があります。

Visual Basic 6.0では必要ありません。パラメータ文字列を直接渡すことができます。

With TChart1
  .AddSeries scLine
  .Series(0).FillSampleValues 10
  .Header.Text.Clear
  .Header.Text.Add "This is the Header"
  .Header.Text.Add "And this is its second line"
End With

3

Q.TeeChart ActiveX のCABファイル(teechart2013.cab/teesmall2013.cab)は認証を取得していますか?(CABファイル名は製品発売時の名称です)

2013/09/24

A.はい、TeeChart ActiveX のCABファイルは認証を取得しています。

2

Q.インターネットエクスプローラの印刷でチャートが印刷できません。

2013/09/24

A.これはv5以前のIEバージョンに影響があります。IEPrintWithPageプロパティを呼び出すことにより解決できます。

  TChart1.Environment.IEPrintWithPage

1

Q.インターネット(例:CAB ファイル)からクライアントコンピュータにインストール可能なActiveX の形式は?

2013/09/24

A.製品に含まれているTeeChartのCABファイルは2バージョンあります。
(CABファイル名は製品発売時の名称です)

teechart2013.cab  - 通常の機能
teesmall2013.cab  - 下記の機能がありません。

TeeChartエディタ
JPEGサポート
Printプレビューア
バージョン情報
ODBCアクセス
OpenGL

Copyright (C) NEWTONE Corporation. All rights reserved.