C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 FAQ
C++Builder Programming FAQ
[16] [TECHNIQUE][COMPONENT] 두개 이상의 ListView 사이에서 Itme 드래그/드랍하기
박지훈.임프 [cbuilder] 19426 읽음    2000-06-13 00:00
: ListView 가 2개 있을때, 각각의 아이템에 Image 가 정해져 있습니다.
:
: 그런데 ListView1의 아이템을 드래그 해서 ListView2에 놓게 할순 없나요?
: 물론 이미지도 같이...
:
: 다시 말해서, 이미지가 있는 아이템을 드래그 해서 그대로 다른 ListVeiw에 놓았을때,
: 다른 ListView 에서 자기의 아이템(이미지도 같이)처럼 관리 하게 하는 방법을 알고 싶습니다.
:


임펠리테리입니다.

좀 복잡한 소스지만.. 잠시 고민하다가 소스를 작성해봤습니다. 다음부터는 직접 해보시고
잘 안되는 부분에서만 질문해주시길...

먼저 두 리스트뷰의 DragMode는 dmAutomatic로 설정하고, 두 리스트뷰의 OnDragOver와 OnDragDrop
이벤트의 핸들러는 모두 다음의 두 함수로 설정하세요.

void __fastcall TForm1::ListView1DragOver(TObject *Sender, TObject *Source,
      int X, int Y, TDragState State, bool &Accept)
{
    if(Source==ListView1 || Source==ListView2) Accept = true;
}

void __fastcall TForm1::ListView1DragDrop(TObject *Sender, TObject *Source,
      int X, int Y)
{
    TListView *SrcListView = dynamic_cast<TListView *>(Source);
    TListView *DstListView = dynamic_cast<TListView *>(Sender);
    if(SrcListView==NULL || DstListView==NULL) return;

    TListItem *NewItem = DstListView->Items->Add();
    NewItem->Assign(SrcListView->ItemFocused);
    DstListView->Checkboxes = false; // 리스트뷰의 버그를 막기 위해
    SendMessage(DstListView->Handle, LVM_SETITEMPOSITION, NewItem->Index, MAKELPARAM(X, Y));
    SrcListView->Items->Delete(SrcListView->ItemFocused->Index);
}

이때 주의할 것. 이미지리스트는 반드시 두 리스트뷰에서 공유해야 합니다. 이미지리스트는
각 아이템의 참조가 간단하지 않으므로 한 이미지리스트를 공유하는 방법을 사용했습니다.
그러니까, 첫번째 리스트뷰의 아이템들에는 이미지리스트의 0번~4번까지 할당하고 다른 리스트뷰엔
5번 이상을 할당한다든지 해서 두 리스트뷰가 한 이미지리스트를 공유하면서도 아이템들의 이미지
가 겹치지 않도록 하면 됩니다.

그럼 참고하시길...

+ -

관련 글 리스트
16 [TECHNIQUE][COMPONENT] 두개 이상의 ListView 사이에서 Itme 드래그/드랍하기 박지훈.임프 19426 2000/06/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.