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
[6051] Re:동적으로 버튼생성
한꼬맹이 [] 2682 읽음    2001-03-12 22:25
방태윤 님이 쓰신 글 :
: 동적으로 버튼을 생성하는 방법을 알고 싶습니다.
:
: 새로운 폼 Form1 을 생성했다고 하고
:
: TForm1 *Form1;
:
: __fastcall TForm1::TForm1(TComponent* Owner)
:   : TForm(Owner)
: {
: }
:
: void make_button();
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:   make_button();
: }
:
:
: Tbutton *a;
:
: void __fastcall TForm1::A_func(TObject *Sender)
: {
:   ShowMessage("A")
: }
: void __fastcall B_func(TObject *Sender)
: {
:   ShowMessage("B")
: }
:
: void make_button()
: {
:   a=new TButton(Form1);
:
:   a->Top=10;
:   a->Left=10;
:   a->Width=100;
:   a->Height=20;
:   a->Visible=true;
:   a->Parent=Form1;
:   a->Caption="test";
: **********************
:   a->OnClick=A_func;
: or
:   a->OnClick=B_func;
:
: 음 여기서 부터 막히는군요..
: A_func 는 되는데 B_func 은 안되는군요.
: 근데 제가 사용하고자 하는 건
: a->OnClick=B_func; 인데 컴파일 에러입니다.
: 영원히 안되는게 당연한건지 잘 모르지만
: B 형태로 사용할려면 어떻게 해야 되는지
: 고수님들의 한수 지도 부탁합니다.
:
: }
:
: 감사합니다...끝.
:

안녕하십니까?

한꼬맹이 입니다.

1. a->OnClick=A_func;
2. a->OnClick=B_func;

1번은 되는데.. 2번이 왜 안돼냐하면 버턴의 OnClick이벤트는  TNotifyEvent형으로 선언되어

있기 때문입니다. 즉 4바이트짜리 두개 짜리 포인트가 대입되어야 제대로 돌아갑니다.

빌더에서 일반함수의 주소는 4바이트짜리 주소하나로 표현되지만 클래스내의 멤버함수는

4바이트짜리 두개의 주소로 표현됩니다. 그래서 2.번의 경우 제대로 돌아가지 않는 겁니다.

void __fastcall B_func(TObject *Sender) 일반 함수를 클래스 멤버함수로 바꾸어 주시면

아무문제 없이 잘 돌 아 갈겁니다.

그럼 참고하세요


+ -

관련 글 리스트
6049 동적으로 버튼생성 방태윤 2575 2001/03/12
6051     Re:동적으로 버튼생성 한꼬맹이 2682 2001/03/12
6053         Re:Re:동적으로 버튼생성 방태윤 2461 2001/03/12
6055             Re:Re:Re:동적으로 버튼생성 한꼬맹이 2413 2001/03/12
6059                 Re:Re:Re:Re:동적으로 버튼생성 방태윤 2399 2001/03/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.