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
[8298] Drag&Drop시 잔상이 남는 문제 처리...
초보빌더 [] 1779 읽음    2001-06-18 10:19
안녕하세요... 예전에 이 문제를 가지고 한번 질문을 올렸었더랬는데 답변이 없어 다시 한번
글을 올립니다..

ListView 에서 TreeView 로 Drag&Drop 을 하는데 까지는 성공을 했는데요... 문제는 ListView
에서 TreeView 로 Drag&Drop 을 할때 ListView 의 내용 그러니까 이동하려는 item 의 내용이
화면에 잔상으로 남아 있습니다.. 그리고 마우스의 형태도 남아 있구요... 이 부분을 화면을
refresh 시키는 부분으로 해결 하려고 했으나 사용자가 이동을 하려고 하다가 이동을 하지 않고
다시 원래의 자리로 복귀하는 경우 잔상이 남아 지저분하게 보입니다...
ListView 에서 DragMode 는 Automatic 으로 되어 있습니다...

그런데... 하나의 Item을 옮길때는 그런 현상이 발생하는데.. 다중으로 선택을 하여 Drag&Drop을
하면 깨끗하게 잘 넘어갑니다...

혹시 이런 경험을 해보신 분이 없는지.. ListView에서 TreeView 로의 Drag&Drop은 질문과 답변이
많이 있는 걸 봐서는 이런 경험이 없진 않을꺼 같은데 이와 같은 문제로 나온 말들이 없어
참으로 답답합니다... 고수님들의 도움을 바랍니다... 감사합니다...

p.s : 하나의 Item 을 옮길때, 즉 Drag 할때 마우스와 옮긴다는 표시 그리고 옮기려고 하는 item
의 내용이 희미하게 나타나잖아요... 다중 선택을 할때는 옮긴다는 표시만 나고 Item의 내용은
나타나지 않거든요... 하나의 Item을 옮길때도 다중 선택을 했을때 처럼 옮긴다는 표시만 나고
Item의 내용은 표시가 나지 않는다면 어쩌면 해결이 될수도 있을꺼 같은데..

아무튼 도움을 바랍니다... 감사합니다... 아래에 Drag&Drop 에 관련된 제 소스를 올립니다..
수고하세요...


void __fastcall TNameCard_Form::tvGroupDragOver(TObject *Sender,
      TObject *Source, int X, int Y, TDragState State, bool &Accept)
{
    if( Source->InheritsFrom( __classid( TTreeView ) ) )
        Accept = true;
}
//---------------------------------------------------------------------------

void __fastcall TNameCard_Form::tvGroupDragDrop(TObject *Sender,
      TObject *Source, int X, int Y)
{
    TListItem   *pItem;

    if( m_bStatus ) {
        if ( Source != ( TObject * )tvGroup || tvGroup->Selected == NULL )
            return;
        THitTests HT = tvGroup->GetHitTestInfoAt( X, Y );
        TNodeAttachMode AttachMode;
        TTreeNode *pItem = tvGroup->GetNodeAt( X, Y );

        if( !pItem ) {
            return;
        }

        if ( tvGroup->Selected == pItem ) {
            Application->MessageBoxA( "Group을 이동할 수 없습니다. 대상 Group과 같은 Group입니다.", "그룹 이동 오류", MB_ICONERROR+MB_OK );
            return;
        }

        if ( HT.Contains( htOnItem ) || HT.Contains( htOnIcon ) )
            AttachMode = naAddChild;
        else if ( HT.Contains( htNowhere ) )
            AttachMode = naAdd;
        else if ( HT.Contains( htOnIndent ) )
            AttachMode = naInsert;
        else
            return;

        tvGroup->Selected->MoveTo(pItem, AttachMode);
    }
    else {
        TTreeNode *pTreeItem = tvGroup->GetNodeAt( X, Y );
        pItem = lvPerson->Selected;

        if( !pTreeItem ) {
            return;
        }

        if( pTreeItem->AbsoluteIndex < 1 ) {
            Application->MessageBoxA( "ALL Group으로는 데이터를 옮길 수 없습니다.", "데이터 이동 오류", MB_ICONERROR+MB_OK );
            return;
        }

    tvGroup->Refresh();        //// 이부분은 잔상 때문에 refresh 를 하고 있습니다..
    lvPerson->Refresh();
}
//---------------------------------------------------------------------------

void __fastcall TNameCard_Form::tvGroupEndDrag(TObject *Sender,
      TObject *Target, int X, int Y)
{
    if( Target ) tvGroup->Update();
}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
8298 Drag&Drop시 잔상이 남는 문제 처리... 초보빌더 1779 2001/06/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.