ニュートン メニュー

株式会社ニュートン

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

体験版ダウンロード

製品案内

ライセンスパック

ライセンスについて

カスタマイズ受付

製品購入ガイド









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

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

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

サポート体制

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

会社概要

個人情報保護方針

お問い合わせ先

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

ニュートンホーム Q&A
TeeChart Pro 7J VCL

インターラクティブ チャートコンポーネント
TeeChart Pro 7J VCL

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


【TeeChart Pro 7J VCL  Q&A索引】

該当する「QNo.」をクリックするとその回答へ移動します。

QNo.

Q.質問

日付
68

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

2008/11/21
67

Q.Delphi 2009/C++Builder 2009に対応していますか?

2008/09/10
66

Q.C++Builder 2007に対応していますか?

2007/10/23
65

Q.Delphi 2007 for Win32に対応していますか?

2007/06/01
64

Q.実行時にTeeCommanderのボタンのヒントが日本語にならない場合があるのですが?

2007/04/20
63

Q.Borland Developer Studio 2006に対応していますか?

2006/05/08
62

Q.ボックスプロット系列のアルゴリズムをカスタマイズしたいのですが、ボックスプロットのパラメータを使用してカスタマイズするにはどうすればいいですか?

2005/12/07
61

Q.昇順/降順で系列値を表示する方法は?

2005/12/07
60

Q.チャートに表示するポイント範囲を指定する方法は?
たとえば、系列に50ポイント追加した場合、34から41ポイントのみを表示します。

2005/12/07
59

Q.系列を使用する場合、NULL値が常にゼロで表示されます。回避方法は?

2005/12/07
58

Q.系列に追加した順番でポイントを接続したいのですが、TeeChartは昇順のXValuesで接続するようです。

2005/12/07
57

Q.系列のポイントを削除した後の空間を削除する方法は?

2005/12/07
56

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

2005/12/07
55

Q.チャート系列にすべての値の合計を表示するにはどうすればいいですか?

2005/12/07
54

Q.系列から別の系列に値をコピーするにはどうすればいいですか?

2005/12/07
53

Q.チャートエディタに既に登録されている系列を表示しないようにするには、どのように登録を解除したらいいですか?

2005/12/07
52

Q.独自の系列をチャートエディタダイアログに表示するにはどのように登録すればいいですか?

2005/12/07
51

Q.実行時に系列の順番を変更するにはどうすればいいですか?

2005/12/07
50

Q.コードで系列型を変更するにはどうすればいいですか?

2005/12/07
49

Q.TQRChartに直接チャートの定義を保存/読み込むにはどうすればいいですか?

2005/12/07
48

Q.TQRChartに何か描画するにはどうすればいいですか?TQRChartはOnAfterDrawイベントをサポートしていないようですが?

2005/12/07
47

Q.QuickReportの新しいバージョンにTeeChartをインストールするにはどうすればいいですか?

2005/12/07
46

Q.実行時にQuickReportでTQRChartを作成するにはどうすればいいですか?

2005/12/07
45

Q.既存のチャートをQuickReportチャートにコピーするにはどうすればいいですか?

2005/12/07
44

Q.非常に長いリボンチャートを複数ページに印刷するにはどうすればいいですか?

2005/12/07
43

Q.色づけされた軸グリッド線が一部のプリンタで印刷されません。

2005/12/07
42

Q.TWindRoseSeriesにはAddPolarメソッドがないという表示がでます。対処法は?

2005/12/07
41

Q.Chart.Series[0].Pointer.Visible:=falseと記述すると失敗します。実行時にポイントを非表示にするにはどうすればいいですか?

2005/12/07
40

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

2005/12/07
39

Q.リボン系列でパラメータの描画を行うにはどうすればいいですか?

2005/12/07
38

Q.Borland DelphiおよびC++ BuilderにバンドルされているTeeChartとTeeChart Proでは何が違うのですか?

2005/12/07
37

Q.系列リストを使用する場合、「関数」か「標準系列」かどうしたら分かりますか?

2005/12/07
36

Q.多項式関数:AnswerVectorからの係数が正確ではありません。どうしてですか?

2005/12/07
35

Q.系列に関連する関数を変更するにはどうすればいいですか?

2005/12/07
34

Q.TCandleSeries内のすべての値に異なる枠の色を設定するにはどうすればいいですか?

2005/12/07
33

Q.XValuesがTDateTime型ではない場合、TCandleSeriesを使用できますか?

2005/12/07
32

Q.Candle OHLCデータベースのチャートで週末を削除するにはどうすればいいですか?

2005/12/07
31

Q.特定のPCでのみPNG形式にエクスポートできます。どうしてですか?

2005/12/07
30

Q.TeeChartを特定のイメージ形式にエクスポートするにはどうすればいいですか?

2005/12/07
29

Q.実行時に拡張系列型がチャートギャラリに表示されません。

2005/12/07
28

Q.実行時にチャートエディタダイアログや印刷プレビューを表示するにはどうすればいいですか?

2005/12/07
27

Q.TeeChart Proを開発環境にインストールするとDecision Cubeが無効になります。対処法は?

2005/12/07
26

Q.ファイルからチャートを読み込む場合、系列のデータソースが復元されません。どうしてですか?

2005/12/07
25

Q.系列のポイントラベルとして計算されたフィールドを使用できますか?

2005/12/07
24

Q.単一テーブルのレコードの多数フィールドから値を描画するにはどうすればいいですか?

2005/12/07
23

Q.TChart.Canvasのピクセル色を取得するにはどうすればいいですか?

2005/12/07
22

Q.チャートに特別なものを描くにはどうすればいいですか?

2005/12/07
21

Q.チャートの系列の最大数はいくつですか?

2005/12/07
20

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

2005/12/07
19

Q.チャートの定義をファイルに保存する方法と、チャートの定義をファイルから読み込む方法は?

2005/12/07
18

Q.チャートの背景イメージを削除する方法は?

2005/12/07
17

Q.別のチャートにチャートをコピーする方法は?

2005/12/07
16

Q.バーが正確に積み重ねられません。どうしてですか?

2005/12/07
15

Q.ヒストグラムとしてバー系列を使用するにはどうすればいいですか?

2005/12/07
14

Q.バーの枠を制御するにはどうすればいいですか?

2005/12/07
13

Q.チャート外かどうかに関わらずバー系列のバーをすべて描画したいのですがどうすればいいですか?

2005/12/07
12

Q.カスタム軸を追加/削除するにはどうすればいいですか?

2005/12/07
11

Q.対数の基数を2に設定できますか?

2005/12/07
10

Q.軸ラベルの指数形式を変更するにはどうすればいいですか?

2005/12/07
9

Q.軸と軸タイトルの間隔を設定するにはどうすればいいですか?

2005/12/07
8

Q.軸の小さな値が適切に表示されません。

2005/12/07
7

Q.カスタム軸を使用しています。この軸外にポイントをクリッピングする方法はありますか?

2005/12/07
6

Q.カスタム軸がズームできません。解決法は?

2005/12/07
5

Q.指数形式で軸ラベルを設定するにはどうすればいいですか?

2005/12/07
4

Q.すべての軸ラベルを表示するにはどうすればいいですか?

2005/12/07
3

Q.マウスを使用せずにチャートをスクロール/ズームするにはどうすればいいですか?

2005/12/07
2

Q.サーフェス系列にdouble値を使用していますが、何も描画しません。どうしてですか?

2005/12/07
1

Q.3Dでパラメータ機能を描画するにはどうすればいいですか?

2005/12/07

【TeeChart Pro 7J VCL Q&A一覧】

QNo.

Q.質問

日付

A.回答

68

 

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

2008/11/21

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

67

 

Q.Delphi 2009/C++Builder 2009に対応していますか?

2008/09/10

A.申し訳ありませんが、TeeChart Pro 7Jでは対応しておりません。

66

 

Q.C++Builder 2007に対応していますか?

2007/10/23

A.2007/10/23付けで対応モジュールを公開いたしました。

65

 

Q.Delphi 2007 for Win32に対応していますか?

2007/06/01

A.2007/06/01付けで対応モジュールを公開いたしました。

64

 

Q.実行時にTeeCommanderのボタンのヒントが日本語にならない場合があるのですが?

2007/04/20

A.TeeSetJapaneseを実行した後で、該当するプロパティを設定してください。
Delphi :
uses TeeProCo, TeeJapanese;
TeeSetJapanese;
TeeCommander1.Button3D.Hint := TeeCommanMsg_3D;
TeeCommander1.ButtonCopy.Hint := TeeCommanMsg_Copy;
TeeCommander1.ButtonDepth.Hint := TeeCommanMsg_Depth;
TeeCommander1.ButtonEdit.Hint := TeeCommanMsg_Edit;
TeeCommander1.ButtonMove.Hint := TeeCommanMsg_Move;
TeeCommander1.ButtonNormal.Hint := TeeCommanMsg_Normal;
TeeCommander1.ButtonPrint.Hint := TeeCommanMsg_Print;
TeeCommander1.ButtonRotate.Hint := TeeCommanMsg_Rotate;
TeeCommander1.ButtonSave.Hint := TeeCommanMsg_Save;
TeeCommander1.ButtonZoom.Hint := TeeCommanMsg_Zoom;
C++Builder :
#include <TeeProCo.hpp>
#include <TeeJapanese.hpp>
TeeSetJapanese();
TeeCommander1->Button3D->Hint = TeeCommanMsg_3D;
TeeCommander1->ButtonCopy->Hint = TeeCommanMsg_Copy;
TeeCommander1->ButtonDepth->Hint = TeeCommanMsg_Depth;
TeeCommander1->ButtonEdit->Hint = TeeCommanMsg_Edit;
TeeCommander1->ButtonMove->Hint = TeeCommanMsg_Move;
TeeCommander1->ButtonNormal->Hint = TeeCommanMsg_Normal;
TeeCommander1->ButtonPrint->Hint = TeeCommanMsg_Print;
TeeCommander1->ButtonRotate->Hint = TeeCommanMsg_Rotate;
TeeCommander1->ButtonSave->Hint = TeeCommanMsg_Save;
TeeCommander1->ButtonZoom->Hint = TeeCommanMsg_Zoom;

63

 

Q.Borland Developer Studio 2006に対応していますか?

2006/05/08

A.2006/05/08付けで対応モジュールを公開いたしました。なお、C++BuilderとDelphi for Win32用プロジェクトのみの対応となります。

62

 

Q.ボックスプロット系列のアルゴリズムをカスタマイズしたいのですが、ボックスプロットのパラメータを使用してカスタマイズするにはどうすればいいですか?

2005/12/07

A.ボックスプロット系列のパラメータすべてをカスタマイズできるようにするには、TBoxPlotSeriesにはUseCustomValuesパラメータがあります。このデフォルト値は無効になっており、内部アルゴリズムが中央値計算(Q1,Q3 および他のボックスプロットパラメータ)の処理を行います。場合によって、ボックスプロットパラメータを計算するために別のアルゴリズムを使用する必要がある場合があります。その場合、一部ではなくすべてのボックスプロットパラメータすべてを計算/設定しなければなりません。

例:
begin
  With boxPlotSeries1 do
  begin
    Clear;
    AddArray([12, 14, 18, 18.5, 18.6, 18.6, 19, 24]);
    UseCustomValues := True; // デフォルトでは内部の計算アルゴリズムを使用します。
    Median := 15;
    Quartile1 := 13;
    Quartile3 := 17;
    InnerFence1 := 12;
    InnerFence3 := 18;
    OuterFence1 := 10;
    OuterFence3 := 20;
  end;
end;

61

 

Q.昇順/降順で系列値を表示する方法は?

2005/12/07

A.系列に追加する前にデータをあらかじめ処理し、値をソートできます。または、値が既に系列に追加されている場合、系列値リストのOrderメソッド、Sortメソッド、FillSequenceメソッドを使用して系列値を再配列できます。下記のコードは昇順でバー系列の値を表示します。

bar1.XValues.Order := loNone;
bar1.YValues.Order := loAscending;
bar1.YValues.Sort;
bar1.XValues.FillSequence;
bar1.Repaint;

上記のコードは通常のy=y(x) (垂直)系列型に有効です。水平系列型x=x(y)に対しては、x値とy値を交換することです。下記のコードを使用してください。

bar1.YValues.Order := loNone;
bar1.XValues.Order := loAscending;
bar1.XValues.Sort;
bar1.YValues.FillSequence;
bar1.Repaint;

60

 

Q.チャートに表示するポイント範囲を指定する方法は?
たとえば、系列に50ポイント追加した場合、34から41ポイントのみを表示します。

2005/12/07

A.Series OnBeforeAddイベントはどのポイントを実際に追加するかを制限するために使用されます(下記のコードを参照してください)。

Delphi :
var tmpCount:integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
  Series1.Clear; //系列をクリア
  Series1.FillSampleValues(50);
end;
function TForm1.Series1BeforeAdd(Sender: TChartSeries): Boolean;
begin
  Inc(tmpCount);
  result:= (tmpCount>34) and (tmpCount<41); //必要な値のみ追加
end;
procedure TForm1.Series1ClearValues(Sender: TChartSeries);
begin
  tmpCount:=0; //カウンターをリセット
  end;
C++Builder :
int tmpCount;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  Series1->Clear(); //系列をクリア
  Series1->FillSampleValues(50);
}
void __fastcall TForm1::Series1ClearValues(TChartSeries *Sender)
{
  tmpCount=0; // カウンターをリセット
}
bool __fastcall TForm1::Series1BeforeAdd(TChartSeries *Sender)
{
  tmpCount++;
  bool result= (tmpCount>34) && (tmpCount<41); //必要な値のみ追加
  return result;
}

59

 

Q.系列を使用する場合、NULL値が常にゼロで表示されます。回避方法は?

2005/12/07

A.AddNullメソッドやAddNullXYメソッドは実際には単にColorパラメータをclNoneに設定した標準のAdd/AddXYメソッドです。これはTeeChartソース内のAddNullおよびAddNullXY実装です。

function TChartSeries.AddNull(Const ALabel:String):Integer;
begin
  result := Add( 0, ALabel, clNone );
end;
function TChartSeries.AddNullXY(Const X,Y:Double; Const ALabel:String):Integer;
begin
  result:=AddXY(X,Y,ALabel,clNone );
end;


回避方法:
a) 前もって範囲がわかっている場合、nullポイントを追加するにはAddNullXY(x,y,'')を使用してください(yが[最小値,最大値]の範囲内にある場合)。

b)前もってy範囲がわかっている場合、系列のOnAfterAddイベントを使用して、null値を最小値か最大値かによって)上下に移動してください(下記のコードを参照してください)。

procedure TForm1.Series1AfterAdd(Sender: TChartSeries;
ValueIndex: Integer);
var i:integer;
begin
  for i:=Sender.FirstValueIndex to Sender.LastValueIndex do
    if Sender.IsNull(ValueIndex) then
      if Sender.YValue[ValueIndex]=Sender.YValues.MinValue then
        Sender.YValue[ValueIndex] := Sender.YValues.MaxValue
      else
      if Sender.YValue[ValueIndex]=Sender.YValues.MaxValue then
        Sender.YValue[ValueIndex] := Sender.YValues.MinValue
end;

58

 

Q.系列に追加した順番でポイントを接続したいのですが、TeeChartは昇順のXValuesで接続するようです。

2005/12/07

A.各ポイントに異なる新しいX座標を割り当てるには、FillSequenceメソッドを呼び出します。

Series.XValues.Order:=loAscendingは、線でポイントを接続するためのデフォルトの設定です。別の方法としては、下記のコードを使用して、「線の描画」の順番を簡単に変更できます。

Series.XValues.Order:=loNone;

57

 

Q.系列のポイントを削除した後の空間を削除する方法は?

2005/12/07

A.各ポイントに異なる新しいX座標を割り当てるには、FillSequenceメソッドを呼び出します。

例:
Series1.Delete( 3 );
Series1.XValues.FillSequence;

56

 

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

2005/12/07

A.系列値に「null」ポイントを追加するには、AddNullメソッドかAddNullXYメソッドが使用できます。
TeeChartでは、「null」ポイントはValueColorプロパティがclNoneに設定されている「一般」ポイントとして内部的に表されます。つまり、AddNullメソッドが内部的にAddメソッドを呼び出し、ポイントの色をclNoneに設定します。従って、「null」ポイントはX値やY値を持っています。
AddNullXYメソッドは、特定のX値やY値を設定してnullポイントを追加することができます。

55

 

Q.チャート系列にすべての値の合計を表示するにはどうすればいいですか?

2005/12/07

A.X、Y、またはTChartValueListの合計を計算するためには、TChartValueList.TotalメソッドかTotalABSメソッドを使用することができます。

54

 

Q.系列から別の系列に値をコピーするにはどうすればいいですか?

2005/12/07

A.2種類の方法があります。
1. 1つは、2番目の系列のデータソースを最初の系列に設定することです。
dstSeries.DataSource := srcSeries ;
2. もう1つは、AssignValuesメソッドを呼び出すことです。
dstSeries.AssignValues(srcSeries);

53

 

Q.チャートエディタに既に登録されている系列を表示しないようにするには、どのように登録を解除したらいいですか?

2005/12/07

A.ギャラリに表示される系列は"uses"ユニットで制御されます。ユニットがプロジェクトで使用される場合、そのユニットで登録された系列はギャラリ上に表示されます。
次の例を行うことにより、系列はギャラリに表示される前に「登録を解除」することができます。

procedure TForm1.FormCreate(Sender: TObject);
begin
  // TLineSeriesやTBarSeriesを非表示にする
  UnRegisterTeeSeries([TLineSeries,TBarSeries]);
end;

52

 

Q.独自の系列をチャートエディタダイアログに表示するにはどのように登録すればいいですか?

2005/12/07

A.カスタム系列コードの終わりに下記の構文を追加するだけで行えます。

initialization
  RegisterTeeSeries(TYourSeriesClass, @YourSeriesName, @TeeMsg_GalleryExtended,2);

RegisterTeeSeriesルーチンは次のパラメータを使用します。
ASeriesClass:登録される系列クラス。
AGaleryPage:系列を表示するギャラリタブの位置
ANumGalerySeries:ギャラリ用のランダムな系列数

51

 

Q.実行時に系列の順番を変更するにはどうすればいいですか?

2005/12/07

A.系列はChart1.SeriesListのTListオブジェクト内の系列と同じ順番で描画されます。ChartのSeriesDownメソッドやSeriesUpメソッドを使用して、系列を前後に移動することができます。

50

 

Q.コードで系列型を変更するにはどうすればいいですか?

2005/12/07

A.系列型を変更するには、ChangeSeriesTypeルーチンを使用することができます。これはChartユニットに配置されています。

Delphi :
var tmpSeries: TChartSeries;
begin
  tmpSeries := Chart1.Series[0];
  ChangeSeriesType(tmpSeries,TBarSeries);
end;
C++Builder :
TChartSeries *tmpSeries = Chart1->Series[0];
ChangeSeriesType(tmpSeries,__classid(TBarSeries));

49

 

Q.TQRChartに直接チャートの定義を保存/読み込むにはどうすればいいですか?

2005/12/07

A.下記のコードが使用できます。

例:
procedure TForm1.btnSaveClick(Sender: TObject);
begin
  SaveChartToFile(QRChart1.Chart,'c:temptest1.tee');
end;

procedure TForm1.btnLoadClick(Sender: TObject);
  var tmp: TCustomChart;
begin
  LoadChartFromFile(TCustomChart(QRChart1.Chart),'c:temptest1.tee');
end;

48

 

Q.TQRChartに何か描画するにはどうすればいいですか?TQRChartはOnAfterDrawイベントをサポートしていないようですが?

2005/12/07

A.その通りです。TQRChartには、OnAfterDrawイベントがありません。しかし、QRChart.Chartにはあります。下記のコードを使用してください。

Delphi :
type
TForm1 = class(TForm)
  QRDBChart1: TQRDBChart;
  QRChart1: TQRChart;
  procedure FormCreate(Sender: TObject);
{ Private declarations }
private
  procedure MyTest(Sender: TObject);
{ Public declarations }
public
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.MyTest(Sender: TObject);
begin
  QRChart1.Chart.Canvas.TextOut(200,200,'Test');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  QRChart1.Chart.OnAfterDraw:=MyTest;
end;
C++Builder :
class TForm1 : public TForm
{
__published:    // IDE-managed Components
  TQuickRep *QuickRep1;
  TQRBand *TitleBand1;
  TQRDBChart *QRDBChart1;
  TQRChart *QRChart1;
  void __fastcall AfterDraw(TObject *Sender);
  void __fastcall FormCreate(TObject *Sender);
private:    // User declarations
public:        // User declarations
  __fastcall TForm1(TComponent* Owner);
};

void __fastcall TForm1::AfterDraw(TObject *Sender)
{
  QRChart1->Chart->Canvas->TextOut(200,200,"Test");
}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  QRChart1->Chart->OnAfterDraw=AfterDraw;
}

47

 

Q.QuickReportの新しいバージョンにTeeChartをインストールするにはどうすればいいですか?

2005/12/07

A.
すべてのTeeChartパッケージはQuick Reportのビルドインバージョンでコンパイルされます。異なるQuick Reportバージョン(新しいかProバージョン)を使用している場合、最新版のTeeChartとQuick Reportをインストールした後にTQRChartコンポーネントを再コンパイルし再インストールしなければなりません。必要なソースコードファイル(全TQRChartコンポーネントファイル)とこれを行う指示が通常TeeChartサブフォルダ("QuickReport"サブフォルダ)にあります。これらのファイルおよび指示を使用して、Quick ReportバージョンにTeeChartをコンパイルおよび使用することができます。

TeeChart配布で添付されるインストール指示はQuick Report用に書かれています。Quick Report v4を使用している場合、同じ指示になりますが、さらに2つ付け加えることがあります。

1) QR v4ではパッケージ名が変更されています。従って、Quick Reportの実行時パッケージは qrpt70.bplからQR4RunD7.bplに変更されています。つまり、前のQuick Reportパッケージのリファレンスを削除して、新しいバージョンのものに変えなければなりません。

2) TQRChartの実行時および設計時のパッケージのオプションを「要求があれば再構築を行う」に設定してください。

ここにTQChartコンポーネントパッケージのリコンパイル/再インストール方法の順を追った指示があります(TeeChart v7, Quick Report v4.03, Delphi 7)。同じ指示ですが、違うパッケージ名で前のTeeChartバージョンに使用されています。

1) [コンポーネント->パッケージのインストール] に進み、リストからDclTQR77.bplパッケージを削除してください。

2) Delphi 7を終了してください。

3) (最重要!!) 「Delphiのパス検索」リストのすべてのディレクトリを検索し、古いTQRChartコンポーネントファイルをすべて削除してください。これはTQRChartコンポーネントをリコンパイルするには重要です。基本的にteeqr77.dcp, DclTQR77.dcp, TeeQr.dcu, qrtee.dcu, qrteereg.dcu, TeeQR.res, TeeQR77.bpl および DclTQR77.bplファイルを見つけて削除してください。次に、古いTQRChartファイルすべてを削除したことを100%確認できたら、次のステップに進んでください。異なるTeeChartバージョンを使用している場合、同じ指示が当てはまります。TQRChartコンポーネントパッケージをリコンパイルする「前」に、古いTQRChartコンポーネントファイルをすべて削除してください。

4) Delphi 7を起動してください。

5) 次にプロジェクトをすべて閉じてください。そして[ファイル->プロジェクトを開く]メニューに行き、TeeQR77.dpkパッケージを選択してください。

6) Quick Report 4では、古い Quick Report v3パッケージの参照を削除して、新しい実行時のパッケージに置き換えなければなりません。Delphi 7では、requiresセクションのqrpt.dcpファイル(またはどのQRバージョンを以前に使用していたかによって類似ファイル)をQR4RunD7.dcpファイルに置き換えてください。またパッケージのビルドオプションを「要求があれば再構築を行う」に設定してください。

7) ここで「コンパイル」ボタンをクリックしてください。パッケージが正確にコンパイルされます。エラーが出たら、下記の「トラブルシューティング」を参照してください。

8) DclTQR77.dpkパッケージを開いてください([ファイル->プロジェクトを開く] メニュー)。

9) ここで「コンパイル」ボタンをクリックしてください。パッケージが自動的にコンパイルされます。エラーが出たら、下記の「トラブルシューティング」を参照してください。

10) コンパイルしたパッケージをコピーしてください (恐らくDelphi7\Projects\BPLディレクトリにコンパイルされましたが、実際のディレクトリはプラットフォーム設定により異なります) 。

- TeeQR77.bplからWindowsSystem (またはWinNTSystem32)ディレクトリ
- DclTQR77.bplからDelphi7Bin ディレクトリ
- TeeQR77.dcpからDelphi7Lib ディレクトリ
- DclTQR77.dcpからDelphi7Lib ディレクトリ
- QRTeeReg.dcu, QRTee.dcuからDelphi7Lib ディレクトリ
- すべての *.res ファイルから Delphi7Lib ディレクトリ

11) [コンポーネント->パッケージのインストール]に行き、「追加」ボタンを押し、DclTQR77.bplパッケージを選んでください(上述の指示通りに従えば、Delphi7\Binディレクトリにあります)。これでQRChartコンポーネントをQReportコンポーネントパレットにインストールするはずです。

12) [プロジェクト->オプション->パッケージ]ダイアログを確認することを忘れないでください。新しいパッケージ名が下部の編集ボックスのリストに載っているはずです。

13) 重要:(TeeQR77.dpk および DclTQR77.dpkファイルを保持しているディレクトリから)新しくリコンパイルした全*.dcuファイルをDelphi7Libディレクトリにコピーすることを忘れずに行ってください。

異なる Delphiおよび/またはTeeChartバージョンを使用している場合、同じ指示に従って、パッケージ名を変更してください。たとえば、Delphi 5でTeeChart v7を使用している場合、パッケージ名はTeeQR75, DclTQR75, qrpt50.bpl to QR4RunD5.bplに換わります。

46

 

Q.実行時にQuickReportでTQRChartを作成するにはどうすればいいですか?

2005/12/07

A.設計時にTQRChartを追加すると、TQRChartクリエータは自動的にQRDBChartを作成します。
実行時のQRChartの作成ではサブチャートコンポーネントを作成しません。これはIDEがdfmフォームを読み込む際にサブチャートを取得しようとするからです。従って、QRDBChartを作成し、QRChartをオーナーとして設定しなければなりません。QRChartは、これを通知し、サブチャートプロパティとしてQRDBChartインスタンスを使用します。これを行うコードは下記の通りです。

Delphi :
procedure TForm1.Button1Click(Sender: TObject);
var tmp:TQRChart;
begin
  { QRChart の作成 }
  tmp:=TQRChart.Create(Self);
  { QRDBChart の作成 }
  With TQRDBChart.Create(tmp) do
  begin
    Parent:=TWinControl(tmp);
    Name:=TeeGetUniqueName(Owner,'QRChart');
    Title.Text.Clear;
    Title.Text.Add(tmp.ClassName);
  end;
  { QuickReport にQRChart を追加 }
  With tmp do
  begin
    ParentReport:=QuickRep1;
    Parent:=TitleBand1;
    Width:=300;
    Height:=160;
    Left:=30;
    Top:=20;
    { 系列を作成し、ランダム値を追加 }
    Chart.AddSeries( TBarSeries.Create(Self) );
    Chart.Series[0].FillSampleValues(7);
  end;
end;
C++Builder :
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
  // QRChartの作成
  TQRChart *tmp=new TQRChart(this);
  // QRDBChartの作成
  TQRDBChart *tmpQRDB=new TQRDBChart(tmp);
  tmpQRDB->Parent=tmp;
  tmpQRDB->Name=TeeGetUniqueName(tmpQRDB->Owner,"QRChart");
  tmpQRDB->Title->Text->Clear();
  tmpQRDB->Title->Text->Add(tmp->ClassName());

  // QuickReportにQRChart を追加
  tmp->ParentReport=QuickRep1;
  tmp->Parent=TitleBand1;
  tmp->Width=300;
  tmp->Height=160;
  tmp->Left=30;
  tmp->Top=20;
  // 系列を作成し、ランダム値を追加
  TBarSeries *tmpSer=new TBarSeries(this);
  tmpSer->ParentChart=tmp->Chart;
  tmpSer->FillSampleValues(7);
}

45

 

Q.既存のチャートをQuickReportチャートにコピーするにはどうすればいいですか?

2005/12/07

A.一般のチャートと同じように設定できます。TQRChartコンポーネントはTDBChartコンポーネントを示す「Chart」プロパティを持っています。下記のコードを使用して、既存のチャートをTQRChartに割り当てることができます。

Delphi :
QRChart1.Chart.FreeAllSeries;
QRChart1.Chart.Assign(Chart1);
for t:=0 to Chart1.SeriesCount-1 do
  CloneChartSeries(Chart1[t]).ParentChart:=QRChart1.Chart;
C++Builder :
Chart1->MaxPointsPerPage=100;
QRChart1->Chart->FreeAllSeries();
QRChart1->Chart->Assign(Chart1);
for (int t=0;t<=Chart1->SeriesCount()-1;t++)
  CloneChartSeries(Chart1->Series[t])->ParentChart=QRChart1->Chart;

44

 

Q.非常に長いリボンチャートを複数ページに印刷するにはどうすればいいですか?

2005/12/07

A.まず、ページ毎にポイントの数を定義する必要があります。そして、Chart1.MaxPointsPerPageプロパティを使用してチャート全体を複数ページに分割します。最後に、NumPagesプロパティとPageプロパティを使用して全ページを印刷するループを使用します。

Delphi :
Chart1.MaxPointsPerPage:= 100;
for t:=1 to Chart1.NumPages do
begin
  Chart1.Page:=t;
  Chart1.PrintLandscape;
end;
C++Builder :
Chart1->MaxPointsPerPage=100;
for (int t=1;t<=Chart1->NumPages;t++)
{
  Chart1->Page=t;
  Chart1->PrintLandscape();
}

43

 

Q.色づけされた軸グリッド線が一部のプリンタで印刷されません。

2005/12/07

A.ほとんどの場合、この問題はプリンタのドライバ側にあるので、解決法は通常、新しい/別のプリンタドライバをインストールすることです。
それでも色づけされた線が印刷されない場合、ペンスタイルを無地にして色を黒に変更してみてください。

例:
Chart1.BottomAxis.Grid.Style := psDot;
Chart1.BottomAxis.Grid.Width := 0;
{ <-- try also with 1, 2, etc }
Chart1.BottomAxis.Grid.Color := clBlack;

42

 

Q.TWindRoseSeriesにはAddPolarメソッドがないという表示がでます。対処法は?

2005/12/07

A.AddPolarメソッドを追加していませんでした。基本的にこのメソッドは標準のAddXYメソッドです(下記のAddPolarの定義を参照してください)。

function TPolarSeries.AddPolar( Const Angle,Value:Double; Const ALabel:String; AColor:TColor):Integer;
begin
  result:=AddXY(Angle,Value,ALabel,AColor);
end;

対処法:
a) 代わりにAddXYメソッドを使用してください。
b) TWindRoseSeriesから新しい系列を派生し、AddPolarメソッドを追加してください。

41

 

Q.Chart.Series[0].Pointer.Visible:=falseと記述すると失敗します。実行時にポイントを非表示にするにはどうすればいいですか?

2005/12/07

A.TChartSeriesクラスはPointerプロパティを持っていません。一部の派生された系列クラスだけがこのプロパティを持っています。クラスを有効にするために、Series[i]をキャストしなければなりません。

Delphi :
if Chart1.Series[0] is TLineSeries then
  (Chart1.Series[0] as TLineSeries).Pointer.Visible := false;
C++Builder :
if (dynamic_cast<TLineSeries *>(Chart1->Series[0]))
  dynamic_cast<TLineSeries *>(Chart1->Series[0])->Pointer->Visible = false;

40

 

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

2005/12/07

A.リボン系列のLinePen.Styleプロパティを使用してください。

39

 

Q.リボン系列でパラメータの描画を行うにはどうすればいいですか?

2005/12/07

A.デフォルトでは、リボン系列のようなほとんどの系列はX座標を使用してポイントを配置します。これは「普通」の系列には良いのですが、ポイントを系列に追加した順番でポイントを接続したい場合、パラメータの描画を行えません。
たとえば、円を描画したい場合、まずこの自動配列を無効にしてください。そうすることにより、系列にポイントを追加した順番で描画します。

Delphi :
var t: Integer;
begin
  Series1.XValues.Order:=loNone;
  for t:=0 to 360 do Series1.AddXY(Sin(t*Pi/180.0), Cos(t*Pi/180.0), '', clRed);
end;
C++Builder :
Series1->XValues->Order=loNone;
for (int t=0;t<=360;t++)
  Series1->AddXY(sin(t*3.14/180.0), cos(t*3.14/180.0), "", clRed);

38

 

Q.Borland DelphiおよびC++ BuilderにバンドルされているTeeChartとTeeChart Proでは何が違うのですか?

2005/12/07

A.TeeChart Proは、バンドルされているTeeChartの機能の他に多くの機能が追加されています。詳しくは下記のURLにアクセスしてください。

http://www.newtone.co.jp/producttc702.html

37

 

Q.系列リストを使用する場合、「関数」か「標準系列」かどうしたら分かりますか?

2005/12/07

A.一番簡単な方法は、Series.FunctionTypeプロパティを確認することです。下記のコードで確認できます。

Delphi :
var i: Integer;
begin
  for i := 0 to Chart1.SeriesCount() - 1 do
    if Chart1.Series[i].FunctionType <> nil then
      ShowMessage('この系列は関数型です');
end;
C++Builder :
for (int i = 0; i <= Chart1->SeriesCount() - 1; i++)
{
  if (Chart1->Series[i]->FunctionType != NULL)
  ShowMessage("この系列は関数型です。");
}

36

 

Q.多項式関数:AnswerVectorからの係数が正確ではありません。どうしてですか?

2005/12/07

A.浮動小数点をオーバーフローしないようにするには、すべてのX値とY値がX->X-XminおよびY->Y-Yminで再正常化されます。AnswerVectorは係数が再正常化された関数の係数であることを返します。

35

 

Q.系列に関連する関数を変更するにはどうすればいいですか?

2005/12/07

A.すべての系列はFunctionType(関数オブジェクトを返す)メソッドとSetFunctionメソッド(関数オブジェクトを割り当て/変更するために使用可能)を持っています。系列の関数を設定するには、下記のコードを使用してください。

Delphi :
Series2.SetFunction(TAverageTeeFunction.Create(Self)):
Series2.DataSource := Series1;
C++Builder :
Series2->SetFunction(new TAverageTeeFunction(this));
Series2->DataSource = Series1;

34

 

Q.TCandleSeries内のすべての値に異なる枠の色を設定するにはどうすればいいですか?

2005/12/07

A.簡単です。個々のポイントのプロパティを完全にカスタマイズするには、単純にTCandleSeries.OnGetPointerStyleイベントを使用するだけです。

例:
function TForm1.Series1GetPointerStyle(Sender: TChartSeries;
ValueIndex: Integer): TSeriesPointerStyle;
begin
  with (Sender as TCandleSeries) do
    Pen.Color := ValueColor[ValueIndex];
end;

33

 

Q.XValuesがTDateTime型ではない場合、TCandleSeriesを使用できますか?

2005/12/07

A.はい。TDateTime型ではない水平軸でもTCandleSeriesを使用できます(XValues.DateTime:=false)。

Delphi :
Series1.XValues.DateTime := false; // 日付は使用しない
Series1.AddCandle(10,12,10,3,3);
Series1.AddCandle(11,15,30,12,20);
Series1.AddCandle(15,3,30,11,20);
Series1.AddCandle(18,11,30,22,20);
C++Builder :
Series1->XValues->DateTime = false; // 日付は使用しない
Series1->AddCandle(10,12,10,3,3);
Series1->AddCandle(11,15,30,12,20);
Series1->AddCandle(15,3,30,11,20);
Series1->AddCandle(18,11,30,22,20);

32

 

Q.Candle OHLCデータベースのチャートで週末を削除するにはどうすればいいですか?

2005/12/07

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

Delphi :
Series1.XValues.ValueSource := ''; { <--- X 座標なし }
Series1.XLabelsSource := "MyDate";
Series1.OpenValues.ValuesSource := "Open";
Series1.CloseValues.ValuesSource := "Close";
Series1.HighValues.ValuesSource := "High";
Series1.LowValues.ValuesSource := "Low";
Series1.DataSource := Table1;
C++Builder :
Series1->XValues->ValueSource = ""; { <--- X 座標なし }
Series1->XLabelsSource = "MyDate";
Series1->OpenValues->ValuesSource = "Open";
Series1->CloseValues->ValuesSource = "Close";
Series1->HighValues->ValuesSource = "High";
Series1->LowValues->ValuesSource = "Low";
Series1->DataSource = Table1;

31

 

Q.特定のPCでのみPNG形式にエクスポートできます。どうしてですか?

2005/12/07

A.PNGエクスポート形式はTeeChart配布(LPNG.dll)に含まれる小さなdllファイルが必要です。TeeChart Pro 7をインストールすると、このdllはインストール時指定したフォルダ\xxxx\Systemフォルダ(xxxxは開発環境により異なります)にコピーされます。PNGエクスポート形式を他のPCでも動作するようにするには、このdllを配布してください。

30

 

Q.TeeChartを特定のイメージ形式にエクスポートするにはどうすればいいですか?

2005/12/07

A.いくつかの方法があります。

1.チャートイメージを特定形式にエクスポートするには、設計時にエディタを使用できます。「エクスポート」タブに登録されたエクスポート形式をすべて表示します。注意:設計時にサポートされるエクスポート形式すべてを表示したい場合は、"TeeImage*.bpl"パッケージをインストールしてください。

2.usesセクション(もしくはinclude)に適切なエクスポートユニットを追加し、下記のようなコードを使用して、実行時に特定形式にエクスポートできます。下記のコードはチャートイメージをGIF形式にエクスポートします。

Delphi :
u
ses TeeGIF;
begin
  With TGIFExportFormat.Create do
  try
    Panel := Chart1;
    SaveToFile('c:\imagesChartImage.gif');
  finally
    Free;
  end
end
C++Builder :
#include "TeeGIF.hpp"

TGIFExportFormat *gifexport = new TGIFExportFormat();
try
{
  gifexport->Panel = Chart1;
  gifexport->SaveToFile("c:\imagesChartGif.gif");
}
__finally
{
  delete gifexport;
}

29

 

Q.実行時に拡張系列型がチャートギャラリに表示されません。

2005/12/07

A.チャートエディタは登録された系列/ツールクラスのみを表示します。設計時にデザインパッケージが読み込まれる場合、すべての系列クラスが登録され、すべての系列/ツール型がエディタに表示されます。
実行時ではこれは必要ではありません。エディタは登録された系列クラスおよび登録された系列エディタのみを表示します。すべての系列/ツールおよびエディタが実行時に表示されるかを確認するには、使用するセクションにTeeEditProユニットを追加してください。TeeEditProがすべての系列クラス、ツールクラス、エディタクラスを初期化セクションに登録します。

Delphi :
uses EditChar, TeeEditPro;
EditChart(Self,Chart1);
C++Builder :
#include <EditChar.hpp>
#include <TeeEditPro.hpp>
#pragma link "TeeEditPro";
EditChart(this,Chart1);

28

 

Q.実行時にチャートエディタダイアログや印刷プレビューを表示するにはどうすればいいですか?

2005/12/07

A.
1.コンポーネントを使用する場合(TChartEditor, TChartPreviewer)
Delphi :
ChartEditor1.Chart := Chart1;
ChartEditor1.Execute;
ChartPreviewer1.Chart := Chart1;
ChartPreviewer1.Execute;
C++Builder :
ChartEditor1->Chart = Chart1;
ChartEditor1->Execute();
ChartPreviewer1->Chart = Chart1;
ChartPreviewer1->Execute();
※TChartPreviewerではTChartPageNavigatorが表示されませんので、TChartPageNavigatorを表示する場合は2番のChartPreviewerを使用してください。

2.手続きを使用する場合
Delphi :
uses EditChar;
EditChart(Self,Chart1);
uses TeeEdiGene;
ChartPreview(Self,Chart1);
C++Builder :
#include <EditChar.hpp>
EditChart(this,Chart1);
#include <TeeEdiGene.hpp>
ChartPreview(this,Chart1);

1番,2番ともチャートエディタでツールタブを表示する場合は、「usesもしくはinclude」にTeeToolsユニットを追加してください。(TeeEditProユニットも必要)
Delphi :
uses TeeTools;
C++Builder :
#include <
TeeTools.hpp>

「チャートエディタや印刷プレビューを日本語で表示する場合は、TeeJapaneseユニットを「usesもしくはinclude」に追加し、TeeSetJapaneseを実行してください。詳しくはプログラミングガイドの該当ページをご覧ください。

27

 

Q.TeeChart Proを開発環境にインストールするとDecision Cubeが無効になります。対処法は?

2005/12/07

A.TeeChart Proをインストールしたフォルダの下にあるDecision Cubeフォルダのテキストファイルをご覧ください。

26

 

Q.ファイルからチャートを読み込む場合、系列のデータソースが復元されません。どうしてですか?

2005/12/07

A.これは、TeeChartの保存/読み込み操作での制限です。Series DataSource(s)プロパティが保存できず、正確に復元されません。この問題の対処法は、LoadChartFromFileまたはLoadChartFromStreamルーチンの呼び出しの後にコードで系列を適切なデータソースに再接続してください。

// フィールドオブジェクトではなく、文字列としてのフィールド名
LoadChartFromFile(TCustomChart(DBChart1), 'c:tempchart.tee');
DBChart1.Series[0].DataSource := Table1;
DBChart1.Series[0].CheckDataSource;

25

 

Q.系列のポイントラベルとして計算されたフィールドを使用できますか?

2005/12/07

A.もちろんできます。下位のTFieldが対応します。フィールドは、コードによって設計時または実行時に系列の値リストに接続することができます。

// フィールドオブジェクトではなく、文字列としてのフィールド名
Series1.XLabelsSource := 'MyCalcFieldName';

24

 

Q.単一テーブルのレコードの多数フィールドから値を描画するにはどうすればいいですか?

2005/12/07

A.設計時と実行時に(DBChartまたはQRChartを使用して)プロパティを設定する2つの方法があります。

Series1.YValues.ValueSource := 'MyField1;MyField2;MyField3';
{セミコロン";"でフィールドを区切る }

Series1.DataSource := Table1;

23

 

Q.TChart.Canvasのピクセル色を取得するにはどうすればいいですか?

2005/12/07

A.一番簡単な方法は、Chart.Canvas.ReferenceCanvas.Pixelsプロパティを使用することです。

Delphi :
var tmp:TColor;
begin
  tmp := Chart1.Canvas.ReferenceCanvas.Pixels[X,Y];
C++Builder :
TColor color = Chart1->Canvas->ReferenceCanvas->Pixels[X][Y];

22

 

Q.チャートに特別なものを描くにはどうすればいいですか?

2005/12/07

A.描画にはTChart.Canvasメソッドを使用してください(利用可能なメソッドに関してはDelphiやC++BuilderのTCanvasのヘルプを参照してください)。
描画コードはTChartイベント(TChart.OnAfterDrawイベント)に記述してください。このイベントに設定することにより、チャートの再描画の際に描画オブジェクトが継続され、チャート上で印刷も行えます。

Delphi :
procedure TForm1.Chart1AfterDraw(Sender: TObject);
begin
  With Chart1,ChartRect do
    Canvas.Rectangle(Left,Top,Right,Bottom);
end;
C++Builder :
void __fastcall TForm1::Chart1AfterDraw(TObject *Sender)
{
  Chart1->Canvas->Rectangle(Chart1->ChartRect.Left,Chart1->ChartRect.Top,
Chart1->ChartRect.Right,Chart1->ChartRect.Bottom);
}

21

 

Q.チャートの系列の最大数はいくつですか?

2005/12/07

A.制限は系列に対して134,217,727ポイントです。チャートごとの系列数も同じです。
実際には、系列に沢山のポイントを読み込もうとすると、PCのメモリに制限される問題があります。

20

 

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

2005/12/07

A.いいえ。解像度が低い(640x480)場合、すべてのポイントを描画するピクセルが不十分で発生するかもしれませんが、内部的に系列数や表示されるポイント数を制限しません。

19

 

Q.チャートの定義をファイルに保存する方法と、チャートの定義をファイルから読み込む方法は?

2005/12/07

A.ファイルやストリームへ(ファイルやストリームから)保存/読み込みするためには、TeeStore.pas unitのSaveChartToFile, LoadChartFromFile および SaveChartToStream, LoadChartFromStreamを使用することができます。

例:
procedure TForm1.BtnSaveClick(Sender: TObject);
begin
  SaveChartToFile(Chart1,'c:\temptest.tee',false); // 系列データを含みません
end;
procedure TForm1.BtnLoadClick(Sender: TObject);
begin
  LoadChartFromFile(TCustomChart(Chart1),'c:\temptest.tee');
end;

18

 

Q.チャートの背景イメージを削除する方法は?

2005/12/07

A.次のコードで背景イメージを削除できます。

Delphi :

Chart1.BackImage.Assign(nil);
C++Builder :
Chart1->BackImage->Assign(NULL);

17

 

Q.別のチャートにチャートをコピーする方法は?

2005/12/07

A.次のコードを使用して、チャートを別のチャート(例:別のフォーム)にコピーすることができます。

Delphi :

procedure TForm1.BitBtn1Click(Sender: TObject);
var t:Integer;
begin
  With Form2 do
  begin
    Chart2.FreeAllSeries;
    Chart2.Assign(Self.Chart1);
    { duplicate the Series and values }
    for t:=0 to Self.Chart1.SeriesCount-1 do
      CloneChartSeries(Self.Chart1[t]).ParentChart:=Chart2;
    Show;
  end;
end;

C++Builder :
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
  Form2->Chart2->FreeAllSeries();
  Form2->Chart2->Assign(this->Chart1);
  //duplicate the Series and values
  for (int t=0;t<=this->Chart1->SeriesCount()-1;t++)
    CloneChartSeries(this->Chart1->Series[t])->ParentChart=Form2->Chart2;

  Form2->Show();
}

16

 

Q.バーが正確に積み重ねられません。どうしてですか?

2005/12/07

A.すべての系列が同じ数のポイントを持っており、更に重要なことはすべての系列のX値が一致している場合、積み重ねアルゴリズムが正確に行われます。
この条件から1つでも欠落すると、値は正確に積み重ねられません。
もし、表示するポイント数が他の系列よりも少ない場合は、AddNullメソッドかAddNullXYメソッドを使用してNullポイントを追加してポイント数を合わせる事で正確に積み重ねることができます。

15

 

Q.ヒストグラムとしてバー系列を使用するにはどうすればいいですか?

2005/12/07

A.ヒストグラム系列(THistogramSeries)をご利用ください。

14

 

Q.バーの枠を制御するにはどうすればいいですか?

2005/12/07

A.BarPenプロパティで枠を制御できます。

Delphi :

Series1.BarPen.Visible := True;
Series1.BarPen.Width := 2;
C++Builder :
Series1->BarPen->Visible = true;
Series1->BarPen->Width = 2;

13

 

Q.チャート外かどうかに関わらずバー系列のバーをすべて描画したいのですがどうすればいいですか?

2005/12/07

A.バー系列のCalcVisiblePointsプロパティをfalseに設定してください。このプロパティがfalseの場合、系列はチャートの内側か外側かを計算しません。

Delphi :

Series1.CalcVisiblePoints := False;
C++Builder :
Series1->CalcVisiblePoints = false;

12

 

Q.カスタム軸を追加/削除するにはどうすればいいですか?

2005/12/07

A.次のコードはカスタム軸をChart1.CustomAxesのコレクションに追加します。

var custAxis: TChartAxis;
custAxis := (Chart1.CustomAxes.Add as TChartAxis);
With custAxis do
begin
  OtherSide := true;
  StartPosition := 20;
  EndPosition := 70;
  PositionPercent := 30;
  Horizontal := false;
end;

Series1.CustomVertAxis := custAxis;


次のコードはChart CustomAxesコレクション内の最初の軸を解放/削除します。

Series1.CustomVertAxis := nil;
Chart1.CustomAxes.Items[0].Free;

11

 

Q.対数の基数を2に設定できますか?

2005/12/07

A.はい。軸のLogarithmicBaseを2に設定するだけです。

Chart1.BottomAxis.LogarithmicBase := 2;

10

 

Q.軸ラベルの指数形式を変更するにはどうすればいいですか?

2005/12/07

A.軸のLabelsExponentプロパティをtrueに設定してください。同時に軸のAxisValueFormatプロパティをx10を含む文字列形式に設定してください。TeeChartは内部的にx10文字以降のテキストを上付きにします。

Chart1.LeftAxis.AxisValuesFormat = '#,0 "x10" E+0';
Chart1.LeftAxis.LabelsExponent := True;

9

 

Q.軸と軸タイトルの間隔を設定するにはどうすればいいですか?

2005/12/07

A.回転角度またはラベルの値によって、ラベルのサイズが完全に計算されません。この間隔をピクセルの固定値にするには、軸のLabelsSizeプロパティを設定できます。

Delphi :
Chart1.LeftAxis.LabelsSize := 20; // 軸ラベルに20 ピクセル
C++Builder :
Chart1->LeftAxis->LabelsSize = 20;

8

 

Q.軸の小さな値が適切に表示されません。

2005/12/07

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

非常に小さな値(例:1E-09 )の場合、値の精度が3デシマル(###)以上の場合、上記の書式文字列は常に同じ形式を返します。従って、これを適切な書式指定子に変更するか、これを空に設定してください。

Delphi :
Chart1.LeftAxis.AxisValuesFormat := '0.###################';
C++Builder :
Chart1->LeftAxis->AxisValuesFormat = "0.###################";

7

 

Q.カスタム軸を使用しています。この軸外にポイントをクリッピングする方法はありますか?

2005/12/07

A.TChart.ChartRectの矩形外の全ポイントがクリッピングされます。ChartRect()の値をSeriesの OnBeforeDrawValuesイベントでRect()値に変更することができます。

Delphi :

Chart1.ChartRect := Rect(100,100,250,250); {この矩形外に全ポイントをクリッピングする}
C++Builder :
Chart1->ChartRect = Rect(100,100,250,250);

6

 

Q.カスタム軸がズームできません。解決法は?

2005/12/07

A.カスタム軸では自動的にズームを行いません。しかし、チャートのOnZoomイベントおよびOnUndoZoomイベントでズームインやズームアウト(例:軸スケールの変更)することができます。

Delphi :

procedure TForm1.FormCreate(Sender: TObject);
var tmp: TChartAxis;
begin
  Series1.FillSampleValues(20);
  tmp := (Chart1.CustomAxes.Add as TChartAxis);
  tmp.OtherSide:=true;
  tmp.Horizontal:=false;
  tmp.PositionPercent:=20;
  Series1.CustomVertAxis:=tmp;
end;
procedure TForm1.Chart1Zoom(Sender: TObject);
begin
  With Series1.GetVertAxis
    SetMinMax(CalcPosPoint(Chart1.IZoom.Y1),CalcPosPoint(Chart1.IZoom.Y0));
end;
procedure TForm1.Chart1UndoZoom(Sender: TObject);
begin
  Series1.GetVertAxis.Automatic:=true;
end;

C++Builder
:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  TChartAxis* tmp=dynamic_cast(TChartAxis*)Chart1->CustomAxes->Add();
  tmp->OtherSide =true;
  tmp->Horizontal =false;
  tmp->PositionPercent=20;
  Series1->FillSampleValues(20);
  Series1->CustomVertAxis=tmp;
}

void __fastcall TForm1::Chart1Zoom(TObject *Sender)
{
  Series1->GetVertAxis->SetMinMax(Series1->GetVertAxis->CalcPosPoint(Chart1->IZoom->Y1),
  Series1->GetVertAxis->CalcPosPoint(Chart1->IZoom->Y0));
}

void __fastcall TForm1::Chart1UndoZoom(TObject *Sender)
{
  Series1->GetVertAxis->Automatic=true;
}

5

 

Q.指数形式で軸ラベルを設定するにはどうすればいいですか?

2005/12/07

A.Delphi(またはC++ Builder)の書式指定子を使用してください。

Delphi :

Chart1.BottomAxis.AxisValuesFormat := '0.0E+';
C++Builder :
Chart1->BottomAxis->AxisValuesFormat= "0.0E+";

また、指数を上付きに移動したい場合、TChartAxis.LabelsExponentプロパティをTrueに設定してください。
;

4

 

Q.すべての軸ラベルを表示するにはどうすればいいですか?

2005/12/07

A.デフォルトでは、軸は一部のラベルを非表示にしてラベルが重ならないようにします。従って、ラベルを描画するために十分な領域ができます。LabelsSeparationプロパティをゼロに設定して、この機能を無効にすることができます。す。

Delphi :
Chart1.BottomAxis.LabelsSeparation := 0;
C++Builder :
Chart1->BottomAxis->LabelsSeparation=0;

重なり合わないようにする他の方法は、軸ラベルの回転角度を90度に設定してラベルを垂直表示にすることです。
Delphi :
Chart1.BottomAxis.LabelsAngle:=90;
C++Builder :
Chart1->BottomAxis->LabelsAngle=90;

3

 

Q.マウスを使用せずにチャートをスクロール/ズームするにはどうすればいいですか?

2005/12/07

A.ズームやスクロールは単に軸スケール(軸の最小値と最大値)を変更することです。従って、特定の軸をスクロールやズームを行うには、軸の最小値と最大値を(同時に)設定することです。一番簡単な方法はTChartAxis.SetMinMaxメソッドを使用することです。

Delphi:
w
ith Chart1.BottomAxis do
begin
  Automatic := False;
  SetMinMax(your_min_value, your_max_value);
end;

C++Builder
:
Chart1->BottomAxis->Automatic = false;
Chart1->BottomAxis->SetMinMax(your_min_value, your_max_value);

2

 

Q.サーフェス系列にdouble値を使用していますが、何も描画しません。どうしてですか?

2005/12/07

A.2つの可能性があります。double値を描画しているか、データがグリッドデータとして構成されていないかです。

1) デフォルトではTSurfaceSeriesは、y=y(x,z)関数(X値およびZ値が整数のインデックス化された値)とみなします。そうでなければ、ポイントを追加する前にこのことをTSurfaceSeriesに通知しなければなりません。これは、系列にポイントを追加する前にTSurfaceSeries.IrregularGridプロパティをtrueに設定することにより行えます。

Delphi:
var i,j: Integer;
     x,z,y: double;
Series1.IrregularGrid := True;
for i:= -5 to 5 do
  for j:= 2 to 7 do
  begin
    x := i*0.3;
    z := j*1.21;
    y := (Sqr(x)+Sqr(z))*Sin(i*0.5/Pi);
    Series1.AddXYZ(x,y,z);
  end;
end;

2) サーフェス系列の内部描画アルゴリズムは、サーフェス描画を構築するために正確なグリッドデータが必要になります。そうでなければ、代わりにTTriSurfaceSeriesを使用してください。この系列型は(Voronoiアルゴリズムを使用して)三角形の系列としてサーフェスを構築するので、グリッドデータは必要ありません。

1

 

Q.3Dでパラメータ機能を描画するにはどうすればいいですか?

2005/12/07

A.簡単な解決法はPointer.Visibleをfalseに設定したTPoint3DSeriesを使用することです。

例:
x=a*cos(phi*t), z=b*sin(phi*t), y=y(t),

パラメータ機能が描画されています。

Delphi:
var i: Integer;
x,y,z: double;
begin
  point3DSeries1.Pointer.Visible := False;
  point3DSeries1.LinePen.Width := 2;
  point3DSeries1.LinePen.Color := point3DSeries1.Color;
  // plot from time=0 to time = 100
  for i := 0 to 100 do
  begin
    x := 10*cos(0.5*i/Pi);
    z := 20*sin(0.5*i/Pi);
    y := i*0.5;
    Series1.AddXYZ(x,y,z);
  end;
end;

C++Builder:
double x,y,z;
point3DSeries1->Pointer->Visible = false;
point3DSeries1->LinePen->Width = 2;
point3DSeries1->LinePen->Color = point3DSeries1->Color;
// plot from time=0 to time = 100
for(int i=0; i<100; i++)
{
  x = 10*cos(0.5*i/Pi);
  z = 20*sin(0.5*i/Pi);
  y = i*0.5;
  Series1->AddXYZ(x,y,z,"", clTeeColor);
}

Copyright (C) NEWTONE Corporation. All rights reserved.