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
[15695] [질문]StringGrid의 Drag에대해.("많은 답변 부탁드립니다.")
question [] 773 읽음    2002-02-21 15:25
저희는 전체프로젝트를 BPK형식으로, 그 project안에서 개별 폼을 만들어서 개별폼을 BPL이라는 형식으로 하고 있습니다.

c++builder를 설치하면 생성되는 EXAMPLE폴더에 있는 예제중 Filenamex라는 BPR이 있더군요.
그 프로그램은 오른쪽Grid에서 선택한 항목을 왼쪽 Grid로 옮겨서 화일의 위치를 이동한다던가 할때 사용하는 겁니다.(쉬운 예로 윈도우 탐색기를 생각하시면 되죠.)
이 프로그램과 같이 같은 폼안에서 혹은 같은 BPR에서 이동을 시킬때에 대해 질문을 하고자 하는게 아니고, 각각 다른 개별 폼간에 이동을 하고자 하는 경우입니다.

***오른쪽 Grid에서 발생하는 event***
//---------------------------------------------------------------------
void __fastcall TFormMain::FileListEndDrag(TObject *Sender,TObject *Target,
                                                               Integer X, Integer Y)

{
   if (Target != NULL)
   FileList->Update();
}
//---------------------------------------------------------------------
void __fastcall TFormMain::FileListMouseDown(TObject *Sender,
     TMouseButton Button, TShiftState Shift, Integer X, Integer Y)
{
  if(Button==mbLeft)
     {
        if (dynamic_cast<TFileListBox *>(Sender)!=0)
               {
                  if(dynamic_cast<TFileListBox *>(Sender)->ItemAtPos(Point(X,Y),
                                         True) >=0)
                    dynamic_cast<TFileListBox *>(Sender)->BeginDrag(false, -1);
               }
     }
}


*** 왼쪽 Grid에서 발생하는 event***
//---------------------------------------------------------------------
void __fastcall TFormMain::DirectoryOutlineDragDrop(TObject *Sender,
                                                                             TObject *Source,
                                                                             int X, int Y)
{
  if (dynamic_cast<TFileListBox *> (Source)!=0)
     ConfirmChange("Move", FileList->FileName,
     DirectoryOutline ->Items[DirectoryOutline ->GetItem(X, Y)]->FullPath);
}
//---------------------------------------------------------------------
void __fastcall TFormMain::DirectoryOutlineDragOver(TObject *Sender,
                                                                             TObject *Source,
                                                                             int X, int Y,
                                                                             TDragState State,
                                                                             bool &Accept)
{
  if (dynamic_cast<TFileListBox *> (Source))
        Accept = True;
}

**************************************************************************
코드를 보시면 아시겠지만, FileList(Grid)에서 DirectoryOutline(Grid)로 dragging을 하면서
event처리가 이루어 진다는 걸 아실수 있을겁니다.
FileListEndDrag()와 FileListMouseDown()는 문제가 되지 않으나,
DirectoryOutlineDragDrop(), DirectoryOutlineDragOver()이벤트에서
"dynamic_cast<TFileListBox *> (Source)"처럼 처리된것이 문제입니다.

FileListEndDrag()와 FileListMouseDown()는 ABCD화면(BPL)에서 발생하고,
DirectoryOutlineDragDrop()와 DirectoryOutlineDragOver()는 EFGH화면(BPL)에서 발생해야 한다면,
ABCD화면(BPL)에 있는 FileList라는 이름을 가진 Grid를 EFGH화면(BPL)에서 어떻게 알 수 있겠습니까?

방법을 아시면 꼭!!! 알려주세요.
쫌 급하거든요...


+ -

관련 글 리스트
15695 [질문]StringGrid의 Drag에대해.("많은 답변 부탁드립니다.") question 773 2002/02/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.