Componentes.Terceros.DevExp.../official/x.19/ExpressQuantumGrid 5/Demos/Delphi/ViewChartDemo/ViewChartDemoMain.pas
2007-09-09 11:27:22 +00:00

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.