viewchartdemomain.cpp

来自「胜天进销存源码,国产优秀的进销存」· C++ 代码 · 共 579 行 · 第 1/2 页

CPP
579
字号
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "ViewChartDemoMain.h"
#include "AboutDemoForm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "cxClasses"
#pragma link "cxControls"
#pragma link "cxCustomData"
#pragma link "cxData"
#pragma link "cxDataStorage"
#pragma link "cxDBData"
#pragma link "cxEdit"
#pragma link "cxFilter"
#pragma link "cxGraphics"
#pragma link "cxGrid"
#pragma link "cxGridChartView"
#pragma link "cxGridCustomTableView"
#pragma link "cxGridCustomView"
#pragma link "cxGridDBChartView"
#pragma link "cxGridDBTableView"
#pragma link "cxGridLevel"
#pragma link "cxGridTableView"
#pragma link "cxImageComboBox"
#pragma link "cxLookAndFeels"
#pragma link "cxStyles"
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
TcxGridChartView* TfrmMain::GetActiveChart()
{
  if (dynamic_cast<TcxGridChartView*>(grMain->ActiveView) == 0)
    return NULL;
  else
    return (TcxGridChartView*)grMain->ActiveView;
}

TcxGridChartColumnDiagram* TfrmMain::GetActiveColumnDiagram()
{
  if (dynamic_cast<TcxGridChartColumnDiagram*>(ActiveChart->ActiveDiagram) == 0)
    return NULL;
  else
    return (TcxGridChartColumnDiagram*)ActiveChart->ActiveDiagram;
}

TcxGridChartHistogram* TfrmMain::GetActiveHistogram()
{
  if (dynamic_cast<TcxGridChartHistogram*>(ActiveChart->ActiveDiagram) == 0)
    return NULL;
  else
    return (TcxGridChartHistogram*)ActiveChart->ActiveDiagram;
}

TcxGridChartLineDiagram* TfrmMain::GetActiveLineDiagram()
{
  if (dynamic_cast<TcxGridChartLineDiagram*>(ActiveChart->ActiveDiagram) == 0)
    return NULL;
  else
    return (TcxGridChartLineDiagram*)ActiveChart->ActiveDiagram;
}

TcxGridChartPieDiagram* TfrmMain::GetActivePieDiagram()
{
  if (dynamic_cast<TcxGridChartPieDiagram*>(ActiveChart->ActiveDiagram) == 0)
    return NULL;
  else
    return (TcxGridChartPieDiagram*)ActiveChart->ActiveDiagram;
}

void TfrmMain::UpdateControls()
{
  TcxGridChartView* AChart = ActiveChart;
  miView->Enabled = AChart != NULL;
  miDiagram->Enabled = miView->Enabled;
  if (AChart == NULL) return;

  /* view */
  if (AChart->DiagramColumn->Active)
    miColumnDiagram->Checked = true;
  else
    if (AChart->DiagramBar->Active)
      miBarDiagram->Checked = true;
    else
      if (AChart->DiagramLine->Active)
        miLineDiagram->Checked = true;
      else
        if (AChart->DiagramArea->Active)
          miAreaDiagram->Checked = true;
        else
          miPieDiagram->Checked = true;
  miTitlePosition->Items[(int)AChart->Title->Position]->Checked = true;
  miLegendPosition->Items[(int)AChart->ActiveDiagram->Legend->Position]->Checked = true;
  miLegendBorder->Checked = AChart->ActiveDiagram->Legend->GetBorder() == lbSingle;
  miToolBox->Checked = AChart->ToolBox->Visible != tvNever;
  miToolBoxPosition->Items[(int)AChart->ToolBox->Position]->Checked = true;

  /* diagram */
  // histogram
  TcxGridChartHistogram* AHistogram = ActiveHistogram;
  miCategoryAxis->Visible = AHistogram != NULL;
  miValueAxis->Visible = AHistogram != NULL;
  if (AHistogram != NULL)
  {
    // category axis
    miCategoryAxisVisible->Checked = AHistogram->AxisCategory->Visible;
    miCategoryAxisGridLines->Checked = AHistogram->AxisCategory->GridLines;
    miCategoryAxisTickMarkKind->Items[(int)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->Items[(int)AHistogram->AxisValue->TickMarkKind]->Checked = true;
    miValueAxisTickMarkLabels->Checked = AHistogram->AxisValue->TickMarkLabels;
  }
  //column
  TcxGridChartColumnDiagram* AColumnDiagram = ActiveColumnDiagram;
  miValueCaptionPosition->Visible = AColumnDiagram != NULL;
  if (AColumnDiagram != NULL)
    miValueCaptionPosition->Items[(int)AColumnDiagram->Values->CaptionPosition]->Checked = true;
  // line
  TcxGridChartLineDiagram* ALineDiagram = ActiveLineDiagram;
  miLineValueCaptionPosition->Visible = ALineDiagram != NULL;
  miLineStyle->Visible = ALineDiagram != NULL;
  miLineWidth->Visible = ALineDiagram != NULL;
  miMarkerStyle->Visible = ALineDiagram != NULL;
  miMarkerSize->Visible = ALineDiagram != NULL;
  miValueStacking->Visible = ALineDiagram != NULL;
  if (ALineDiagram != NULL)
  {
    miLineValueCaptionPosition->Items[(int)ALineDiagram->Values->CaptionPosition]->Checked = true;
    miLineStyle->Items[(int)ALineDiagram->Values->LineStyle]->Checked = true;
    miLineWidth->Find(IntToStr(ALineDiagram->Values->LineWidth))->Checked = true;
    miMarkerStyle->Items[(int)ALineDiagram->Values->MarkerStyle]->Checked = true;
    miMarkerSize->Find(IntToStr(ALineDiagram->Values->MarkerSize))->Checked = true;
    miValueStacking->Items[(int)ALineDiagram->Values->Stacking]->Checked = true;
  }
  // pie
  TcxGridChartPieDiagram* APieDiagram = ActivePieDiagram;
  miSeriesCaptions->Visible = APieDiagram != NULL;
  miSeriesSites->Visible = APieDiagram != NULL;
  miSeriesColumnCount->Visible = APieDiagram != NULL;
  miPieValueCaptionPosition->Visible = APieDiagram != NULL;
  miPieValueCaptionItems->Visible = APieDiagram != NULL;
  if (APieDiagram != NULL)
  {
    miSeriesCaptions->Checked = APieDiagram->SeriesCaptions;
    miSeriesSites->Checked = APieDiagram->SeriesSites;
    miSeriesColumnCount->Enabled = APieDiagram->GetSeriesColumnCount() > 0;
    if (miSeriesColumnCount->Enabled)
      miSeriesColumnCount->Find(IntToStr(APieDiagram->GetSeriesColumnCount()))->Checked = true;
    miPieValueCaptionPosition->Items[(int)APieDiagram->Values->CaptionPosition]->Checked = true;
    for (int i = 0; i < miPieValueCaptionItems->Count; i++)
      miPieValueCaptionItems->Items[i]->Checked =
        APieDiagram->Values->CaptionItems.Contains((TcxGridChartPieDiagramValueCaptionItem)i);
  }
}

void TfrmMain::CalculateSalesInfo()
{
  for (int I = 1; I < 5; I++)
    CalculateSalesInfoForQuarter(I);
}

void TfrmMain::CalculateSalesInfoForQuarter(int AQuarter)
{
  const Year = 2002;
  int AStartMonth, AFinishMonth;

  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 - 1]);
  qrSalesByQuarter->Active = true;
  chvSalesByQuarter->ViewData->CategoryCount = qrSalesByQuarter->RecordCount;

  chvSalesByQuarter->BeginUpdate();
  try {
    int I = 0;
    qrSalesByQuarter->First();
    while (!qrSalesByQuarter->Eof) {
      chvSalesByQuarter->ViewData->Categories[I] = qrSalesByQuarter->FieldValues["Name"];
      chvSalesByQuarter->ViewData->Values[AQuarter - 1][I] = qrSalesByQuarter->FieldValues["Amount"];
      qrSalesByQuarter->Next();
      I++;
    }
  }  
  __finally {
    chvSalesByQuarter->EndUpdate();
  }
}

TcxGridChartHistogramAxis* TfrmMain::GetActiveAxis(TObject* AMenuItem)
{
  while ((dynamic_cast<TMenuItem*>(AMenuItem) != 0) && (((TMenuItem*)AMenuItem)->Tag == 0))
    AMenuItem = ((TMenuItem*)AMenuItem)->Parent;
  switch (((TMenuItem*)AMenuItem)->Tag) {
    case 1:
      return ActiveHistogram->AxisCategory;
    case 2:
      return ActiveHistogram->AxisValue;
    default:
      return NULL;
  }
}

void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
  grMainLevel3->Active = true;
  CalculateSalesInfo();
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::chvSalesByQuarterGetValueHint(
      TcxGridChartView *Sender, TcxGridChartSeries *ASeries,
      int AValueIndex, AnsiString &AHint)
{
  AHint = Format("%s sales for Q%d are %s",
    ARRAYOFCONST((Sender->ViewData->Categories[AValueIndex], ASeries->Index + 1, ASeries->VisibleDisplayTexts[AValueIndex])));
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::miExitClick(TObject *Sender)
{
  Close();
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::miAboutClick(TObject *Sender)
{
  ShowAboutDemoForm();
}
//---------------------------------------------------------------------------

// we do not use dxOffice11.FillGradientRect because of the problem in C++Builder during linking
void __fastcall FillGradientRectEx(TcxCanvas* ACanvas, const TRect &ARect, TColor AColor1, TColor AColor2, bool AHorizontal)
{
  int AFirstOffset, ALastOffset, APixelSteps, AColorStepsR, AColorStepsG, AColorStepsB;
  TRect R = ARect;

  if (AHorizontal) {
    AFirstOffset = ARect.Left;
    ALastOffset = ARect.Right - 1;
  }
  else
  {
    AFirstOffset = ARect.Top;
    ALastOffset = ARect.Bottom - 1;
  }
  APixelSteps = ALastOffset - AFirstOffset;
  AColorStepsR = GetRValue(AColor2) - GetRValue(AColor1);
  AColorStepsG = GetGValue(AColor2) - GetGValue(AColor1);
  AColorStepsB = GetBValue(AColor2) - GetBValue(AColor1);

  for (int I = AFirstOffset; I <= ALastOffset; I++) {
    if (AHorizontal) {
      R.Left = I;
      R.Right = I + 1;
    }
    else
    {
      R.Top = I;
      R.Bottom = I + 1;
    }
    ACanvas->Brush->Color = (TColor)RGB(
      GetRValue(AColor1) + MulDiv(I - AFirstOffset, AColorStepsR, APixelSteps),
      GetGValue(AColor1) + MulDiv(I - AFirstOffset, AColorStepsG, APixelSteps),
      GetBValue(AColor1) + MulDiv(I - AFirstOffset, AColorStepsB, APixelSteps));
    ACanvas->FillRect(R, NULL, False);
  }
}

void __fastcall TfrmMain::chvSalesSeries1CustomDrawValue(
      TcxGridChartSeries *Sender, TcxCanvas *ACanvas,
      TcxGridChartDiagramValueViewInfo *AViewInfo, bool &ADone)
{
  if (Sender->GridView->DiagramColumn->Active || Sender->GridView->DiagramBar->Active)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?