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
[17127] [질문] 메뉴 동적 구성 할때
장익준 [] 955 읽음    2002-04-02 17:29
안녕하세요
 
메인 메뉴중 한 곳은 펼쳐질때 마다 그 곳의 메뉴아이템을 다 지우고,
 
하위에 새로 메뉴 아이템을 추가합니다. 추가되는 메뉴 아이템들은 서브 메뉴를 가질 수 있습니다.
 
겉보기는 잘 동작합니다..
 
 
이런 과정을 지금 TMenuItem 의 Delete 메소드를 사용해서 지우고 다시 추가하는데요
 
어플리케이션이 끝날때 Memory Access Violation 에러가 납니다.
 
아마 내부적으로 컴포넌트들은 가비지 콜렉션이 되는것 같은데 .. 그것과 관련있는듯 합니다.
 
 
위의 방법이 잘 못 된건지..  다른 분들은 메뉴의 동적 구성을 어떻게 하시는지 궁금합니다.
 
C++ Builder 의 Help 를 보면 TMenuItem 의 Delete 는 메모리상에서는 삭제하지 않는다고
 
메모리에서 지울라면, Free 메소드를 호출하라고 하고 Free 메소드의 설명은 객체는 알아서 지우니까
 
Free 호출 하지 말고 Delete 를 호출하라고 합니다..
 
 
그리고 메뉴 아이템을 삭제 할때,  각각의 메뉴아이템을 지우는데요,
 
그 메뉴아이템의 서브 메뉴가 있을때는 상위의 메뉴아이템만을 지우면 알아서 Recursive 하게
 
Delete 하는 겁니까? 아님 제가 서브 메뉴의 아이템들도 재귀 호출로 삭제 해야 하는 겁니까
 
현재는 이케 했습니다.
 
// pParentMenu 하위의 메뉴아이템을 nStartIndex 부터 지우는 루틴입니다.
FreeFavoriteMenu(const TMenuItem *pParentMenu, const int nStartIndex)
{
     if( pParentMenu->Count <= nStartIndex )
       return;
 
     for(int i=nStartIndex;i<pParentMenu->Count;i++)
     {
         TMenuItem *pPred = pParentMenu->Items[i];
         pParentMenu->Delete(i);
    }
}
 
제가 아직 빌더의 콤포넌트 개념이 없어서 그런것 같습니다..
 
이런 간단한걸로 막히고 있습니다.
 
아시는 분은 답변 주시면 감사하겠습니다.
 
아.. 그리고 new 로 생성한 콤포넌트들은 delete 해야 하는지
 
아님 자동으로 지우는지 잘 몰겠습니다.
 
 
 


+ -

관련 글 리스트
17127 [질문] 메뉴 동적 구성 할때 장익준 955 2002/04/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.