|
차트에서 sql문을 할당하고 차트를 만들었습니다.
차트 에디트에서 보면 11가지의 차트 종류가 나와 있던데
처음 디폴트가 bar였으면 이걸 popup 메뉴나 메뉴에서
각각의 차트 시리즈를 선택했을 때 모두 나타내고 싶거던요...
이걸 어떻게 해결 해야 합니까?
지금 올리는 소스는
하나의 차트가 변화는게 아니라
bar차트면 선택된 하나의 막대 부분만 바뀌는데 에러도 못 잡겠구..
소스코드를 올려드리겠습니다.
이거 좀 해결해주세요...
-----cpp--------- cpp파일
#include <vcl.h>
#pragma hdrstop
#include "FBaseMDIChart.h"
#include "FToolWinDataBrowser.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "FBaseMDIChild"
#pragma resource "*.dfm"
TFrmBaseMDIChart *FrmBaseMDIChart;
//---------------------------------------------------------------------------
__fastcall TFrmBaseMDIChart::TFrmBaseMDIChart(TComponent* Owner)
: TFrmBaseMDIChild(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall ChangeChartSeries(TCustomChart *AChart, int Tag)
{
TMetaClass *NewSeries;
switch ( Tag )
{
case 1 :
NewSeries = __classid(TLineSeries);
break;
case 2 :
NewSeries = __classid(TAreaSeries);
break;
case 3 :
NewSeries = __classid(TPointSeries);
break;
case 4 :
NewSeries = __classid(TBarSeries);
break;
case 5 :
NewSeries = __classid(THorizBarSeries);
break;
case 6 :
NewSeries = __classid(TPieSeries);
break;
case 7 :
NewSeries = __classid(TChartShape);
break;
case 8 :
NewSeries = __classid(TFastLineSeries);
break;
case 9 :
NewSeries = __classid(TArrowSeries);
break;
case 10:
NewSeries = __classid(TGanttSeries);
break;
case 11:
NewSeries = __classid(TBubbleSeries);
break;
default :
return;
}
ChangeAllSeriesType(AChart, NewSeries);
}
//---------------------------------------------------------------------------
void __fastcall ChangeSeries(TChartSeries *ASeries, int Tag)
{
TMetaClass *NewSeries;
switch ( Tag )
{
case 1 :
NewSeries = __classid(TLineSeries);
break;
case 2 :
NewSeries = __classid(TAreaSeries);
break;
case 3 :
NewSeries = __classid(TPointSeries);
break;
case 4 :
NewSeries = __classid(TBarSeries);
break;
case 5 :
NewSeries = __classid(THorizBarSeries);
break;
case 6 :
NewSeries = __classid(TPieSeries);
break;
case 7 :
NewSeries = __classid(TChartShape);
break;
case 8 :
NewSeries = __classid(TFastLineSeries);
break;
case 9 :
NewSeries = __classid(TArrowSeries);
break;
case 10:
NewSeries = __classid(TGanttSeries);
break;
case 11:
NewSeries = __classid(TBubbleSeries);
break;
default :
return;
}//swich
ChangeSeriesType(ASeries, NewSeries);
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::ChartOnClickProc(TObject * Sender)
{
if (dynamic_cast<TCustomChart *>(Sender) != NULL)
SelectedChart = dynamic_cast<TCustomChart *>(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::ChartSeriesOnClickProc(TCustomChart *Sender,
TChartSeries *Series, int ValueIndex, TMouseButton Button, TShiftState Shift, int X, int Y)
{
SelectedChart = Sender;
SelectedSeries = Series;
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::SetSelectedChart(TCustomChart * value)
{
if (FSelectedChart != value)
{
if (FSelectedChart == NULL)
FSelectedChart = value;
FSelectedChart->BorderStyle = bsNone;
FSelectedChart = value;
FSelectedChart->BorderStyle = bsSingle;
}
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::SetSelectedSeries(TChartSeries * value)
{
if (FSelectedSeries != value)
{
FSelectedSeries = value;
SelectedDataSet = (TDataSet *)FSelectedSeries->DataSource;
}
}
//---------------------------------------------------------------------------
//
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::FormCreate(TObject *Sender)
{
inherited::FormCreate(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::FormClose(TObject *Sender,
TCloseAction &Action)
{
inherited::FormClose(Sender, Action);
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::FormCloseQuery(TObject *Sender,
bool &CanClose)
{
inherited::FormCloseQuery(Sender, CanClose);
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::FormDestroy(TObject *Sender)
{
inherited::FormDestroy(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::FormActivate(TObject *Sender)
{
inherited::FormActivate(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::FormShow(TObject *Sender)
{
inherited::FormShow(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::FormKeyPress(TObject *Sender, char &Key)
{
inherited::FormKeyPress(Sender, Key);
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::ActDataBrowserExecute(TObject *Sender)
{
if (FSelectedDataSet == NULL) return;
FrmToolWinDataBrowser->Execute(this, FSelectedDataSet);
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::ActChangeAllSeriesExecute(
TObject *Sender)
{
TMenuItem *SelectedMenuItem = dynamic_cast<TMenuItem*>(Sender);
if (SelectedMenuItem == NULL)
return;
if (FSelectedChart != NULL && FSelectedSeries != NULL)
{
ChangeChartSeries(FSelectedChart, SelectedMenuItem->Tag);
}
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::ActChangeSeriesExecute(TObject *Sender)
{
TMenuItem *SelectedMenuItem = dynamic_cast<TMenuItem*>(Sender);
if (SelectedMenuItem == NULL)
return;
if (FSelectedChart != NULL && FSelectedSeries != NULL)
{
ChangeSeries(FSelectedSeries, SelectedMenuItem->Tag);
SetDefaultSeriesStyle(FSelectedSeries);
}
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::SetDefaultSeriesStyle(TChartSeries *ASeries)
{
//ASeries->ColorEachPoint = false;
//ASeries->Style-> Visible = !ASeries->ColorEachPoint;
ASeries->Cursor = crHandPoint;
//ASeries->Marks->Visible = false;
//ASeries->Marks->Style = smsLabel;
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::SetDefaultPieSeriesStyle(TPieSeries *ASeries)
{
//TODO: Add your source code here
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::SetDefaultGanttSeriesStyle(TGanttSeries *ASeries)
{
//TODO: Add your source code here
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::SetDefaultBubbleStyle(TBubbleSeries *ASeries)
{
//TODO: Add your source code here
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::TimerAnimationTimer(TObject *Sender)
{
if (SelectedChart == NULL) return;
for (int i=0; i < SelectedChart->SeriesCount(); i++)
{
if ( dynamic_cast<TPieSeries *>(SelectedChart->Series[i]) != 0)
((TPieSeries *)SelectedChart->Series[i])->Rotate(1);
if ( dynamic_cast<TCircledSeries *>(SelectedChart->Series[i]) != 0)
((TCircledSeries *)SelectedChart->Series[i])->Rotate(1);
}
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::ActChartLegendVisibleExecute(
TObject *Sender)
{
ActChartLegendVisible->Checked = !ActChartLegendVisible->Checked;
SelectedChart->Legend->Visible = ActChartLegendVisible->Checked;
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::ActChartColorEachPointExecute(
TObject *Sender)
{
ActChartColorEachPoint->Checked = !ActChartColorEachPoint->Checked;
SelectedSeries->ColorEachPoint = ActChartColorEachPoint->Checked;
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::ActChartAnimationExecute(TObject *Sender)
{
ActChartAnimation->Checked = !ActChartAnimation->Checked;
TimerAnimation->Enabled = ActChartAnimation->Checked;
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::ActChartZoomHomeExecute(TObject *Sender)
{
SelectedChart->UndoZoom();
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::ActChartZoomInExecute(TObject *Sender)
{
SelectedChart->ZoomPercent(110);
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::ActChartZoomOutExecute(TObject *Sender)
{
SelectedChart->ZoomPercent(90);
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::ActChartPageHomeExecute(TObject *Sender)
{
//
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::ActChartPageFirstExecute(TObject *Sender)
{
SelectedChart->PreviousPage();
}
//---------------------------------------------------------------------------
void __fastcall TFrmBaseMDIChart::ActChartPageNextExecute(TObject *Sender)
{
SelectedChart->NextPage();
}
//---------------------------------------------------------------------------
//Change Marks Style
void __fastcall TFrmBaseMDIChart::popmnuitemValueClick(TObject *Sender)
{
TMenuItem *SelectedMenuItem = dynamic_cast<TMenuItem*>(Sender);
if (SelectedMenuItem == NULL)
return;
if (FSelectedChart != NULL && FSelectedSeries != NULL)
{
SelectedSeries->Marks->Style = ((TSeriesMarksStyle)SelectedMenuItem->Tag-1);
}
}
//---------------------------------------------------------------------------
--------h------------ 헤더 파일
//---------------------------------------------------------------------------
#ifndef FBaseMDIChartH
#define FBaseMDIChartH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "FBaseMDIChild.h"
#include <ActnList.hpp>
#include <ComCtrls.hpp>
#include <ImgList.hpp>
#include <Menus.hpp>
#include <ToolWin.hpp>
#include <Chart.hpp>
#include <DBChart.hpp>
#include <ExtCtrls.hpp>
#include <TeEngine.hpp>
#include <TeeProcs.hpp>
#include <Series.hpp>
#include <GanttCh.hpp>
#include <BubbleCh.hpp>
#include <TeeShape.hpp>
#include <ArrowCha.hpp>
//---------------------------------------------------------------------------
typedef void __fastcall (__closure *TChartOnClickProc)(TObject *Sender);
//---------------------------------------------------------------------------
class TFrmBaseMDIChart : public TFrmBaseMDIChild
{
typedef TFrmBaseMDIChild inherited;
__published: // IDE-managed Components
TPopupMenu *popmnuChangeChart;
TMenuItem *Line1;
TMenuItem *Area1;
TMenuItem *Point1;
TMenuItem *Bar1;
TMenuItem *HorizBar1;
TMenuItem *Pie1;
TMenuItem *Shape1;
TMenuItem *FastLine1;
TMenuItem *Arrow1;
TMenuItem *Gantt1;
TMenuItem *Bubble1;
TImageList *imglstSeries;
TPopupMenu *popmnuChangeSeries;
TMenuItem *MenuItem1;
TMenuItem *MenuItem2;
TMenuItem *MenuItem3;
TMenuItem *MenuItem4;
TMenuItem *MenuItem5;
TMenuItem *MenuItem6;
TMenuItem *MenuItem7;
TMenuItem *MenuItem8;
TMenuItem *MenuItem9;
TMenuItem *MenuItem10;
TMenuItem *MenuItem11;
TAction *ActChangeAllSeries;
TAction *ActChangeSeries;
TToolBar *ToolBar2;
TToolButton *ToolBtnChangeSeries;
TToolButton *ToolBtnValueLine;
TToolButton *ToolButton6;
TToolButton *ToolBtnLegendVisible;
TToolButton *ToolButton7;
TToolButton *ToolButton8;
TToolButton *ToolButton9;
TToolButton *ToolButton10;
TToolButton *ToolButton11;
TToolButton *ToolButton12;
TToolButton *ToolButton13;
TAction *ActChartColorEachPoint;
TAction *ActChartMarkStyle;
TAction *ActChartLegendVisible;
TAction *ActChartAnimation;
TTimer *TimerAnimation;
TAction *ActChartZoomIn;
TAction *ActChartZoomOut;
TAction *ActChartPageFirst;
TAction *ActChartPageNext;
TToolButton *ToolButton1;
TToolButton *ToolButton2;
TToolButton *ToolButton3;
TToolButton *ToolButton4;
TAction *ActChartZoomHome;
TAction *ActChartPageHome;
TToolButton *ToolButton5;
TToolButton *ToolButton14;
TToolButton *ToolButton15;
TToolButton *ToolButton16;
TPopupMenu *popmnuMarkStyle;
TAction *ActChartMarkVisible;
TMenuItem *popmnuitemValue;
TMenuItem *popmnuitemPercent;
TMenuItem *popmnuitemLabel;
TMenuItem *popmnuitemLabelPercent;
TMenuItem *popmnuitemLabelValue;
TMenuItem *popmnuitemLegend;
TMenuItem *popmnuitemPercentTotal;
TMenuItem *popmnuitemLabelPercentTotal;
TMenuItem *popmnuitemXValue;
TAction *ActDataBrowser;
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
void __fastcall FormDestroy(TObject *Sender);
void __fastcall FormActivate(TObject *Sender);
void __fastcall FormShow(TObject *Sender);
void __fastcall FormKeyPress(TObject *Sender, char &Key);
void __fastcall ActChangeAllSeriesExecute(TObject *Sender);
void __fastcall ActChangeSeriesExecute(TObject *Sender);
void __fastcall TimerAnimationTimer(TObject *Sender);
void __fastcall ActChartLegendVisibleExecute(TObject *Sender);
void __fastcall ActChartColorEachPointExecute(TObject *Sender);
void __fastcall ActChartAnimationExecute(TObject *Sender);
void __fastcall ActChartZoomInExecute(TObject *Sender);
void __fastcall ActChartZoomOutExecute(TObject *Sender);
void __fastcall ActChartPageFirstExecute(TObject *Sender);
void __fastcall ActChartPageNextExecute(TObject *Sender);
void __fastcall ActChartZoomHomeExecute(TObject *Sender);
void __fastcall ActChartPageHomeExecute(TObject *Sender);
void __fastcall ActDataBrowserExecute(TObject *Sender);
void __fastcall popmnuitemValueClick(TObject *Sender);
private:
TCustomChart * FSelectedChart;
TChartSeries * FSelectedSeries;
TDataSet * FSelectedDataSet;
void __fastcall SetSelectedChart(TCustomChart * value);
void __fastcall SetSelectedSeries(TChartSeries * value); // User declarations
protected:
void __fastcall ChartOnClickProc(TObject * Sender);
void __fastcall ChartSeriesOnClickProc(TCustomChart *Sender,
TChartSeries *Series, int ValueIndex, TMouseButton Button,
TShiftState Shift, int X, int Y);
public: // User declarations
__fastcall TFrmBaseMDIChart(TComponent* Owner);
void __fastcall SetDefaultSeriesStyle(TChartSeries *ASeries);
void __fastcall SetDefaultPieSeriesStyle(TPieSeries *ASeries);
void __fastcall SetDefaultGanttSeriesStyle(TGanttSeries *ASeries);
void __fastcall SetDefaultBubbleStyle(TBubbleSeries *ASeries);
__property TCustomChart * SelectedChart = { read=FSelectedChart, write=SetSelectedChart };
__property TChartSeries * SelectedSeries = { read=FSelectedSeries, write=SetSelectedSeries };
__property TDataSet * SelectedDataSet = { read=FSelectedDataSet, write=FSelectedDataSet };
};
//---------------------------------------------------------------------------
extern PACKAGE TFrmBaseMDIChart *FrmBaseMDIChart;
//---------------------------------------------------------------------------
#endif
|