QNo.
|
Q.質問
|
日付
|
A.回答
|
64
|
Q.旧バージョンを使用して作成したプロジェクトをバージョンJPに変更してコンパイル(メイク)するとエラーが発生します。どうすればよいですか?
|
2013/09/24
|
A.
1.未定義のエラー
(1)バージョン7以下からの移行
次の箇所を変更してください。
GotoURL --> TeeGotoURL
C++Builderは#includeにTeeProcs.hppを、Delphiはuses節にTeeProcs(XE2以降はVCLTee.TeeProcs)を追加してください。
Tee_PieShadowColor --> Tee_CircledShadowColor
(2)バージョン8からの移行
TeeUseMouseWheel --> Chart1.Panning.MouseWheel
Chartの名称がChart1以外の場合はその名称に変更して対応してください。
2.コンパイルおよびリンクエラー
C++Builderをご利用の場合:
(1)NO_STRICT 条件定義の削除を行ってください。
(2)libファイルやbpiファイルの名称がプロジェクトファイル(cbproj)内に含まれておりますので、その部分の名称をバージョンJP用に変更してください。
(3)XE2以降をご利用の場合、TeeChartで提供しているユニットの #pragma link の部分の先頭に"VCLTee."を付加してください。
|
63
|
Q.OpenGLは日本語に対応していますか?
|
2013/09/24
|
A.いいえ、対応していません。英数字のみの対応となります。
|
62
|
Q.実行時にTeeCommanderのボタンのヒントが日本語にならない場合があるのですが?
|
2013/09/24
|
A.TeeSetJapaneseを実行した後で、該当するプロパティを設定してください。
Delphi :
uses TeeProCo, TeeJapanese; // XE2以降でVCLの場合は uses VCLTee.TeeProCo, VCLTee.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;
|
61
|
Q.ボックスプロット系列のアルゴリズムをカスタマイズしたいのですが、ボックスプロットのパラメータを使用してカスタマイズするにはどうすればいいですか?
|
2013/09/24
|
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;
|
60
|
Q.昇順/降順で系列値を表示する方法は?
|
2013/09/24
|
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;
|
59
|
Q.チャートに表示するポイント範囲を指定する方法は?
たとえば、系列に50ポイント追加した場合、34から41ポイントのみを表示します。
|
2013/09/24
|
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;
}
|
58
|
Q.系列を使用する場合、NULL値が常にゼロで表示されます。回避方法は?
|
2013/09/24
|
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;
|
57
|
Q.系列に追加した順番でポイントを接続したいのですが、TeeChartは昇順のXValuesで接続するようです。
|
2013/09/24
|
A.各ポイントに異なる新しいX座標を割り当てるには、FillSequenceメソッドを呼び出します。
Series.XValues.Order:=loAscendingは、線でポイントを接続するためのデフォルトの設定です。別の方法としては、下記のコードを使用して、「線の描画」の順番を簡単に変更できます。
Series.XValues.Order:=loNone;
|
56
|
Q.系列のポイントを削除した後の空間を削除する方法は?
|
2013/09/24
|
A.各ポイントに異なる新しいX座標を割り当てるには、FillSequenceメソッドを呼び出します。
例:
Series1.Delete( 3 );
Series1.XValues.FillSequence;
|
55
|
Q.チャートにNULL値を追加する方法は?
|
2013/09/24
|
A.系列値に「null」ポイントを追加するには、AddNullメソッドかAddNullXYメソッドが使用できます。
TeeChartでは、「null」ポイントはValueColorプロパティがclNoneに設定されている「一般」ポイントとして内部的に表されます。つまり、AddNullメソッドが内部的にAddメソッドを呼び出し、ポイントの色をclNoneに設定します。従って、「null」ポイントはX値やY値を持っています。
AddNullXYメソッドは、特定のX値やY値を設定してnullポイントを追加することができます。
|
54
|
Q.チャート系列にすべての値の合計を表示するにはどうすればいいですか?
|
2013/09/24
|
A.X、Y、またはTChartValueListの合計を計算するためには、TChartValueList.TotalメソッドかTotalABSメソッドを使用することができます。
|
53
|
Q.系列から別の系列に値をコピーするにはどうすればいいですか?
|
2013/09/24
|
A.2種類の方法があります。
1. 1つは、2番目の系列のデータソースを最初の系列に設定することです。
dstSeries.DataSource := srcSeries ;
2. もう1つは、AssignValuesメソッドを呼び出すことです。
dstSeries.AssignValues(srcSeries);
|
52
|
Q.チャートエディタに既に登録されている系列を表示しないようにするには、どのように登録を解除したらいいですか?
|
2013/09/24
|
A.ギャラリに表示される系列は"uses"ユニットで制御されます。ユニットがプロジェクトで使用される場合、そのユニットで登録された系列はギャラリ上に表示されます。
次の例を行うことにより、系列はギャラリに表示される前に「登録を解除」することができます。
procedure TForm1.FormCreate(Sender: TObject);
begin
// TLineSeriesやTBarSeriesを非表示にする
UnRegisterTeeSeries([TLineSeries,TBarSeries]);
end;
|
51
|
Q.独自の系列をチャートエディタダイアログに表示するにはどのように登録すればいいですか?
|
2013/09/24
|
A.カスタム系列コードの終わりに下記の構文を追加するだけで行えます。
initialization
RegisterTeeSeries(TYourSeriesClass, @YourSeriesName, @TeeMsg_GalleryExtended,2);
RegisterTeeSeriesルーチンは次のパラメータを使用します。
ASeriesClass:登録される系列クラス。
AGaleryPage:系列を表示するギャラリタブの位置
ANumGalerySeries:ギャラリ用のランダムな系列数
|
50
|
Q.実行時に系列の順番を変更するにはどうすればいいですか?
|
2013/09/24
|
A.系列はChart1.SeriesListのTListオブジェクト内の系列と同じ順番で描画されます。ChartのSeriesDownメソッドやSeriesUpメソッドを使用して、系列を前後に移動することができます。
|
49
|
Q.コードで系列型を変更するにはどうすればいいですか?
|
2013/09/24
|
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));
|
48
|
Q.TQRChartに直接チャートの定義を保存/読み込むにはどうすればいいですか?
|
2013/09/24
|
A.下記のコードが使用できます。
例:
uses TeeStore; // XE2以降でVCLの場合は uses VCLTee.TeeStore;
procedure TForm1.btnSaveClick(Sender: TObject);
begin
SaveChartToFile(QRChart1.Chart,'c:\tmp\temptest1.tee', true, true);
end;
procedure TForm1.btnLoadClick(Sender: TObject);
var tmpChart: TCustomChart;
begin
QRChart1.Chart.Free;
tmpChart:=TChart.Create(Self);
LoadChartFromFile(tmpChart,'c:\tmp\temptest1.tee');
QRChart1.SetChart(tmpChart);
QRChart1.Chart.Parent:=QRChart1;
end;
|
47
|
Q.TQRChartに何か描画するにはどうすればいいですか?TQRChartはOnAfterDrawイベントをサポートしていないようですが?
|
2013/09/24
|
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;
}
|
46
|
Q.QuickReportの新しいバージョンにTeeChartをインストールするにはどうすればいいですか?
|
2013/09/24
|
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の実行時および設計時のパッケージのオプションを「要求があれば再構築を行う」に設定してください。
ここにTQRChartコンポーネントパッケージのリコンパイル/再インストール方法の順を追った指示があります(TeeChart JP, Quick Report v4.03, Delphi 7)。同じ指示ですが、違うパッケージ名で前のTeeChartバージョンに使用されています。
(下記パッケージ名は製品発売時のものです)
1) [コンポーネント->パッケージのインストール]に進み、リストからDclTQR97.bplパッケージを削除してください。
2) Delphi 7を終了してください。
3) (最重要!!) 「Delphiのパス検索」リストのすべてのディレクトリを検索し、古いTQRChartコンポーネントファイルをすべて削除してください。これはTQRChartコンポーネントをリコンパイルするには重要です。基本的にteeqr97.dcp, DclTQR97.dcp, TeeQr.dcu, qrtee.dcu, qrteereg.dcu, TeeQR.res, TeeQR97.bpl および DclTQR97.bplファイルを見つけて削除してください。次に、古いTQRChartファイルすべてを削除したことを100%確認できたら、次のステップに進んでください。異なるTeeChartバージョンを使用している場合、同じ指示が当てはまります。TQRChartコンポーネントパッケージをリコンパイルする「前」に、古いTQRChartコンポーネントファイルをすべて削除してください。
4) Delphi 7を起動してください。
5) 次にプロジェクトをすべて閉じてください。そして[ファイル->プロジェクトを開く]メニューに行き、Tee9QR4D7.dpkパッケージを選択してください。
6) ここで「コンパイル」ボタンをクリックしてください。パッケージが正確にコンパイルされます。エラーが出たら、下記の「トラブルシューティング」を参照してください。
7) DclTee9QR4D7.dpkパッケージを開いてください([ファイル->プロジェクトを開く]メニュー)。
8)
ここで「コンパイル」ボタンをクリックしてください。パッケージが自動的にコンパイルされます。エラーが出たら、下記の「トラブルシューティング」を参照してください。
9) コンパイルしたパッケージをコピーしてください (恐らくDelphi7\Projects\BPLディレクトリにコンパイルされましたが、実際のディレクトリはプラットフォーム設定により異なります)
。
- Tee9QR4D7.bplからWindowsSystem ディレクトリ
- DclTee9QR4D7.bplからDelphi7Bin ディレクトリ
- Tee9QR4D7.dcpからDelphi7Lib ディレクトリ
- DclTee9QR4D7.dcpからDelphi7Lib ディレクトリ
- QRTeeReg.dcu, QRTee.dcuからDelphi7Lib ディレクトリ
- すべての *.res ファイルから Delphi7Lib ディレクトリ
10) [コンポーネント->パッケージのインストール]に行き、「追加」ボタンを押し、DclTee9QR4D7.bplパッケージを選んでください(上述の指示通りに従えば、Delphi7\Binディレクトリにあります)。これでQRChartコンポーネントをQReportコンポーネントパレットにインストールされるはずです。
11) [プロジェクト->オプション->パッケージ]ダイアログを確認することを忘れないでください。新しいパッケージ名が下部の編集ボックスのリストに載っているはずです。
12) 重要:(Tee9QR4D7.dpk および DclTee9QR4D7.dpkファイルを保持しているディレクトリから)新しくリコンパイルした全*.dcuファイルをDelphi7Libディレクトリにコピーすることを忘れずに行ってください。
異なる Delphiおよび/またはTeeChartバージョンを使用している場合、同じ指示に従って、パッケージ名を変更してください。
|
45
|
Q.実行時にQuickReportでTQRChartを作成するにはどうすればいいですか?
|
2013/09/24
|
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);
}
|
44
|
Q.既存のチャートをQuickReportチャートにコピーするにはどうすればいいですか?
|
2013/09/24
|
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;
|
43
|
Q.非常に長いリボンチャートを複数ページに印刷するにはどうすればいいですか?
|
2013/09/24
|
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();
}
|
42
|
Q.色づけされた軸グリッド線が一部のプリンタで印刷されません。
|
2013/09/24
|
A.ほとんどの場合、この問題はプリンタのドライバ側にあるので、解決法は通常、新しい/別のプリンタドライバをインストールすることです。
それでも色づけされた線が印刷されない場合、ペンスタイルを無地にして色を黒に変更してみてください。
例:
Chart1.BottomAxis.Grid.Style := psDot;
Chart1.BottomAxis.Grid.Width := 0;
{ <-- try also with 1, 2, etc }
Chart1.BottomAxis.Grid.Color := clBlack;
|
41
|
Q.TWindRoseSeriesにはAddPolarメソッドがないという表示がでます。対処法は?
|
2013/09/24
|
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メソッドを追加してください。
|
40
|
Q.Chart.Series[0].Pointer.Visible:=falseと記述すると失敗します。実行時にポイントを非表示にするにはどうすればいいですか?
|
2013/09/24
|
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;
|
39
|
Q.実行時にコードでリボン系列の線のスタイル(点線、破線など)を設定したいのですが、うまくできません。
|
2013/09/24
|
A.リボン系列のLinePen.Styleプロパティを使用してください。
|
38
|
Q.リボン系列でパラメータの描画を行うにはどうすればいいですか?<
|
2013/09/24
|
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);
|
37
|
Q.DelphiおよびC++ BuilderにバンドルされているTeeChartとTeeChart Proでは何が違うのですか?
|
2013/09/24
|
A.TeeChart Proは、バンドルされているTeeChartの機能の他に多くの機能が追加されています。詳しくは下記のURLにアクセスしてください。
http://www.newtone.co.jp/producttcjp02.html
|
36
|
Q.系列リストを使用する場合、「関数」か「標準系列」かどうしたら分かりますか?
|
2013/09/24
|
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("この系列は関数型です。");
}
|
35
|
Q.多項式関数:AnswerVectorからの係数が正確ではありません。どうしてですか?
|
2013/09/24
|
A.浮動小数点をオーバーフローしないようにするには、すべてのX値とY値がX->X-XminおよびY->Y-Yminで再正常化されます。AnswerVectorは係数が再正常化された関数の係数であることを返します。
|
34
|
Q.系列に関連する関数を変更するにはどうすればいいですか?
|
2013/09/24
|
A.すべての系列はFunctionType(関数オブジェクトを返す)メソッドとSetFunctionメソッド(関数オブジェクトを割り当て/変更するために使用可能)を持っています。系列の関数を設定するには、下記のコードを使用してください。
Delphi :
Series2.SetFunction(TAverageTeeFunction.Create(Self));
Series2.DataSource := Series1;
C++Builder :
Series2->SetFunction(new
TAverageTeeFunction(this));
Series2->DataSource = Series1;
|
33
|
Q.TCandleSeries内のすべての値に異なる枠の色を設定するにはどうすればいいですか?
|
2013/09/24
|
A.簡単です。個々のポイントのプロパティを完全にカスタマイズするには、単純にTCandleSeries.OnGetPointerStyleイベントを使用するだけです。
例:
function
TForm1.Series1GetPointerStyle(Sender: TChartSeries;
ValueIndex: Integer): TSeriesPointerStyle;
begin
with (Sender as TCandleSeries) do
Pen.Color := ValueColor[ValueIndex];
end;
|
32
|
Q.XValuesがTDateTime型ではない場合、TCandleSeriesを使用できますか?
|
2013/09/24
|
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);
|
31
|
Q.Candle OHLCデータベースのチャートで週末を削除するにはどうすればいいですか?
|
2013/09/24
|
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;
|
30
|
Q.TeeChartを特定のイメージ形式にエクスポートするにはどうすればいいですか?
|
2013/09/24
|
A.いくつかの方法があります。
1.チャートイメージを特定形式にエクスポートするには、設計時にエディタを使用できます。「エクスポート」タブに登録されたエクスポート形式をすべて表示します。
注意:設計時にサポートされるエクスポート形式すべてを表示したい場合は、"TeeImage*.bpl"パッケージを「パッケージのインストール」から追加してください。なお、Delphi 2007以降は"TeeImage*.bpl"を「パッケージのインストール」で追加する 必要はありません。"DclTeePro*.bpl"パッケージを追加することにより利用できます。
2.usesセクション(もしくはinclude)に適切なエクスポートユニットを追加し、下記のようなコードを使用して、実行時に特定形式にエクスポートできます。下記のコードはチャートイメージをGIF形式にエクスポートします。
Delphi :
uses TeeGIF; // XE2以降でVCLの場合は uses VCLTee.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.実行時に拡張系列型がチャートギャラリに表示されません。
|
2013/09/24
|
A.チャートエディタは登録された系列/ツールクラスのみを表示します。設計時にデザインパッケージが読み込まれる場合、すべての系列クラスが登録され、すべての系列/ツール型がエディタに表示されます。
実行時ではこれは必要ではありません。エディタは登録された系列クラスおよび登録された系列エディタのみを表示します。すべての系列/ツールおよびエディタが実行時に表示されるかを確認するには、使用するセクションにTeeEditProユニットを追加してください。TeeEditProがすべての系列クラス、ツールクラス、エディタクラスを初期化セクションに登録します。
Delphi :
uses EditChar, TeeEditPro; // XE2以降でVCLの場合は uses VCLTee.EditChar, VCLTee.TeeEditPro;
EditChart(Self,Chart1);
C++Builder :
#include
<EditChar.hpp>
#include <TeeEditPro.hpp>
#pragma link "TeeEditPro";// XE2以降は#pragma link "VCLTee.TeeEditPro";
EditChart(this,Chart1);
|
28
|
Q.実行時にチャートエディタダイアログや印刷プレビューを表示するにはどうすればいいですか?
|
2013/09/24
|
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; // XE2以降でVCLの場合は uses VCLTee.EditChar;
EditChart(Self,Chart1);
uses TeeEdiGene; // XE2以降でVCLの場合は uses VCLTee.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; // XE2以降でVCLの場合は uses VCLTee.TeeTools;
C++Builder :
#include <TeeTools.hpp>
「チャートエディタや印刷プレビューを日本語で表示する場合は、TeeJapaneseユニットを「usesもしくはinclude」に追加し、TeeSetJapaneseを実行してください。詳しくはプログラミングガイドの該当ページをご覧ください。
|
27
|
Q.TeeChart Proを開発環境にインストールするとDecision Cubeが無効になります。対処法は?
|
2013/09/24
|
A.TeeChart Proをインストールしたフォルダの下にあるDecision Cubeフォルダのテキストファイルをご覧ください。
|
26 |
Q.ファイルからチャートを読み込む場合、系列のデータソースが復元されません。どうしてですか?
|
2013/09/24
|
A.これは、TeeChartの保存/読み込み操作での制限です。Series DataSource(s)プロパティが保存できず、正確に復元されません。この問題の対処法は、LoadChartFromFileまたはLoadChartFromStreamルーチンの呼び出しの後にコードで系列を適切なデータソースに再接続してください。
//
フィールドオブジェクトではなく、文字列としてのフィールド名
LoadChartFromFile(TCustomChart(DBChart1), 'c:tempchart.tee');
DBChart1.Series[0].DataSource := Table1;
DBChart1.Series[0].CheckDataSource;
|
25
|
Q.系列のポイントラベルとして計算されたフィールドを使用できますか?
|
2013/09/24
|
A.もちろんできます。下位のTFieldが対応します。フィールドは、コードによって設計時または実行時に系列の値リストに接続することができます。
//
フィールドオブジェクトではなく、文字列としてのフィールド名
Series1.XLabelsSource := 'MyCalcFieldName';
|
24
|
Q.単一テーブルのレコードの多数フィールドから値を描画するにはどうすればいいですか?
|
2013/09/24
|
A.設計時と実行時に(DBChartまたはQRChartを使用して)プロパティを設定する2つの方法があります。
Series1.YValues.ValueSource
:= 'MyField1;MyField2;MyField3';
{セミコロン";"でフィールドを区切る }
Series1.DataSource := Table1;
|
23
|
Q.TChart.Canvasのピクセル色を取得するにはどうすればいいですか?
|
2013/09/24
|
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.チャートに特別なものを描くにはどうすればいいですか?
|
2013/09/24
|
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.チャートの系列の最大数はいくつですか?
|
2013/09/24
|
A.制限はございませんが、実際には、PCのメモリに制限される問題があります。
|
20
|
Q.解像度が低い場合、TeeChartは系列の数を縮小しますか?
|
2013/09/24
|
A.いいえ。解像度が低い(640x480)場合、すべてのポイントを描画するピクセルが不十分で発生するかもしれませんが、内部的に系列数や表示されるポイント数を制限しません。
|
19
|
Q.チャートの定義をファイルに保存する方法と、チャートの定義をファイルから読み込む方法は?
|
2013/09/24
|
A.ファイルやストリームへ(ファイルやストリームから)保存/読み込みするためには、TeeStore.pas ユニットのSaveChartToFile, SaveChartToXMLFile, LoadChartFromFile および SaveChartToStream, SaveChartToXMLStream, 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.チャートの背景イメージを削除する方法は?
|
2013/09/24
|
A.次のコードで背景イメージを削除できます。
Delphi :
Chart1.BackImage.Assign(nil);
C++Builder :
Chart1->BackImage->Assign(NULL);
|
17
|
Q.別のチャートにチャートをコピーする方法は?
|
2013/09/24
|
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.バーが正確に積み重ねられません。どうしてですか?
|
2013/09/24
|
A.すべての系列が同じ数のポイントを持っており、更に重要なことはすべての系列のX値が一致している場合、積み重ねアルゴリズムが正確に行われます。
この条件から1つでも欠落すると、値は正確に積み重ねられません。
もし、表示するポイント数が他の系列よりも少ない場合は、AddNullメソッドかAddNullXYメソッドを使用してNullポイントを追加してポイント数を合わせる事で正確に積み重ねることができます。
|
15
|
Q.ヒストグラムとしてバー系列を使用するにはどうすればいいですか?
|
2013/09/24
|
A.ヒストグラム系列(THistogramSeries)をご利用ください。
|
14
|
Q.バーの枠を制御するにはどうすればいいですか?
|
2013/09/24
|
A.BarPenプロパティで枠を制御できます。
Delphi :
Series1.BarPen.Visible := True;
Series1.BarPen.Width := 2;
C++Builder :
Series1->BarPen->Visible = true;
Series1->BarPen->Width = 2;
|
13
|
Q.チャート外かどうかに関わらずバー系列のバーをすべて描画したいのですがどうすればいいですか?
|
2013/09/24
|
A.バー系列のCalcVisiblePointsプロパティをfalseに設定してください。このプロパティがfalseの場合、系列はチャートの内側か外側かを計算しません。
Delphi :
Series1.CalcVisiblePoints := False;
C++Builder :
Series1->CalcVisiblePoints = false;
|
12
|
Q.カスタム軸を追加/削除するにはどうすればいいですか?
|
2013/09/24
|
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に設定できますか?
|
2013/09/24
|
A.はい。軸のLogarithmicBaseを2に設定するだけです。
Chart1.BottomAxis.LogarithmicBase := 2;
|
10
|
Q.軸ラベルの指数形式を変更するにはどうすればいいですか?
|
2013/09/24
|
A.軸のLabelsExponentプロパティをtrueに設定してください。同時に軸のAxisValueFormatプロパティをx10を含む文字列形式に設定してください。TeeChartは内部的にx10文字以降のテキストを上付きにします。
Chart1.LeftAxis.AxisValuesFormat := '#,0 "x10" E+0';
Chart1.LeftAxis.LabelsExponent := True;
|
9
|
Q.軸と軸タイトルの間隔を設定するにはどうすればいいですか?
|
2013/09/24
|
A.回転角度またはラベルの値によって、ラベルのサイズが完全に計算されません。この間隔をピクセルの固定値にするには、軸のLabelsSizeプロパティを設定できます。
Delphi :
Chart1.LeftAxis.LabelsSize := 20; // 軸ラベルに20 ピクセル
C++Builder :
Chart1->LeftAxis->LabelsSize = 20;
|
8
|
Q.軸の小さな値が適切に表示されません。
|
2013/09/24
|
A.軸ラベルのデフォルトの書式文字列は次の通りです。 #,##0.###
非常に小さな値(例:1E-09 )の場合、値の精度が3デシマル(###)以上の場合、上記の書式文字列は常に同じ形式を返します。従って、これを適切な書式指定子に変更するか、これを空に設定してください。
Delphi :
Chart1.LeftAxis.AxisValuesFormat := '0.###################';
C++Builder :
Chart1->LeftAxis->AxisValuesFormat = "0.###################";
|
7
|
Q.カスタム軸を使用しています。この軸外にポイントをクリッピングする方法はありますか?
|
2013/09/24
|
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.カスタム軸がズームできません。解決法は?
|
2013/09/24
|
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 do begin
SetMinMax(CalcPosPoint(Chart1.Zoom.Y1),CalcPosPoint(Chart1.Zoom.Y0));
end;
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->Zoom->Y1),
Series1->GetVertAxis->CalcPosPoint(Chart1->Zoom->Y0));
}
void __fastcall TForm1::Chart1UndoZoom(TObject *Sender)
{
Series1->GetVertAxis->Automatic=true;
}
|
5
|
Q.指数形式で軸ラベルを設定するにはどうすればいいですか?
|
2013/09/24
|
A.Delphi(またはC++ Builder)の書式指定子を使用してください。
Delphi :
Chart1.BottomAxis.AxisValuesFormat := '0.0E+';
C++Builder :
Chart1->BottomAxis->AxisValuesFormat= "0.0E+";
また、指数を上付きに移動したい場合、TChartAxis.LabelsExponentプロパティをTrueに設定してください。
|
4
|
Q.すべての軸ラベルを表示するにはどうすればいいですか?
|
2013/09/24
|
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.マウスを使用せずにチャートをスクロール/ズームするにはどうすればいいですか?
|
2013/09/24
|
A.ズームやスクロールは単に軸スケール(軸の最小値と最大値)を変更することです。従って、特定の軸をスクロールやズームを行うには、軸の最小値と最大値を(同時に)設定することです。一番簡単な方法はTChartAxis.SetMinMaxメソッドを使用することです。
Delphi:
with 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値を使用していますが、何も描画しません。どうしてですか?
|
2013/09/24
|
A.2つの可能性があります。double値を描画しているか、データがグリッドデータとして構成されていないかです。
1) デフォルトではTSurfaceSeriesは、y=y(x,z)関数(X値およびZ値が整数のインデックス化された値)とみなします。そうでなければ、ポイントを追加する前にこのことをTSurfaceSeriesに通知しなければなりません。これは、系列にポイントを追加する前にTSurfaceSeries.IrregularGridプロパティをtrueに設定することにより行えます。
Delphi:
var i,j: Integer;
x,z,y: double;
begin
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でパラメータ機能を描画するにはどうすればいいですか?
|
2013/09/24
|
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;
point3DSeries1.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;
point3DSeries1->AddXYZ(x,y,z,"", clTeeColor);
}
|