vcl-dxchartcontrol-dot-tdxcustomchartcontrol-dot-adddiagram-1-x28-system-dot-string-x29.md
Creates a new diagram with the specified title in Delphi code.
function AddDiagram<T: TdxChartCustomDiagram>(const ACaption: string = ''): T; overload;
| Name | Type | Description |
|---|---|---|
| ACaption | string |
Optional. Specifies the created diagram’s title.
|
| Type | Description |
|---|---|
| T |
The created diagram.
|
The AddDiagram function template allows you to create diagrams of any supported type in Delphi code. To create a diagram, you need to instantiate the template with the required diagram class from the following list:
A diagram designed to display series using the axis of arguments (X-axis) and the axis of values (Y-axis). An XY diagram can plot Area, Bar, and Line series.
A diagram intended to plot Pie and Doughnut series.
You can use the Diagrams or VisibleDiagrams property to access all created diagrams by their indexes.
An AddDiagram function call raises a linker error in a C++Builder project due to Embarcadero RAD Studio® compiler and linker limitations.
To create a diagram, call the corresponding diagram class constructor as demonstrated in the code example below. Alternatively, you can call the following overloaded AddDiagram function version: AddDiagram(TdxChartDiagramClass,string)
The following code example creates an XY diagram with two Bar chart series and populates them with data in unbound mode:
uses cxDataStorage; // Declares the TcxStringValueType class
// ...
var
AXYDiagram: TdxChartXYDiagram;
AXYSeries: TdxChartXYSeries;
ADataBinding: TdxChartXYSeriesUnboundDataBinding;
begin
dxChartControl1.BeginUpdate; // Initiates the following batch change
try
AXYDiagram := dxChartControl1.AddDiagram<TdxChartXYDiagram>('DevAV Sales by Region');
AXYDiagram.Title.Appearance.FontOptions.Size := 20;
AXYDiagram.Axes.AxisY.Title.Text := 'Millions of Dollars';
AXYSeries := AXYDiagram.AddSeries('2018'); // Creates a new XY series with the caption "2018"
AXYSeries.DataBindingClass := TdxChartXYSeriesUnboundDataBinding; // Selects the unbound data access mode
ADataBinding := AXYSeries.DataBinding as TdxChartXYSeriesUnboundDataBinding;
ADataBinding.ArgumentField.ValueTypeClass := TcxStringValueType; // Selects the string data type
AXYSeries.ViewClass := TdxChartXYSeriesBarView; // Selects the Bar series View
AXYSeries.Points.Add('Asia', 4.2372);
AXYSeries.Points.Add('Australia', 1.7871);
AXYSeries.Points.Add('Europe', 3.0884);
AXYSeries.Points.Add('North America', 3.4855);
AXYSeries.Points.Add('South America', 1.6027);
AXYSeries.View.ValueLabels.Visible := True; // Displays value labels on bars
AXYSeries := AXYDiagram.AddSeries('2019'); // Creates a new XY series with the caption "2019"
AXYSeries.DataBindingClass := TdxChartXYSeriesUnboundDataBinding; // Selects the unbound data access mode
ADataBinding := AXYSeries.DataBinding as TdxChartXYSeriesUnboundDataBinding;
ADataBinding.ArgumentField.ValueTypeClass := TcxStringValueType; // Selects the string data type
AXYSeries.ViewClass := TdxChartXYSeriesBarView; // Selects the Bar series View
AXYSeries.Points.Add('Asia', 4.7685);
AXYSeries.Points.Add('Australia', 1.9576);
AXYSeries.Points.Add('Europe', 3.3579);
AXYSeries.Points.Add('North America', 3.7477);
AXYSeries.Points.Add('South America', 1.8237);
AXYSeries.View.ValueLabels.Visible := True; // Displays value labels on bars
finally
dxChartControl1.EndUpdate; // Calls EndUpdate regardless of the batch operation's success
end;
end;
#include "cxDataStorage.hpp" // Declares the TcxStringValueType class
// ...
TdxChartXYDiagram *AXYDiagram;
TdxChartXYSeries *AXYSeries;
TdxChartXYSeriesUnboundDataBinding *ADataBinding;
// ...
dxChartControl1->BeginUpdate(); // Initiates the following batch change
try
{
AXYDiagram = new TdxChartXYDiagram(dxChartControl1->Owner);
AXYDiagram->SetParentComponent(dxChartControl1);
AXYDiagram->Title-Text = "DevAV Sales by Region";
AXYDiagram->Title->Appearance->FontOptions->Size = 20;
AXYDiagram->Axes->AxisY->Title->Text = "Millions of Dollars";
AXYSeries = AXYDiagram->AddSeries("2018"); // Creates a new XY series with the caption "2018"
// Selects the unbound data access mode
AXYSeries->DataBindingClass = __classid(TdxChartXYSeriesUnboundDataBinding);
AXYSeries->ViewClass = __classid(TdxChartXYSeriesBarView); // Selects the Bar series View
ADataBinding = dynamic_cast<TdxChartXYSeriesUnboundDataBinding*>(AXYSeries->DataBinding);
// Selects the string data type for arguments
ADataBinding->ArgumentField->ValueTypeClass = __classid(TcxStringValueType);
AXYSeries->Points->Add("Asia", 4.2372);
AXYSeries->Points->Add("Australia", 1.7871);
AXYSeries->Points->Add("Europe", 3.0884);
AXYSeries->Points->Add("North America", 3.4855);
AXYSeries->Points->Add("South America", 1.6027);
AXYSeries->View->ValueLabels->Visible = true; // Displays value labels on bars
AXYSeries = AXYDiagram->AddSeries("2019"); // Creates a new XY series with the caption "2019"
// Selects the unbound data access mode
AXYSeries->DataBindingClass = __classid(TdxChartXYSeriesUnboundDataBinding);
AXYSeries->ViewClass = __classid(TdxChartXYSeriesBarView); // Selects the Bar series View
ADataBinding = dynamic_cast<TdxChartXYSeriesUnboundDataBinding*>(AXYSeries->DataBinding);
// Selects the string data type for arguments
ADataBinding->ArgumentField->ValueTypeClass = __classid(TcxStringValueType);
AXYSeries->Points->Add("Asia", 4.7685);
AXYSeries->Points->Add("Australia", 1.9576);
AXYSeries->Points->Add("Europe", 3.3579);
AXYSeries->Points->Add("North America", 3.7477);
AXYSeries->Points->Add("South America", 1.8237);
AXYSeries->View->ValueLabels->Visible = true; // Displays value labels on bars
}
__finally
{
dxChartControl1->EndUpdate(); // Calls EndUpdate regardless of the batch operation's success
}
// ...
To delete a diagram, release it directly in code (call the Free procedure in Delphi or use the delete keyword in C++Builder).
See Also
TdxCustomChartControl.AddDiagram(dxChartCore.TdxChartDiagramClass,System.String) Function
TdxCustomChartControl.DiagramCount Property