설마 햇는데 역시나 정성호님께서 답변을 해주셨네요.
매번 이렇게 도움 주셔서 감사합니다.
제 코드에 한번 해봐야겠네요. ^^*
장성호님의 코드로 하면 잘 되네요. ㅎㅎ. 당연한건가.
문제는 노드로 되어 있어서 코드를 좀더 보면서 공부를 해야지 제코드를 수정할수 잇다는게 문제네요 ㅡㅜ
장성호 님이 쓰신 글 :
: VCL에서 DragDrop기능은 TControl에 잘 구현되어 있습니다.
:
:
: DragMode 가 dmManual 일 경우에 대게
:
: 1. Control->BeginDrag()
: - MouseDown이나 MouseMove 이벤트 또는 아무때든지 ...
: 2. OnDragOver 이벤트 핸들러에서 Accept 결정
: 3. OnDragDrop 이벤트 핸들러에서 Drop후에 작업 코딩
:
: 아래는 간단한 TStringGrid를 이용한 DragDrop 샘플입니다.
:
:
: int ADragCol,ADragRow;
: void __fastcall TForm1::StringGrid1MouseDown(TObject *Sender,
: TMouseButton Button, TShiftState Shift, int X, int Y)
: {
: //
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::StringGrid1MouseMove(TObject *Sender,
: TShiftState Shift, int X, int Y)
: {
: if(Shift.Contains(ssLeft) )
: {
: StringGrid1->MouseToCell(X,Y,ADragCol,ADragRow);
: StringGrid1->BeginDrag(true,0);
: }
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::StringGrid1DragOver(TObject *Sender,
: TObject *Source, int X, int Y, TDragState State, bool &Accept)
: {
: int ARow,ACol;
: StringGrid1->MouseToCell(X,Y,ACol,ARow);
:
: if(ARow==ADragRow)Accept=false;
: else Accept=true;
: // Drag 하는 Row와 현재 마우스위치의 Row가 같으면 Accept=false
: // Accept=false 인경우에 마우스를 놓아도 DragDrop이벤트가 발생하지 않음
:
: }
: //---------------------------------------------------------------------------
:
: //Drop하면 Source와 Target 의 Row를 Replace함
: void __fastcall TForm1::StringGrid1DragDrop(TObject *Sender,
: TObject *Source, int X, int Y)
: {
: int ADropRow,ADropCol;
: StringGrid1->MouseToCell(X,Y,ADropCol,ADropRow);
:
: TStringList *lst=new TStringList;
: lst->Assign(StringGrid1->Rows[ADragRow]);
: StringGrid1->Rows[ADragRow]->Assign(StringGrid1->Rows[ADropRow]);
: StringGrid1->Rows[ADropRow]->Assign(lst);
: delete lst;
:
:
: }
: //---------------------------------------------------------------------------
:
:
:
: 그럼..
:
:
: 김재범 님이 쓰신 글 :
: : stringgrid 에서 drag&drop을 하려고 합니다.
: :
: : 사용하는 함수나 예제가 부족해서 어떻게 사용해야 할지 잘 모르겠네요.
: :
: : 영상리스트를 만들어서 드래그 앤 드롭으로 영상의 순서를 바꿀수 있도록 하려고 합니다.
: :
: : 노드를 사용해서 하는 거라 바로 사용할수는 없겠지만, 사용 예제와 함수 등을 좀 알려주시면 감사하겠습니다.
: :
: : tmsstringgrid를 사용햇는데 사용면에서는 같은것 같으니 stringgrid 사용법을 알려주시면 감사하겠습니다.
: :
: : 전 계속 또 찾아봐야겠네요 ..
: :
: : 아래에 제가 임의 적으로 구현하고 싶은 코드를 짜봤습니다. 작동은 안 합니다. ;;
: : 제가 하고 싶어하는 것을 코드로 설명하기 위한 예시용?
: : 엉성한 저의 코드 실력 나오네요 ...
: :
: : void __fastcall TForm1::GridDragDrop(TObject *Sender, TObject *Source,
: : int X, int Y)
: : {
: : int Index = Grid->Row - 1; // 현재 선택된 row 값을 얻기위해.
: : int ARow,ACol;
: :
: : Grid->MouseToCell(X,Y,ACol,ARow); // 도착한 row 값의 얻기 위해
: : TPlayListObject Object = *m_List->Items[Index]; // 선택한 row값의 정보를 저장
: :
: : if(m_Client->SetObject(CHANNEL, ARow, Object)) // 도착한 row 값에 저장하는게 맞다면 실행.
: : {
: : *m_List->Items[ARow] = Object; // 도착한 row 값에 저장 후 다시 그리기..
: : RefreshList();
: : RepaintList();
: : }
: : else
: : {
: : Memo1->Lines->Add(AnsiString().sprintf("SetObjectParam Error"));
: : }
: : }