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
[47381] Re:(질문)new 로 생성한 Edit의 events 사용하기
장성호 [nasilso] 1171 읽음    2006-12-12 09:35
"동적생성" 이라는 키로 검색해보세요
엄청 많이 나와요

[검색한것]
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=43743
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=43189
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=38170

[동적생석 Control의 이벤트 핸들러 등록]
원리는 간단해요
TEdit* 든 TButton * 이든  이벤트 핸들러를 연결하려면

1. 일단 연결할 함수는 미리 만들어 두어야 하구요
    - 함수를 만들때..  MouseClick 이면 Click 에 맞는 형으로
    -  KeyDown 이면 KeyDown에 맞는형으로 만들어 두면 되구요

2. 그런다음  살아있는 Control에 연결하면 되요
     ( 살아있다는 말은  Design 타임에서 만든것이든, 코딩으로 생성한것이든  control이 destory되기 전을 말합니다.)
     ( 다시 말해 살아있는동안에는 언제든지 연결및 헤제가 자유롭다는 말입니다.)

    연결은 이런식으로 간단히...

      List[i].Documents->OnKeyDown    =  MyKeyDown ;
      List[i].Documents->OnClick           =  MyClick ;
      List[i].Documents->OnChange      =  MyChange ;

3. 연결되는 함수를 바꾸고자한다면?
    
      List[i].Documents->OnKeyDown    =  MyKeyDown2 ;
      List[i].Documents->OnClick           =  MyClick2 ;
      List[i].Documents->OnChange      =  MyChange2 ;


4. 연결함수를 없애고 싶다면

      List[i].Documents->OnKeyDown    = NULL ;
      List[i].Documents->OnClick           =  NULL ;
      List[i].Documents->OnChange      =  NULL ;

5. 만약 다른 Form(또는 다른 Class Object)에 있는 함수를 연결하고자 한다면...
      List[i].Documents->OnKeyDown    = Form2->MyKeyDown;
      
     이경우에는  (생성한 Control이 Form1이고 연결할 함수가 Form2에 있는경우)
     Form2에 있는 MyKeyDown함수가 public 이어야 겠죠


추신 :

위에서 이벤트 핸들러를 NULL로 설정해서 없애는 방법은
Form을 Destory할때 (또는 프로그램을 종료할때)  Form위에 올려진 Control들에서 
OnItemChange나 OnTimer , OnDisconnect 이벤트들이 발생하기도 합니다.

이때 destory순서가 잘못된경우나 또는 이벤트핸들러함수에서 코딩이 잘못된경우
Access Violation 이 나는 경우가 있습니다.

이런경우에는
FormDestory에서 이벤트 핸들러들을 NULL로 해준뒤에
delete하시면 문제가 해결됩니다.

검색을 잘 활용하면 Plus + alpa를 얻을수 있어요

  
이한진 님이 쓰신 글 :
: program-----
:
:     for (int i=0; i<pIndex; i++ )
:     {
:         List[i].Documents = new TEdit(this);
:         List[i].Documents->Parent = FormMain;
:         List[i].Documents->Height = 21;
:         List[i].Documents->Width = 373;
:
:         List[i].pDocuments->Left = LeftPos;
:         List[i].pDocuments->Top = 40 + ( i * 27 );
:         List[i].Documents->Left = 4;
:         List[i].Documents->Top = 3;
:         List[i].Documents->Tag = i;
:     }
: new 로 해서 위내용처럼 pIndex 만큼 에디터를 생성했습니다.
: 이렇게 생성한 에디터의 내용을 변경하기 위해 이벤트를 발생시키고자한다면
: 어떻게 해야 하나요..?
:
: 이렇게 하게된 이유가
: 에러 리스트나 입출력 리스트를 폼에 미리 다 만들어 놓은면 편집하기도 편하긴 한데
: 저의 짧은 생각으로는 메모리도 많이 차지 할것 같기도 하고해서 기냥
: 이렇게 했거든요..하다보니 꼭 그런것도 아니고, 힘만 더 들기도 했지만요
:
: 그래도 하던거 마무리를 져야 할 것 같아 해보려 했더니 에디터에서 발생하는 이벤트를
: 어떻게 사용하는지가 문제더군요
:
: 몇몇분께 물어봤더니 WINDOWS MESSAGE 인가요! 그걸 써야 할것 같다는 분도 있던데..
: 해보면 좋을듯 한데 왠지 겁부터 나서리..ㅜㅜ
: 암튼 좋은 방법있으면 알려주시면 감사하겠습니다..^^

+ -

관련 글 리스트
47378 (질문)new 로 생성한 Edit의 events 사용하기 이한진 833 2006/12/11
47381     Re:(질문)new 로 생성한 Edit의 events 사용하기 장성호 1171 2006/12/12
47382         감사합니다.. 이한진 745 2006/12/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.