git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@8 05c56307-c608-d34a-929d-697000501d7a
733 lines
25 KiB
ObjectPascal
733 lines
25 KiB
ObjectPascal
unit ViewChartDemoMain;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
|
|
Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
|
|
cxDataStorage, cxEdit, DB, cxDBData, cxGridChartView, cxGridDBChartView,
|
|
cxGridCustomTableView, cxGridTableView, cxGridDBTableView, DBTables,
|
|
cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGrid, cxTimeEdit,
|
|
cxImageComboBox, ImgList, cxLookAndFeels, Menus, StdCtrls;
|
|
|
|
type
|
|
TfrmMain = class(TForm)
|
|
tvData: TcxGridDBTableView;
|
|
grMainLevel1: TcxGridLevel;
|
|
grMain: TcxGrid;
|
|
dsOrders: TDataSource;
|
|
tblOrders: TTable;
|
|
grMainLevel2: TcxGridLevel;
|
|
chvSales: TcxGridDBChartView;
|
|
qrSales: TQuery;
|
|
dsSales: TDataSource;
|
|
tblOrdersID: TAutoIncField;
|
|
tblOrdersCustomerID: TIntegerField;
|
|
tblOrdersProductID: TIntegerField;
|
|
tblOrdersPurchaseDate: TDateTimeField;
|
|
tblOrdersTime: TDateTimeField;
|
|
tblOrdersPaymentType: TStringField;
|
|
tblOrdersPaymentAmount: TCurrencyField;
|
|
tblOrdersDescription: TMemoField;
|
|
tblOrdersQuantity: TIntegerField;
|
|
tblProducts: TTable;
|
|
tblOrdersProductName: TStringField;
|
|
tblCustomers: TTable;
|
|
dbMain: TDatabase;
|
|
tblOrdersCustomer: TStringField;
|
|
tvDataID: TcxGridDBColumn;
|
|
tvDataPurchaseDate: TcxGridDBColumn;
|
|
tvDataPaymentType: TcxGridDBColumn;
|
|
tvDataPaymentAmount: TcxGridDBColumn;
|
|
tvDataQuantity: TcxGridDBColumn;
|
|
tvDataProductName: TcxGridDBColumn;
|
|
tvDataCompany: TcxGridDBColumn;
|
|
chvSalesByQuarter: TcxGridChartView;
|
|
chvSalesByQuarterSeries1: TcxGridChartSeries;
|
|
chvSalesByQuarterSeries2: TcxGridChartSeries;
|
|
chvSalesByQuarterSeries3: TcxGridChartSeries;
|
|
chvSalesByQuarterSeries4: TcxGridChartSeries;
|
|
grMainLevel3: TcxGridLevel;
|
|
qrSalesByQuarter: TQuery;
|
|
chvSalesSeries1: TcxGridDBChartSeries;
|
|
PaymentTypeImages: TImageList;
|
|
LookAndFeelController: TcxLookAndFeelController;
|
|
mmMain: TMainMenu;
|
|
miFile: TMenuItem;
|
|
miExit: TMenuItem;
|
|
miAbout: TMenuItem;
|
|
cxStyleRepository1: TcxStyleRepository;
|
|
cxStyle1: TcxStyle;
|
|
cxStyle2: TcxStyle;
|
|
cxStyle3: TcxStyle;
|
|
cxStyle4: TcxStyle;
|
|
miColumnDiagram: TMenuItem;
|
|
miBarDiagram: TMenuItem;
|
|
N1: TMenuItem;
|
|
miView: TMenuItem;
|
|
miTitlePosition: TMenuItem;
|
|
miLegendPosition: TMenuItem;
|
|
miLegendBorder: TMenuItem;
|
|
miValueCaptionPosition: TMenuItem;
|
|
miCategoryAxis: TMenuItem;
|
|
miCategoryAxisVisible: TMenuItem;
|
|
miCategoryAxisTickMarkLabels: TMenuItem;
|
|
miCategoryAxisTickMarkKind: TMenuItem;
|
|
miCategoryAxisGridLines: TMenuItem;
|
|
miTitlePositionDefault: TMenuItem;
|
|
miTitlePositionNone: TMenuItem;
|
|
miTitlePositionLeft: TMenuItem;
|
|
miTitlePositionTop: TMenuItem;
|
|
miTitlePositionRight: TMenuItem;
|
|
miTitlePositionBottom: TMenuItem;
|
|
miLegendPositionDefault: TMenuItem;
|
|
miLegendPositionNone: TMenuItem;
|
|
miLegendPositionLeft: TMenuItem;
|
|
miLegendPositionTop: TMenuItem;
|
|
miLegendPositionRight: TMenuItem;
|
|
miLegendPositionBottom: TMenuItem;
|
|
miValueCaptionPositionNone: TMenuItem;
|
|
miValueCaptionPositionInsideBase: TMenuItem;
|
|
miValueCaptionPositionCenter: TMenuItem;
|
|
miValueCaptionPositionInsideEnd: TMenuItem;
|
|
miValueCaptionPositionOutsideEnd: TMenuItem;
|
|
miCategoryAxisTickMarkKindNone: TMenuItem;
|
|
miCategoryAxisTickMarkKindCross: TMenuItem;
|
|
miCategoryAxisTickMarkKindInside: TMenuItem;
|
|
miCategoryAxisTickMarkKindOutside: TMenuItem;
|
|
miValueAxis: TMenuItem;
|
|
miValueAxisTickMarkLabels: TMenuItem;
|
|
miValueAxisTickMarkKind: TMenuItem;
|
|
miValueAxisTickMarkKindOutside: TMenuItem;
|
|
miValueAxisTickMarkKindInside: TMenuItem;
|
|
miValueAxisTickMarkKindCross: TMenuItem;
|
|
miValueAxisTickMarkKindNone: TMenuItem;
|
|
miValueAxisGridLines: TMenuItem;
|
|
miValueAxisVisible: TMenuItem;
|
|
miCategoryAxisCategoriesInReverseOrder: TMenuItem;
|
|
miCategoryAxisValueAxisAtMaxCategory: TMenuItem;
|
|
miCategoryAxisValueAxisBetweenCategories: TMenuItem;
|
|
N3: TMenuItem;
|
|
Label1: TLabel;
|
|
miLineDiagram: TMenuItem;
|
|
miAreaDiagram: TMenuItem;
|
|
miPieDiagram: TMenuItem;
|
|
miDiagram: TMenuItem;
|
|
miLineValueCaptionPosition: TMenuItem;
|
|
miLineValueCaptionPositionNone: TMenuItem;
|
|
miLineValueCaptionPositionLeft: TMenuItem;
|
|
miLineValueCaptionPositionAbove: TMenuItem;
|
|
miLineValueCaptionPositionRight: TMenuItem;
|
|
miLineValueCaptionPositionBelow: TMenuItem;
|
|
miLineValueCaptionPositionCenter: TMenuItem;
|
|
miLineStyle: TMenuItem;
|
|
miLineStyleNone: TMenuItem;
|
|
miLineStyleSolid: TMenuItem;
|
|
miLineStyleDash: TMenuItem;
|
|
miLineStyleDot: TMenuItem;
|
|
miLineStyleDashDot: TMenuItem;
|
|
miLineStyleDashDotDot: TMenuItem;
|
|
N2: TMenuItem;
|
|
miMarkerStyle: TMenuItem;
|
|
miMarkerStyleNone: TMenuItem;
|
|
miMarkerStyleSquare: TMenuItem;
|
|
miMarkerStyleTriangle: TMenuItem;
|
|
miMarkerStyleDiamond: TMenuItem;
|
|
miMarkerStyleCircle: TMenuItem;
|
|
miValueStacking: TMenuItem;
|
|
miValueStackingNone: TMenuItem;
|
|
miValueStackingNormal: TMenuItem;
|
|
miValueStacking100Percent: TMenuItem;
|
|
miLineWidth: TMenuItem;
|
|
miLineWidth1: TMenuItem;
|
|
miLineWidth2: TMenuItem;
|
|
miLineWidth3: TMenuItem;
|
|
miLineWidth4: TMenuItem;
|
|
miLineWidth5: TMenuItem;
|
|
miMarkerSize: TMenuItem;
|
|
miMarkerSize3: TMenuItem;
|
|
miMarkerSize5: TMenuItem;
|
|
miMarkerSize7: TMenuItem;
|
|
miMarkerSize9: TMenuItem;
|
|
miMarkerSize11: TMenuItem;
|
|
miSeriesCaptions: TMenuItem;
|
|
miSeriesColumnCount: TMenuItem;
|
|
miSeriesSites: TMenuItem;
|
|
miPieValueCaptionPosition: TMenuItem;
|
|
miPieValueCaptionItems: TMenuItem;
|
|
miSeriesColumns1: TMenuItem;
|
|
miSeriesColumns2: TMenuItem;
|
|
miSeriesColumns3: TMenuItem;
|
|
miSeriesColumns4: TMenuItem;
|
|
miPieValueCaptionPositionNone: TMenuItem;
|
|
miPieValueCaptionPositionCenter: TMenuItem;
|
|
miPieValueCaptionPositionInsideEnd: TMenuItem;
|
|
miPieValueCaptionPositionOutsideEnd: TMenuItem;
|
|
miPieValueCaptionPositionOutsideEndWithLeaderLines: TMenuItem;
|
|
miPieValueCaptionItemCategory: TMenuItem;
|
|
miPieValueCaptionItemValue: TMenuItem;
|
|
miPieValueCaptionItemPercentage: TMenuItem;
|
|
cxStyle5: TcxStyle;
|
|
cxStyle6: TcxStyle;
|
|
miToolBox: TMenuItem;
|
|
N4: TMenuItem;
|
|
miToolBoxPosition: TMenuItem;
|
|
miToolBoxPositionTop: TMenuItem;
|
|
miToolBoxPositionBottom: TMenuItem;
|
|
cxStyle7: TcxStyle;
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure chvSalesByQuarterGetValueHint(Sender: TcxGridChartView;
|
|
ASeries: TcxGridChartSeries; AValueIndex: Integer;
|
|
var AHint: String);
|
|
procedure miExitClick(Sender: TObject);
|
|
procedure miAboutClick(Sender: TObject);
|
|
procedure chvSalesSeries1CustomDrawValue(Sender: TcxGridChartSeries;
|
|
ACanvas: TcxCanvas; AViewInfo: TcxGridChartDiagramValueViewInfo;
|
|
var ADone: Boolean);
|
|
procedure grMainActiveTabChanged(Sender: TcxCustomGrid;
|
|
ALevel: TcxGridLevel);
|
|
procedure miColumnDiagramClick(Sender: TObject);
|
|
procedure miBarDiagramClick(Sender: TObject);
|
|
procedure miTitlePositionItemClick(Sender: TObject);
|
|
procedure miLegendPositionItemClick(Sender: TObject);
|
|
procedure miLegendBorderClick(Sender: TObject);
|
|
procedure miValueCaptionPositionItemClick(Sender: TObject);
|
|
procedure chvSalesActiveDiagramChanged(Sender: TcxGridChartView;
|
|
ADiagram: TcxGridChartDiagram);
|
|
procedure miAxisVisibleClick(Sender: TObject);
|
|
procedure miAxisGridLinesClick(Sender: TObject);
|
|
procedure miAxisTickMarkKindItemClick(Sender: TObject);
|
|
procedure miAxisTickMarkLabelsClick(Sender: TObject);
|
|
procedure miCategoryAxisCategoriesInReverseOrderClick(Sender: TObject);
|
|
procedure miCategoryAxisValueAxisAtMaxCategoryClick(Sender: TObject);
|
|
procedure miCategoryAxisValueAxisBetweenCategoriesClick(
|
|
Sender: TObject);
|
|
procedure miLineDiagramClick(Sender: TObject);
|
|
procedure miAreaDiagramClick(Sender: TObject);
|
|
procedure miPieDiagramClick(Sender: TObject);
|
|
procedure miLineValueCaptionPositionClick(Sender: TObject);
|
|
procedure miLineStyleClick(Sender: TObject);
|
|
procedure miMarkerStyleClick(Sender: TObject);
|
|
procedure miValueStackingClick(Sender: TObject);
|
|
procedure miLineWidthClick(Sender: TObject);
|
|
procedure miMarkerSizeClick(Sender: TObject);
|
|
procedure miSeriesCaptionsClick(Sender: TObject);
|
|
procedure miSeriesSitesClick(Sender: TObject);
|
|
procedure miSeriesColumnsClick(Sender: TObject);
|
|
procedure miPieValueCaptionPositionClick(
|
|
Sender: TObject);
|
|
procedure miPieValueCaptionItemClick(Sender: TObject);
|
|
procedure chvSalesDiagramAreaCustomDrawValueArea(
|
|
Sender: TcxGridChartAreaDiagram; ACanvas: TcxCanvas;
|
|
AViewInfo: TcxGridChartAreaDiagramValueViewInfo; var ADone: Boolean);
|
|
procedure chvSalesValueClick(Sender: TcxGridChartView;
|
|
ASeries: TcxGridChartSeries; AValueIndex: Integer; var AHandled: Boolean);
|
|
procedure miToolBoxClick(Sender: TObject);
|
|
procedure miToolBoxPositionClick(Sender: TObject);
|
|
procedure FormActivate(Sender: TObject);
|
|
private
|
|
function GetActiveChart: TcxGridChartView;
|
|
function GetActiveColumnDiagram: TcxGridChartColumnDiagram;
|
|
function GetActiveHistogram: TcxGridChartHistogram;
|
|
function GetActiveLineDiagram: TcxGridChartLineDiagram;
|
|
function GetActivePieDiagram: TcxGridChartPieDiagram;
|
|
protected
|
|
procedure UpdateControls;
|
|
public
|
|
procedure CalculateSalesInfo;
|
|
procedure CalculateSalesInfoForQuarter(AQuarter: Integer);
|
|
function GetActiveAxis(AMenuItem: TObject): TcxGridChartHistogramAxis;
|
|
|
|
property ActiveChart: TcxGridChartView read GetActiveChart;
|
|
property ActiveColumnDiagram: TcxGridChartColumnDiagram read GetActiveColumnDiagram;
|
|
property ActiveHistogram: TcxGridChartHistogram read GetActiveHistogram;
|
|
property ActiveLineDiagram: TcxGridChartLineDiagram read GetActiveLineDiagram;
|
|
property ActivePieDiagram: TcxGridChartPieDiagram read GetActivePieDiagram;
|
|
end;
|
|
|
|
var
|
|
frmMain: TfrmMain;
|
|
|
|
implementation
|
|
|
|
uses
|
|
dxOffice11, cxGridCommon, AboutDemoForm;
|
|
|
|
{$R *.dfm}
|
|
|
|
function TfrmMain.GetActiveChart: TcxGridChartView;
|
|
begin
|
|
if grMain.ActiveView is TcxGridChartView then
|
|
Result := TcxGridChartView(grMain.ActiveView)
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TfrmMain.GetActiveColumnDiagram: TcxGridChartColumnDiagram;
|
|
begin
|
|
if ActiveChart.ActiveDiagram is TcxGridChartColumnDiagram then
|
|
Result := TcxGridChartColumnDiagram(ActiveChart.ActiveDiagram)
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TfrmMain.GetActiveHistogram: TcxGridChartHistogram;
|
|
begin
|
|
if ActiveChart.ActiveDiagram is TcxGridChartHistogram then
|
|
Result := TcxGridChartHistogram(ActiveChart.ActiveDiagram)
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TfrmMain.GetActiveLineDiagram: TcxGridChartLineDiagram;
|
|
begin
|
|
if ActiveChart.ActiveDiagram is TcxGridChartLineDiagram then
|
|
Result := TcxGridChartLineDiagram(ActiveChart.ActiveDiagram)
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TfrmMain.GetActivePieDiagram: TcxGridChartPieDiagram;
|
|
begin
|
|
if ActiveChart.ActiveDiagram is TcxGridChartPieDiagram then
|
|
Result := TcxGridChartPieDiagram(ActiveChart.ActiveDiagram)
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
procedure TfrmMain.UpdateControls;
|
|
var
|
|
AChart: TcxGridChartView;
|
|
AHistogram: TcxGridChartHistogram;
|
|
AColumnDiagram: TcxGridChartColumnDiagram;
|
|
ALineDiagram: TcxGridChartLineDiagram;
|
|
APieDiagram: TcxGridChartPieDiagram;
|
|
ACaptionItem: TcxGridChartPieDiagramValueCaptionItem;
|
|
begin
|
|
AChart := ActiveChart;
|
|
miView.Enabled := AChart <> nil;
|
|
miDiagram.Enabled := miView.Enabled;
|
|
if AChart = nil then Exit;
|
|
|
|
{ view }
|
|
if AChart.DiagramColumn.Active then
|
|
miColumnDiagram.Checked := True
|
|
else
|
|
if AChart.DiagramBar.Active then
|
|
miBarDiagram.Checked := True
|
|
else
|
|
if AChart.DiagramLine.Active then
|
|
miLineDiagram.Checked := True
|
|
else
|
|
if AChart.DiagramArea.Active then
|
|
miAreaDiagram.Checked := True
|
|
else
|
|
miPieDiagram.Checked := True;
|
|
miTitlePosition[Ord(AChart.Title.Position)].Checked := True;
|
|
miLegendPosition[Ord(AChart.ActiveDiagram.Legend.Position)].Checked := True;
|
|
miLegendBorder.Checked := AChart.ActiveDiagram.Legend.GetBorder = lbSingle;
|
|
miToolBox.Checked := AChart.ToolBox.Visible <> tvNever;
|
|
miToolBoxPosition[Ord(AChart.ToolBox.Position)].Checked := True;
|
|
|
|
{ diagram }
|
|
// histogram
|
|
AHistogram := ActiveHistogram;
|
|
miCategoryAxis.Visible := AHistogram <> nil;
|
|
miValueAxis.Visible := AHistogram <> nil;
|
|
if AHistogram <> nil then
|
|
begin
|
|
// category axis
|
|
miCategoryAxisVisible.Checked := AHistogram.AxisCategory.Visible;
|
|
miCategoryAxisGridLines.Checked := AHistogram.AxisCategory.GridLines;
|
|
miCategoryAxisTickMarkKind[Ord(AHistogram.AxisCategory.TickMarkKind)].Checked := True;
|
|
miCategoryAxisTickMarkLabels.Checked := AHistogram.AxisCategory.TickMarkLabels;
|
|
miCategoryAxisCategoriesInReverseOrder.Checked := AHistogram.AxisCategory.CategoriesInReverseOrder;
|
|
miCategoryAxisValueAxisAtMaxCategory.Checked := AHistogram.AxisCategory.ValueAxisAtMaxCategory;
|
|
miCategoryAxisValueAxisBetweenCategories.Checked := AHistogram.AxisCategory.ValueAxisBetweenCategories;
|
|
// value axis
|
|
miValueAxisVisible.Checked := AHistogram.AxisValue.Visible;
|
|
miValueAxisGridLines.Checked := AHistogram.AxisValue.GridLines;
|
|
miValueAxisTickMarkKind[Ord(AHistogram.AxisValue.TickMarkKind)].Checked := True;
|
|
miValueAxisTickMarkLabels.Checked := AHistogram.AxisValue.TickMarkLabels;
|
|
end;
|
|
// column
|
|
AColumnDiagram := ActiveColumnDiagram;
|
|
miValueCaptionPosition.Visible := AColumnDiagram <> nil;
|
|
if AColumnDiagram <> nil then
|
|
miValueCaptionPosition[Ord(AColumnDiagram.Values.CaptionPosition)].Checked := True;
|
|
// line
|
|
ALineDiagram := ActiveLineDiagram;
|
|
miLineValueCaptionPosition.Visible := ALineDiagram <> nil;
|
|
miLineStyle.Visible := ALineDiagram <> nil;
|
|
miLineWidth.Visible := ALineDiagram <> nil;
|
|
miMarkerStyle.Visible := ALineDiagram <> nil;
|
|
miMarkerSize.Visible := ALineDiagram <> nil;
|
|
miValueStacking.Visible := ALineDiagram <> nil;
|
|
if ALineDiagram <> nil then
|
|
begin
|
|
miLineValueCaptionPosition[Ord(ALineDiagram.Values.CaptionPosition)].Checked := True;
|
|
miLineStyle[Ord(ALineDiagram.Values.LineStyle)].Checked := True;
|
|
miLineWidth.Find(IntToStr(ALineDiagram.Values.LineWidth)).Checked := True;
|
|
miMarkerStyle[Ord(ALineDiagram.Values.MarkerStyle)].Checked := True;
|
|
miMarkerSize.Find(IntToStr(ALineDiagram.Values.MarkerSize)).Checked := True;
|
|
miValueStacking[Ord(ALineDiagram.Values.Stacking)].Checked := True;
|
|
end;
|
|
// pie
|
|
APieDiagram := ActivePieDiagram;
|
|
miSeriesCaptions.Visible := APieDiagram <> nil;
|
|
miSeriesSites.Visible := APieDiagram <> nil;
|
|
miSeriesColumnCount.Visible := APieDiagram <> nil;
|
|
miPieValueCaptionPosition.Visible := APieDiagram <> nil;
|
|
miPieValueCaptionItems.Visible := APieDiagram <> nil;
|
|
if APieDiagram <> nil then
|
|
begin
|
|
miSeriesCaptions.Checked := APieDiagram.SeriesCaptions;
|
|
miSeriesSites.Checked := APieDiagram.SeriesSites;
|
|
miSeriesColumnCount.Enabled := APieDiagram.GetSeriesColumnCount > 0;
|
|
if miSeriesColumnCount.Enabled then
|
|
miSeriesColumnCount.Find(IntToStr(APieDiagram.GetSeriesColumnCount)).Checked := True;
|
|
miPieValueCaptionPosition[Ord(APieDiagram.Values.CaptionPosition)].Checked := True;
|
|
for ACaptionItem := Low(ACaptionItem) to High(ACaptionItem) do
|
|
miPieValueCaptionItems[Ord(ACaptionItem)].Checked := ACaptionItem in APieDiagram.Values.CaptionItems;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.miAreaDiagramClick(Sender: TObject);
|
|
begin
|
|
ActiveChart.DiagramArea.Active := True;
|
|
end;
|
|
|
|
procedure TfrmMain.CalculateSalesInfo;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 1 to 4 do
|
|
CalculateSalesInfoForQuarter(I);
|
|
end;
|
|
|
|
procedure TfrmMain.CalculateSalesInfoForQuarter(AQuarter: Integer);
|
|
const
|
|
Year = 2002;
|
|
var
|
|
AStartMonth, AFinishMonth, I: Integer;
|
|
begin
|
|
AStartMonth := (AQuarter - 1) * 3 + 1;
|
|
AFinishMonth := AQuarter * 3;
|
|
|
|
qrSalesByQuarter.Active := False;
|
|
qrSalesByQuarter.ParamByName('StartDate').AsDateTime := EncodeDate(Year, AStartMonth, 1);
|
|
qrSalesByQuarter.ParamByName('FinishDate').AsDateTime := EncodeDate(Year, AFinishMonth,
|
|
MonthDays[IsLeapYear(Year), AFinishMonth]);
|
|
qrSalesByQuarter.Active := True;
|
|
chvSalesByQuarter.ViewData.CategoryCount := qrSalesByQuarter.RecordCount;
|
|
|
|
chvSalesByQuarter.BeginUpdate;
|
|
try
|
|
I := 0;
|
|
qrSalesByQuarter.First;
|
|
while not qrSalesByQuarter.Eof do
|
|
begin
|
|
chvSalesByQuarter.ViewData.Categories[I] := qrSalesByQuarter.FieldValues['Name'];
|
|
chvSalesByQuarter.ViewData.Values[AQuarter - 1, I] := qrSalesByQuarter.FieldValues['Amount'];
|
|
qrSalesByQuarter.Next;
|
|
Inc(I);
|
|
end;
|
|
finally
|
|
chvSalesByQuarter.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
function TfrmMain.GetActiveAxis(AMenuItem: TObject): TcxGridChartHistogramAxis;
|
|
begin
|
|
while (AMenuItem is TMenuItem) and
|
|
(TMenuItem(AMenuItem).Tag = 0) do
|
|
AMenuItem := TMenuItem(AMenuItem).Parent;
|
|
case ((AMenuItem as TMenuItem).Tag) of
|
|
1: Result := ActiveHistogram.AxisCategory;
|
|
2: Result := ActiveHistogram.AxisValue;
|
|
else
|
|
Result := nil;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.FormActivate(Sender: TObject);
|
|
begin
|
|
UpdateControls; // to update menu after chart view was changed via Customization Form
|
|
end;
|
|
|
|
procedure TfrmMain.FormCreate(Sender: TObject);
|
|
begin
|
|
grMainLevel3.Active := True;
|
|
CalculateSalesInfo;
|
|
end;
|
|
|
|
procedure TfrmMain.chvSalesByQuarterGetValueHint(Sender: TcxGridChartView;
|
|
ASeries: TcxGridChartSeries; AValueIndex: Integer; var AHint: String);
|
|
begin
|
|
AHint := Format('%s sales for Q%d are %s',
|
|
[Sender.ViewData.Categories[AValueIndex], ASeries.Index + 1, ASeries.VisibleDisplayTexts[AValueIndex]]);
|
|
end;
|
|
|
|
procedure TfrmMain.chvSalesDiagramAreaCustomDrawValueArea(
|
|
Sender: TcxGridChartAreaDiagram; ACanvas: TcxCanvas;
|
|
AViewInfo: TcxGridChartAreaDiagramValueViewInfo; var ADone: Boolean);
|
|
var
|
|
AClipRegion, ARegion: TcxRegion;
|
|
begin
|
|
AClipRegion := ACanvas.GetClipRegion;
|
|
try
|
|
ARegion := AViewInfo.CreateAreaRegion;
|
|
try
|
|
ACanvas.SetClipRegion(ARegion, roIntersect, False);
|
|
FillGradientRect(ACanvas.Handle, AViewInfo.GetRealBounds, clWhite, clMedGray, True);
|
|
finally
|
|
ARegion.Free;
|
|
end;
|
|
finally
|
|
ACanvas.SetClipRegion(AClipRegion, roSet);
|
|
end;
|
|
ADone := True;
|
|
end;
|
|
|
|
procedure TfrmMain.miExitClick(Sender: TObject);
|
|
begin
|
|
Close;
|
|
end;
|
|
|
|
procedure TfrmMain.miAboutClick(Sender: TObject);
|
|
begin
|
|
ShowAboutDemoForm;
|
|
end;
|
|
|
|
procedure TfrmMain.chvSalesSeries1CustomDrawValue(
|
|
Sender: TcxGridChartSeries; ACanvas: TcxCanvas;
|
|
AViewInfo: TcxGridChartDiagramValueViewInfo; var ADone: Boolean);
|
|
var
|
|
AEndColor: TColor;
|
|
begin
|
|
if Sender.GridView.DiagramColumn.Active or Sender.GridView.DiagramBar.Active then
|
|
begin
|
|
if AViewInfo.State = gcsNone then
|
|
AEndColor := clBlack
|
|
else
|
|
AEndColor := clGray;
|
|
FillGradientRect(ACanvas.Handle, AViewInfo.ContentBounds, clWhite, AEndColor,
|
|
Sender.GridView.DiagramColumn.Active);
|
|
ADone := True;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.chvSalesValueClick(Sender: TcxGridChartView;
|
|
ASeries: TcxGridChartSeries; AValueIndex: Integer; var AHandled: Boolean);
|
|
begin
|
|
qrSales.Locate('Name', Sender.Categories.VisibleValues[AValueIndex], []);
|
|
tblOrders.Locate('ProductID', qrSales.FieldByName('ID').AsInteger, []);
|
|
grMainLevel1.Active := True;
|
|
end;
|
|
|
|
procedure TfrmMain.grMainActiveTabChanged(Sender: TcxCustomGrid;
|
|
ALevel: TcxGridLevel);
|
|
begin
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miLineDiagramClick(Sender: TObject);
|
|
begin
|
|
ActiveChart.DiagramLine.Active := True;
|
|
end;
|
|
|
|
procedure TfrmMain.miLineStyleClick(Sender: TObject);
|
|
begin
|
|
ActiveLineDiagram.Values.LineStyle := TcxGridChartLineStyle(TMenuItem(Sender).MenuIndex);
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miLineValueCaptionPositionClick(Sender: TObject);
|
|
begin
|
|
ActiveLineDiagram.Values.CaptionPosition :=
|
|
TcxGridChartLineDiagramValueCaptionPosition(TMenuItem(Sender).MenuIndex);
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miLineWidthClick(Sender: TObject);
|
|
begin
|
|
ActiveLineDiagram.Values.LineWidth := StrToInt(TMenuItem(Sender).Caption);
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miMarkerSizeClick(Sender: TObject);
|
|
begin
|
|
ActiveLineDiagram.Values.MarkerSize := StrToInt(TMenuItem(Sender).Caption);
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miMarkerStyleClick(Sender: TObject);
|
|
begin
|
|
ActiveLineDiagram.Values.MarkerStyle := TcxGridChartMarkerStyle(TMenuItem(Sender).MenuIndex);
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miColumnDiagramClick(Sender: TObject);
|
|
begin
|
|
ActiveChart.DiagramColumn.Active := True;
|
|
end;
|
|
|
|
procedure TfrmMain.miBarDiagramClick(Sender: TObject);
|
|
begin
|
|
ActiveChart.DiagramBar.Active := True;
|
|
end;
|
|
|
|
procedure TfrmMain.miTitlePositionItemClick(Sender: TObject);
|
|
begin
|
|
ActiveChart.Title.Position := TcxGridChartPartPosition(TMenuItem(Sender).MenuIndex);
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miToolBoxClick(Sender: TObject);
|
|
begin
|
|
with ActiveChart.ToolBox do
|
|
if Visible = tvNever then
|
|
Visible := tvAlways
|
|
else
|
|
Visible := tvNever;
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miToolBoxPositionClick(Sender: TObject);
|
|
begin
|
|
ActiveChart.ToolBox.Position := TcxGridChartToolBoxPosition(TMenuItem(Sender).MenuIndex);
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miLegendPositionItemClick(Sender: TObject);
|
|
begin
|
|
ActiveChart.ActiveDiagram.Legend.Position := TcxGridChartPartPosition(TMenuItem(Sender).MenuIndex);
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miLegendBorderClick(Sender: TObject);
|
|
begin
|
|
if not TMenuItem(Sender).Checked then
|
|
ActiveChart.ActiveDiagram.Legend.Border := lbSingle
|
|
else
|
|
ActiveChart.ActiveDiagram.Legend.Border := lbNone;
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miValueCaptionPositionItemClick(Sender: TObject);
|
|
begin
|
|
ActiveColumnDiagram.Values.CaptionPosition :=
|
|
TcxGridChartColumnDiagramValueCaptionPosition(TMenuItem(Sender).MenuIndex);
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miValueStackingClick(Sender: TObject);
|
|
begin
|
|
ActiveLineDiagram.Values.Stacking := TcxGridChartValuesStacking(TMenuItem(Sender).MenuIndex);
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miPieValueCaptionItemClick(Sender: TObject);
|
|
var
|
|
ACaptionItem: TcxGridChartPieDiagramValueCaptionItem;
|
|
begin
|
|
ACaptionItem := TcxGridChartPieDiagramValueCaptionItem(TMenuItem(Sender).MenuIndex);
|
|
with ActivePieDiagram.Values do
|
|
if ACaptionItem in CaptionItems then
|
|
CaptionItems := CaptionItems - [ACaptionItem]
|
|
else
|
|
CaptionItems := CaptionItems + [ACaptionItem];
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miPieValueCaptionPositionClick(Sender: TObject);
|
|
begin
|
|
ActivePieDiagram.Values.CaptionPosition :=
|
|
TcxGridChartPieDiagramValueCaptionPosition(TMenuItem(Sender).MenuIndex);
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miPieDiagramClick(Sender: TObject);
|
|
begin
|
|
ActiveChart.DiagramPie.Active := True;
|
|
end;
|
|
|
|
procedure TfrmMain.miSeriesCaptionsClick(Sender: TObject);
|
|
begin
|
|
with ActivePieDiagram do
|
|
SeriesCaptions := not SeriesCaptions;
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miSeriesColumnsClick(Sender: TObject);
|
|
begin
|
|
ActivePieDiagram.SeriesColumnCount := StrToInt(TMenuItem(Sender).Caption);
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miSeriesSitesClick(Sender: TObject);
|
|
begin
|
|
with ActivePieDiagram do
|
|
SeriesSites := not SeriesSites;
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.chvSalesActiveDiagramChanged(Sender: TcxGridChartView;
|
|
ADiagram: TcxGridChartDiagram);
|
|
begin
|
|
if Sender = ActiveChart then UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miAxisVisibleClick(Sender: TObject);
|
|
begin
|
|
with GetActiveAxis(Sender) do
|
|
Visible := not Visible;
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miAxisGridLinesClick(Sender: TObject);
|
|
begin
|
|
with GetActiveAxis(Sender) do
|
|
GridLines := not GridLines;
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miAxisTickMarkKindItemClick(Sender: TObject);
|
|
begin
|
|
GetActiveAxis(Sender).TickMarkKind := TcxGridChartHistogramTickMarkKind(TMenuItem(Sender).MenuIndex);
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miAxisTickMarkLabelsClick(Sender: TObject);
|
|
begin
|
|
with GetActiveAxis(Sender) do
|
|
TickMarkLabels := not TickMarkLabels;
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miCategoryAxisCategoriesInReverseOrderClick(
|
|
Sender: TObject);
|
|
begin
|
|
with GetActiveAxis(Sender) as TcxGridChartHistogramAxisCategory do
|
|
CategoriesInReverseOrder := not CategoriesInReverseOrder;
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miCategoryAxisValueAxisAtMaxCategoryClick(
|
|
Sender: TObject);
|
|
begin
|
|
with GetActiveAxis(Sender) as TcxGridChartHistogramAxisCategory do
|
|
ValueAxisAtMaxCategory := not ValueAxisAtMaxCategory;
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miCategoryAxisValueAxisBetweenCategoriesClick(
|
|
Sender: TObject);
|
|
begin
|
|
with GetActiveAxis(Sender) as TcxGridChartHistogramAxisCategory do
|
|
ValueAxisBetweenCategories := not ValueAxisBetweenCategories;
|
|
UpdateControls;
|
|
end;
|
|
|
|
end.
|