git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@7 05c56307-c608-d34a-929d-697000501d7a
399 lines
13 KiB
ObjectPascal
399 lines
13 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;
|
|
N2: 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;
|
|
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);
|
|
private
|
|
function GetActiveChart: TcxGridChartView;
|
|
function GetActiveColumnDiagram: TcxGridChartColumnDiagram;
|
|
protected
|
|
procedure UpdateControls;
|
|
public
|
|
procedure CalculateSalesInfo;
|
|
procedure CalculateSalesInfoForQuarter(AQuarter: Integer);
|
|
function GetActiveAxis(AMenuItem: TObject): TcxGridChartColumnDiagramAxis;
|
|
property ActiveChart: TcxGridChartView read GetActiveChart;
|
|
property ActiveColumnDiagram: TcxGridChartColumnDiagram read GetActiveColumnDiagram;
|
|
end;
|
|
|
|
var
|
|
frmMain: TfrmMain;
|
|
|
|
implementation
|
|
|
|
uses
|
|
dxOffice11, 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
|
|
Result := ActiveChart.ActiveDiagram as TcxGridChartColumnDiagram;
|
|
end;
|
|
|
|
procedure TfrmMain.UpdateControls;
|
|
var
|
|
AChart: TcxGridChartView;
|
|
AColumnDiagram: TcxGridChartColumnDiagram;
|
|
begin
|
|
AChart := ActiveChart;
|
|
miView.Enabled := AChart <> nil;
|
|
if AChart = nil then Exit;
|
|
AColumnDiagram := ActiveColumnDiagram;
|
|
|
|
// view
|
|
if AChart.DiagramColumn.Active then
|
|
miColumnDiagram.Checked := True
|
|
else
|
|
miBarDiagram.Checked := True;
|
|
miTitlePosition[Ord(AChart.Title.Position)].Checked := True;
|
|
miLegendPosition[Ord(AChart.Legend.Position)].Checked := True;
|
|
miLegendBorder.Checked := AChart.Legend.GetBorder = lbSingle;
|
|
|
|
// diagram
|
|
miValueCaptionPosition[Ord(AColumnDiagram.Values.CaptionPosition)].Checked := True;
|
|
// category axis
|
|
miCategoryAxisVisible.Checked := AColumnDiagram.AxisCategory.Visible;
|
|
miCategoryAxisGridLines.Checked := AColumnDiagram.AxisCategory.GridLines;
|
|
miCategoryAxisTickMarkKind[Ord(AColumnDiagram.AxisCategory.TickMarkKind)].Checked := True;
|
|
miCategoryAxisTickMarkLabels.Checked := AColumnDiagram.AxisCategory.TickMarkLabels;
|
|
miCategoryAxisCategoriesInReverseOrder.Checked := AColumnDiagram.AxisCategory.CategoriesInReverseOrder;
|
|
miCategoryAxisValueAxisAtMaxCategory.Checked := AColumnDiagram.AxisCategory.ValueAxisAtMaxCategory;
|
|
miCategoryAxisValueAxisBetweenCategories.Checked := AColumnDiagram.AxisCategory.ValueAxisBetweenCategories;
|
|
// value axis
|
|
miValueAxisVisible.Checked := AColumnDiagram.AxisValue.Visible;
|
|
miValueAxisGridLines.Checked := AColumnDiagram.AxisValue.GridLines;
|
|
miValueAxisTickMarkKind[Ord(AColumnDiagram.AxisValue.TickMarkKind)].Checked := True;
|
|
miValueAxisTickMarkLabels.Checked := AColumnDiagram.AxisValue.TickMarkLabels;
|
|
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.ValueCount := 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): TcxGridChartColumnDiagramAxis;
|
|
begin
|
|
while (AMenuItem is TMenuItem) and
|
|
(TMenuItem(AMenuItem).Tag = 0) do
|
|
AMenuItem := TMenuItem(AMenuItem).Parent;
|
|
case ((AMenuItem as TMenuItem).Tag) of
|
|
1: Result := ActiveColumnDiagram.AxisCategory;
|
|
2: Result := ActiveColumnDiagram.AxisValue;
|
|
else
|
|
Result := nil;
|
|
end;
|
|
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.GetValueCaption(AValueIndex)]);
|
|
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);
|
|
begin
|
|
FillGradientRect(ACanvas.Handle, AViewInfo.ContentBounds, clWhite, clBlack,
|
|
Sender.GridView.DiagramColumn.Active);
|
|
ADone := True;
|
|
end;
|
|
|
|
procedure TfrmMain.grMainActiveTabChanged(Sender: TcxCustomGrid;
|
|
ALevel: TcxGridLevel);
|
|
begin
|
|
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.miLegendPositionItemClick(Sender: TObject);
|
|
begin
|
|
ActiveChart.Legend.Position := TcxGridChartPartPosition(TMenuItem(Sender).MenuIndex);
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miLegendBorderClick(Sender: TObject);
|
|
begin
|
|
if not TMenuItem(Sender).Checked then
|
|
ActiveChart.Legend.Border := lbSingle
|
|
else
|
|
ActiveChart.Legend.Border := lbNone;
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miValueCaptionPositionItemClick(Sender: TObject);
|
|
begin
|
|
ActiveColumnDiagram.Values.CaptionPosition :=
|
|
TcxGridChartColumnDiagramValueCaptionPosition(TMenuItem(Sender).MenuIndex);
|
|
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 TcxGridChartColumnDiagramAxisCategory do
|
|
CategoriesInReverseOrder := not CategoriesInReverseOrder;
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miCategoryAxisValueAxisAtMaxCategoryClick(
|
|
Sender: TObject);
|
|
begin
|
|
with GetActiveAxis(Sender) as TcxGridChartColumnDiagramAxisCategory do
|
|
ValueAxisAtMaxCategory := not ValueAxisAtMaxCategory;
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TfrmMain.miCategoryAxisValueAxisBetweenCategoriesClick(
|
|
Sender: TObject);
|
|
begin
|
|
with GetActiveAxis(Sender) as TcxGridChartColumnDiagramAxisCategory do
|
|
ValueAxisBetweenCategories := not ValueAxisBetweenCategories;
|
|
UpdateControls;
|
|
end;
|
|
|
|
end.
|