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
[27556] [질문]동적 생성 개체의 이벤트 ...검색해서 하다가 좌절~~TT
choco-milford [milford] 1210 읽음    2003-10-17 21:09
21355번 글을 참조하여 동적생성한 CheckBox에 이벤트를 부여하려고 하였습니다.

Chart의 TLineSeries와 TCheckBox를 같은 숫자만큼 생성시키고
체크박스에서 선택된 Series만 화면에 나타나도록 하는 것입니다.
디폴트는 모든 항목이 체크(->Active)되어 있는 것이고
동적생성한 CheckBox에 이벤트 부여하는 것을 제외하고는 일단 이상이 없었습니다.

제가 작성한 코드의 오류메세지는 checkboxAClick가 정의되지 않았다고 하는것입니다.
   ([C++ Error] Unit12.cpp(116): E2451 Undefined symbol 'checkboxAClick')
아래에서 checkboxAClick은 이벤트 함수이름입니다.

이 코드에서 제가 문제라고 생각되는 부분은 checkboxAClick를 호출하는 부분이
checkboxAClick를 선언한 Frm12Display에 있지않고 void Frm12Creation(void)라는 함수속에
자리잡고 있는 것입니다. 이렇게 되어도 괜찮은 것인지.... 모르겠군요.
해더에서의 선언 위치가 문제가 되는것인지......

//////////////////////////////////////////////////////////////////////////////////////////
//=========//
//헤더 부분//
//=========//
//---------------------------------------------------------------------------

#ifndef Unit12H
#define Unit12H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Chart.hpp>
#include <ExtCtrls.hpp>
#include <Series.hpp>
#include <TeEngine.hpp>
#include <TeeProcs.hpp>
//---------------------------------------------------------------------------
class TFrm12Display : public TForm
{
__published:    // IDE-managed Components
        TChart *Chart1;
        TGroupBox *Gbx1VarItem;
        TButton *Btn1Simul;
        TButton *Button2;
        TButton *Button3;
        TButton *Button4;
        TLabel *Label1;
        TListBox *ListBox1;
        void __fastcall Btn1SimulClick(TObject *Sender);
        void __fastcall FormCreate(TObject *Sender);

private:    // User declarations
        void __fastcall checkboxAClick(TObject *Sender);    //<====== 이벤트 함수 선언

public:        // User declarations


        __fastcall TFrm12Display(TComponent* Owner);

        //Chart이 동적 생성
        TList *MyChart1SeriesList;      //Chart1의 LineSeries List
        TList *MyChart1CheckBoxList;    //Chart1_ Display Variables의 CheckBox List
        int SrtNo_ChtIndex;           //Model에 따른 LineSeries 이름 시작 번호
};
//---------------------------------------------------------------------------
extern PACKAGE TFrm12Display *Frm12Display;
//---------------------------------------------------------------------------
#endif
void Frm12Creation(void);
void Frm12Clear(void);


//================//
//이벤트 함수 부분//
//================//
void __fastcall TFrm12Display::checkboxAClick(TObject *Sender)
{
  bool CrrntSrs;
  TCheckBox *cbx = dynamic_cast<TCheckBox *>(Sender);
  CrrntSrs = ((TLineSeries *)(Frm12Display->MyChart1SeriesList->Items[cbx->Tag]))->Active;
  ((TLineSeries *)(Frm12Display->MyChart1SeriesList->Items[cbx->Tag]))->Active != CrrntSrs;
}


//=========================//
//동적생성에 관한 함수 부분//
//=========================//

void Frm12Creation(void)
{
  //==============//
  //Chart1 Setting//
  //==============//
  Frm12Display->Show();
  Frm12Display->Chart1->BottomAxis->AutomaticMaximum = false;
  Frm12Display->Chart1->BottomAxis->Maximum = Frm11Simulation->Edt3SimulPeriod->Text.ToDouble();
  Frm12Display->Chart1->Title->Text->Clear();
  Frm12Display->Chart1->Title->Text->Append("Reactor State Profile(based on " + Frm1MainWindow->BioModel +")");
  Frm12Display->Chart1->Title->Font->Style = TFontStyles()<<fsBold;

  switch (Frm1MainWindow->CbxBioModel->Items->IndexOf(Frm1MainWindow->CbxBioModel->Text))
  {
    case 0   : //ASM1의 경우
         Frm12Display->SrtNo_ChtIndex = 0;
         break;
/*  case 1   : //ASM2의 경우
         Frm12Display->SrtNo_ChtIndex = 13+1;
         break;
    case 2   : //ASM2d의 경우
         Frm12Display->SrtNo_ChtIndex = 13+1 + 18+1;
         break; */
    case 3   : //ASM3의 경우
         Frm12Display->SrtNo_ChtIndex = 13+1 + 18+1 + 17+1;
         break;
/*  case 4   : //ASM3+bioP의 경우
         Frm12Display->SrtNo_ChtIndex = 13+1 + 18+1 + 17+1 + 12+1;
         break;  */
    default  :
         ShowMessage("Invalid Model Now");
  }
  Frm12Display->MyChart1SeriesList = new TList;
  Frm12Display->MyChart1CheckBoxList = new TList;

  //==============================================//
  // LineSeries, CheckBox의 동적 생성의 동적 생성 //
  //==============================================//
  TLineSeries *series_A;
  series_A = new TLineSeries(Frm12Display->Chart1);
  series_A->ParentChart = Frm12Display->Chart1;
  Frm12Display->ListBox1->ItemIndex = Frm12Display->SrtNo_ChtIndex;
  series_A->Title = Frm12Display->ListBox1->Items->Strings[Frm12Display->ListBox1->ItemIndex];
  series_A->VertAxis = aRightAxis;
  Frm12Display->MyChart1SeriesList->Add(series_A);

  TCheckBox *checkbox_A;
  checkbox_A = new TCheckBox(Frm12Display->Gbx1VarItem);
  checkbox_A->Parent = Frm12Display->Gbx1VarItem;
  checkbox_A->Left = 25;
  checkbox_A->Top = 20;
  checkbox_A->Width = 45;
  Frm12Display->ListBox1->ItemIndex = Frm12Display->SrtNo_ChtIndex;
  checkbox_A->Caption = Frm12Display->ListBox1->Items->Strings[Frm12Display->ListBox1->ItemIndex];
  checkbox_A->Font->Style = TFontStyles();
  checkbox_A->Checked = true;
  checkbox_A->OnClick = checkboxAClick;    //<==========  이벤트 부여 ===========
  checkbox_A->Tag = 0;
  Frm12Display->MyChart1CheckBoxList->Add(checkbox_A);

  for(int i=1; i<(Frm1MainWindow->CompositionCount+1); i++)
  {
    TLineSeries *series_A;
    series_A = new TLineSeries(Frm12Display->Chart1);
    series_A->ParentChart = Frm12Display->Chart1;
    Frm12Display->ListBox1->ItemIndex = Frm12Display->SrtNo_ChtIndex + i;
    series_A->Title = Frm12Display->ListBox1->Items->Strings[Frm12Display->ListBox1->ItemIndex];
    series_A->VertAxis = aLeftAxis;
    Frm12Display->MyChart1SeriesList->Add(series_A);

    TCheckBox *checkbox_A;
    checkbox_A = new TCheckBox(Frm12Display->Gbx1VarItem);
    checkbox_A->Parent = Frm12Display->Gbx1VarItem;
    checkbox_A->Left = 25;
    checkbox_A->Top = 20+i*18;
    checkbox_A->Width = 45;
    Frm12Display->ListBox1->ItemIndex = Frm12Display->SrtNo_ChtIndex + i;
    checkbox_A->Caption = Frm12Display->ListBox1->Items->Strings[Frm12Display->ListBox1->ItemIndex];
    checkbox_A->Font->Style = TFontStyles();
    checkbox_A->Checked = true;
    checkbox_A->OnClick = checkboxAClick;                         //이벤트 부여
    checkbox_A->Tag = i;
    Frm12Display->MyChart1CheckBoxList->Add(checkbox_A);
  }
}


+ -

관련 글 리스트
27556 [질문]동적 생성 개체의 이벤트 ...검색해서 하다가 좌절~~TT choco-milford 1210 2003/10/17
27557     Re:[질문]동적 생성 개체의 이벤트 ...검색해서 하다가 좌절~~TT 꼴.시크릿 919 2003/10/17
27573         Re:Re:[질문]동적 생성 개체의 이벤트 ...검색해서 하다가 좌절~~TT choco-milford 827 2003/10/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.