|
저희는 전체프로젝트를 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)에서 어떻게 알 수 있겠습니까?
방법을 아시면 꼭!!! 알려주세요.
쫌 급하거든요...
|