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
[15478] Re:답변이 좀 잘못되어 있군요. 이렇게 하시면 됩니다.
김상구.패패루 [] 755 읽음    2002-02-14 13:23
당연히 동작하지 않아야죠.. ^^
왜냐하면, 새로 생성된 두개의 버튼의 OnClick 이벤트에 아무것도 걸리지 않았기 때문입니다. 보통 IDE에서 설계할 때는 이벤트부분을 더블클릭해서 자동 생성되는 함수원형에 내용을 채워 넣게 되어있죠. DFM파일을 직접 메모장으로 열어보시면, OnClick에 생성된 함수를 연결시켜주는 부분이 있습니다. 무조건 함수만 선언한다고 되는게 아니라는 얘기죠.

컴포넌트를 제작할 때는 이러한 DFM파일이 지원되지 않기 때문에 수동으로 이를 연결해 주셔야 합니다. 더 좋은 방법은 버튼 자체를 서브클래싱하는 것인데, 이 경우 이벤트 핸들러를 연결하지 않고 가상함수인 Click함수(protect입니다.)를 오버라이드해서 버튼 클릭에 반응하게 하는 방법입니다.

언제가 될지 모르지만 기회가 되면 컴포넌트쪽으로 해서 강의같은걸 해 보면 좋을텐데.. ^^

아무튼, 초기화 해 주는 곳을 이렇게 고쳐주시면 됩니다.

void__fastcall TMyPanel::TMyPanel(TComponent* Owner)
        : TPanel(Owner)
{
        MyButton1 = new TButton(this);
        MyButton1->Parent = this;
        MyButton2 = new TButton(this);
        MyButton2->Parent = this;

        Height = 22;
        Width = 103;
        Caption = "";

        MyButton1->Top = 1;
        MyButton1->Left = 0;
        MyButton1->Height = 20;
        MyButton1->Width = 50;
        MyButton1->OnClick = MyButton1Click; // 추가한 부분

        MyButton2->Top = 1;
        MyButton2->Left = 53;
        MyButton2->Height = 20;
        MyButton2->Width = 50;
        MyButton2->OnClick = MyButton2Click; // 추가한 부분

}


구리구리 님이 쓰신 글 :
: (cpp파일)
: void__fastcall TMyPanel::TMyPanel(TComponent* Owner)
:         : TPanel(Owner)
: {
:         MyButton1 = new TButton(this);
:         MyButton1->Parent = this;
:         MyButton2 = new TButton(this);
:         MyButton2->Parent = this;
:
:         Height = 22;
:         Width = 103;
:         Caption = "";
:
:         MyButton1->Top = 1;
:         MyButton1->Left = 0;
:         MyButton1->Height = 20;
:         MyButton1->Width = 50;
:
:         MyButton2->Top = 1;
:         MyButton2->Left = 53;
:         MyButton2->Height = 20;
:         MyButton2->Width = 50;
:
: }
: //---------------------------------------------------------------------------
: void __fastcall MyButton1Click(TObject *Sender)
: {
:         ShowMessage("Button1 Click!");
: }
: //---------------------------------------------------------------------------
: void __fastcall MyButton2Click(TObject *Sender)
: {
:         ShowMessage("Button2 Click!");
: }
: //---------------------------------------------------------------------------
:
: (h화일)
:
: class PACKAGE TMyPanel : public TPanel
: {
: private:
:         TButton * MyButton1;
:         TButton * MyButton2;
:         void __fastcall MyButton1Click(TObject *Sender);
:         void __fastcall MyButton2Click(TObject *Sender);
: protected:
: public:
:         __fastcall TMyPanel(TComponent* Owner);
: __published:
: };
:
: 컴포넌트소스거덩여... 컴포넌트 컴파일하고 등록하고 사용했는데 버튼을 눌러도 ShowMessage가 안뜨거덩여...
: 이런거 어떻게 해야하나여?
: 넘 초보적인 질문인것같지만.. 물어볼 사람이 없어서.. 저혼자 맨땅에 해딩하기가 넘 어렵네여...
: 패널위에 놓인 버튼을 컨트롤할수 있는 방법좀 가르쳐주셨으면... 올리는것도 얼마전에 여기서 배워지여...
: 날로 다 먹는다고 생각하지 마세여... 벌써 2주째 맨땅에 해딩입니다.. ㅠ.ㅠ
:
: 그럼 새해복많이 받으세여... 꾸벅(-.-)(_._)(-.-)

+ -

관련 글 리스트
15475 컴포넌트 질문 입니다.... 왕초보이니깐 이해해주세여. 구리구리 736 2002/02/14
15478     Re:답변이 좀 잘못되어 있군요. 이렇게 하시면 됩니다. 김상구.패패루 755 2002/02/14
15481         Re:Re:에러가 나는데 어쩌죠? 구리구리 698 2002/02/14
15483             Re:컴포넌트 컴파일시에 에러나나요? 김상구.패패루 811 2002/02/14
15487                 Re:Re:감사합니다.... 꾸벅^^` 구리구리 677 2002/02/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.