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
[2767] [질문] 사용자 정의 컴포넌트에서 이벤트 핸들러가 실행되지 않음.
임문환 [] 3963 읽음    2000-01-18 00:00
앞전의 TImageList 문제는 말씀하신대로 비트맵의 높이가 만들 때와는 달리 15가 되어 있더군요(황당).
그래서 무조건 높이를 16으로 지정해버렸읍니다. 이제 그부분에 있어서 컴포넌트는 문제가 없습니다.
그런데 유심히 살펴보니 TCustomTreeView의 OnExpanding은 제대로 호출되는 반변
제가 만든 컴포넌트 내부의 OnExpanding 이벤트 핸들러가 호출되지 않습니다.
(오버라이딩이 제대로 되지 않는 듯합니다.)
이 이벤트 핸들러는 말 그대로 트리가 확장될 때 호출되는 것으로 알고 있습니다.
그런데 아래의 다른 이벤트 핸들러들은 모두 제대로 호출됩니다.

이 핸들러가 하는 일은 트리뷰의 '+' 단추를 클릭했을 때 트리가 확장되게 되는데 이 때 해당 디렉터리의
바로 밑의 자식 디렉터리뿐만아니라 자식의 자식(손자) 디렉터리까지 찾아 트리뷰에 추가하는 것입니다.
그렇게 해야 현재 디렉터리가 확장되었을 때 자식 디렉터리의 왼쪽에 '+' 단추를 표시할 수 있습니다.
자식 디렉터리가 있는데도 '+' 단추가 없으면 답답하게 보이고 하위 디렉터리 존재유무를 알려면
반드시 현재 디렉터리의 이름을 더블클릭해야만하므로 복잡하게 됩니다.

그리고 한 가지 덧붙이면, 이 컴포넌트를 IDE에 등록한 후 응용 프로그램의 폼에 놓고 응용 프로그램에 OnExpanding 이벤트
핸들러를 설치하면 그 것은 호출되더군요. 그 곳에서 컴포넌트 내부의 OnExpanding 이벤트 핸들러를 명시적으로 호출하면
호출이 됩니다. 하지만 이런식으로 컴포넌트를 사용한다면 문제가 많겠지요.

수고스럽더라도 도와주시면 감사하겠습니다.

.H 파일에서
class TCustomDirectoryListBox : public TCustomTreeView
{
.
.
.
protected:
    virtual void __fastcall DblClick();
    virtual void __fastcall Change(TTreeNode *Node);
    virtual void __fastcall KeyPress( char &Key);
    virtual void __fastcall Expanding( TTreeNode *Node, bool &AllowExpansion);
published:
__property OnChange;
__property OnDblClick;
__property OnExpanding;
__property OnKeyPress;
}

.Cpp 파일에서
void __fastcall TCustomDirectoryListBox::Expanding(TTreeNode *Node,bool &AllowExpansion)
{
.
.
.
}

감사합니다.



+ -

관련 글 리스트
2767 [질문] 사용자 정의 컴포넌트에서 이벤트 핸들러가 실행되지 않음. 임문환 3963 2000/01/18
2777     Re:[질문] 트리뷰의 OnExpanding 이벤트 오버라이드하기 박지훈.임프 4115 2000/01/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.