C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[10233] TDBChart를 시리즈 별로 보여 주려면?
정용호 [] 1564 읽음    2001-08-23 17:39
차트에서 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

+ -

관련 글 리스트
10233 TDBChart를 시리즈 별로 보여 주려면? 정용호 1564 2001/08/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.