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
[62773] 감사합니다..
용맨소녀 [doyongid] 965 읽음    2010-10-26 02:16
제 질문 의도는 3번이었습니다..

1,2번도 가능한 케이스인지 몰랐네요..ㅠㅠ 드래그&드랍 처리는 처음 하는 것인지라..

긴 답변 감사합니다..

장성호 님이 쓰신 글 :
: 음...
: 님께서 원하시는것이
:
: 질문-해석1
: 바탕화면의 아이콘( 바탕화면도 ListView임) 이 자동정렬이 아닌 상태에서
: 마우스로 Drag해서 원하는곳이 아무데나가져다 놓으면
: 아이콘이 drop한 위치로 이동되는것을 원하시는것인가요?
:
: 질문-해석2
: 바탕화면의 아이콘( 바탕화면도 ListView임) 이 자동정렬인 상태처럼
: 마우스로 Drag해서 원하는곳이 아무데나가져다 놓으면
: 선택한 아이콘(아이템)이 그 위치에 끼워넣기 되고..
: 나머지 아이템은 자동으로 밀리길 원하시나요?
:
: 질문-해석3
: 아니면 drop된 위치의 아이템과 select한 아이템이 위치가 교체되기를 원하시나요?
:
: ================================================================
: 질문의 코드설명
: 님의 코드는 해석1에 해당되는것으로써..
: 저것도항상 저렇게 되는것이 아니라 ListView의 ViewStyle이  윈도우즈바탕화면처럼
: vsIcon 또는 vsSmallIcon으로 되어있을때에 가능합니다.
:
: vsReport나 vsList로 되어있을때는 안됩니다.
:
: 답변s
: 질문해석에 따라답변이 다른데요
:
: 먼저 해석3에 대한 답변은?
:
: 해석3-답변
: 해석3은 결국 item을 교체하는것인데요
: TListIView에서 Item을 교체하는 기능을 제공하지는 않는것 같습니다.
: Item의 내용을 하나하나 교체하면됩니다.
: caption 및 ImageIndex , selectedIndex,Data 등...
: 교체를 편리하게 하기위해 ListItem을 하나 추가로 만들어서 하는 방법도 있습니다.
: 다음과 같이...
:
: void __fastcall ExChagneListViewItem(TListView *listView,TListItem *Source,TListItem*Target)
: {
: 
:   TListItem *New;
: 
:   listView->Items->BeginUpdate();
:   try
:   {
:     New    = listView->Items->Add();
:     New->Assign(Target);
:     Target->Assign(Source);
:     Source->Assign(New);
:     delete New;
:   }
:   __finally
:   {
:     listView->Items->EndUpdate();
:   }
: }
: 
: void __fastcall TForm1::ListView1DragDrop(TObject *Sender, TObject *Source,
:       int X, int Y)
: {
: 
:     TListItem *SrcItem=ListView1->Selected;
:     TListItem *TargetItem=ListView1->GetItemAt(X,Y);
:    ExChagneListViewItem(SrcItem,TargetItem);
: 
: }
: 

:
: 해석2-답변
: 선택한 아이템을 원하는 위치로 이동하기위해서는...
: ViewStyle이 icon형태일때랑 list형태일 때랑 다르게 동작하는데요..
:
: ViewStyle이 list형태일때는
: TListView->Items->Insert(index) 함수가  index위치에 ListItem을 제대로 생성하지만
: ViewStyle이 icon형태일때는 insert하면 맨뒤에 Add되기때문에...
: TListView->Items->Insert를 써서 item을 이동하는것은 잘안됩니다.
:
:
: ViewStyle이 list형태일때라고 가정하고 코드를 작성하면...
: 1) 원하는 위치에 item을 하나 insert한뒤에
: 2) Source아이템의 내용을 newitem에 assign하고
: 3) Source아이템을 삭제 하면됩니다.
:
:
: void __fastcall TForm1::ListView1DragDrop(TObject *Sender, TObject *Source,
:       int X, int Y)
: {
: 
:     TListItem *SrcItem=ListView1->Selected;
:     TListItem *TargetItem=ListView1->GetItemAt(X,Y);
:     if(SrcItem==TargetItem)return;
:     if(TargetItem==NULL)return;
: 
:     ListView1->Items->BeginUpdate();
:     TListItem *NewItem=ListView1->Items->Insert(TargetItem->Index);
:     NewItem->Assign(SrcItem);
:     delete SrcItem;
:     ListView1->Items->EndUpdate();
: 
: }
: //---------------------------------------------------------------------------
: 
: 

:
:
: 윈도우즈바탕화면의 자동정렬 기능처럼
: ListView스타일이 icon인 상태에서   해석3처럼 구현하려면...
: 조금 노가다가 필요할것도 같네요...(이건 안해봐서..)
:
: 그럼...
:
:
: 용맨소녀 님이 쓰신 글 :
: : 여기 답변글을 참고해서 만들었는데요..
: :
: : 항목 이동은 안되네요..
: :
: : ListView의 DragMode를 dmAutomatic로 설정했고요..
: :
: : void __fastcall TWin_Code::View_CodeExecuteDragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State,
: :           bool &Accept)
: : {
: :     if(dynamic_cast<TListView *>(Source) == NULL)
: :         return;
: :
: :     printf("111\n");
: :
: :     Accept = true;
: :
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TWin_Code::View_CodeExecuteDragDrop(TObject *Sender, TObject *Source, int X, int Y)
: : {
: :     if(dynamic_cast<TListView *>(Source) == NULL)
: :         return;
: :
: :     printf("222\n");
: :
: :     SendMessage(View_CodeExecute->Handle, LVM_SETITEMPOSITION, View_CodeExecute->ItemFocused->Index, MAKELPARAM(X, Y));
: :
: : }
: :
: : 이렇게 했는데요.. 찍어보니 해당 루틴으로 들어오기는 들어오는데, 리스트뷰의 아이템 이동은 안되는 것 같습니다..

+ -

관련 글 리스트
62757 ListView 드래그가 안됩니다. 용맨소녀 1063 2010/10/23
62761     Re:ListView 드래그가 안됩니다. 장성호 1567 2010/10/25
62773         감사합니다.. 용맨소녀 965 2010/10/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.