에궁... 님이 쓰신 글 :
: 우선 답변 주셔서 감사합니다..
:
: 그럼..Win32 탭에 잇는 트리뷰로는 열고 닫을때 빨리 열고 닫는 방법은 없는걸까요.....
Win32 TreeView의 한계니까 어쩔 수 없을 겁니다.
: 대안은 VirtualTreeview 이 컴퍼넌트를 사용하는거 밖에는 없을까요...
:
: 이거 사용할려구 받아 봤더니..@_@.....어지럽네염...
솔직히, 저도 써볼려다 어려워서 포기했습니다. -_-;;
Win32 TreeView와 구조가 많이 다르더군요.
누가 이 컴포넌트 강좌 좀 해 주었으면 좋겠네요.
: 김백일 님이 쓰신 글 :
: : 에궁... 님이 쓰신 글 :
: : : 트리1은 디비에서 데이터를 가져와서 노드를 생성합니다..
: : :
: : : 문제는 노드수가 1000개 정도 되자 노드를 열고 닫을때(+)을 클릭할때 마다
: : :
: : : 프로그램이 다운된거처럼 아무런 키도 이벤트도 먹지 않습니다..
"다운된 것처럼" 보이지 않게 하려면, 멀티쓰레딩을 사용해야 합니다.
그럼 노드 작업은 스레드에서 처리하도록 하고,
메인 프로그램은 새로 이벤트를 받을 수 있습니다.
이렇게 오래 걸리는 작업을 처리할 때는 스레드의 사용은 필수적입니다.
빌더에서 쓰레딩을 사용하는 방법은 무지 간단합니다.
[File]-[New...]에서 [Thread Object]를 선택하셔서
TThread 에서 상속받은 새 스레드 클래스를 만드신 후,
이 클래스의 Execute()안에 코딩만 하면 됩니다.
(Java에서의 멀티스레딩을 해보신 분은 아시겠지만,
TThread의 사용법도 java.lang.Thread 클래스와 거의 비슷합니다.
이들 클래스는 디자인 패턴(Design Patterns)에서 말하는 COMMAND 패턴과 유사한 구조의 클래스지요.)
ProgressBar 같은 컨트롤로 작업 진행도를 표시하는 코드 같은 걸 넣으면
사용자에게 더 친절한 프로그램이 되겠네요.
자세한 것은 빌더의 쓰레딩(TThread)에 대한 설명이 나와있는 책들을 참고하세요.
: : : 리스트뷰처럼..BeginUpdate, EndUpdate 이런 메소드는 없나염..^^;
: : :
: : : 열고 닫을때 마다...돌아 버리겠습니다..
: :
: : 당근 있지요. 조금 혼동하셨네요.
: :
: : 리스트뷰와 방법이 똑같습니다.
: : TListNodes::BeginUpdate(), TListNodes::EndUpdate() 입니다.
: : 즉,
: : ListView1->Items->BeginUpdate();
: : // 노드 작업
: : ListView1->Items->EndUpdate();
: :
: : 트리뷰도 마찬가지로
: : TTreeNodes::BeginUpdate(), TTreeNodes::EndUpdate() 입니다.
: : 즉,
: : TTreeView1->Items->BeginUpdate();
: : ....
: : TTreeView1->Items->EndUpdate();
: :
: : 그리고 속도가 제일 중요하시다면
: : Virtual Treeview란 컴포넌트를 써보세요.
: :
http://www.lischke-online.de/VirtualTreeview/VT.html
: :
: : 지원하는 기능이 엄청 많고, 속도도 무지 빠릅니다. (Win32 TreeView가 아닙니다.)
: : 보통 백만개 정도의 노드를 삽입하는데, 1~2초 정도밖에 안걸립니다.
: : 반면에, 실행파일 크기가 좀 커지고, 결정적으로 사용법이 좀 어렵습니다.