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
[54656] Re:Re:오늘의 질문; stringgrid 의 drag&drop
김재범 [lucyfer7] 1462 읽음    2008-09-24 14:22
설마 햇는데 역시나 정성호님께서 답변을 해주셨네요.
매번 이렇게 도움 주셔서 감사합니다.

제 코드에 한번 해봐야겠네요. ^^*
장성호님의 코드로 하면 잘 되네요. ㅎㅎ. 당연한건가.
문제는 노드로 되어 있어서 코드를 좀더 보면서 공부를 해야지 제코드를 수정할수 잇다는게 문제네요 ㅡㅜ

장성호 님이 쓰신 글 :
: 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"));
: :     }
: : }

+ -

관련 글 리스트
54653 오늘의 질문; stringgrid 의 drag&drop 김재범 1371 2008/09/24
54654     Re:오늘의 질문; stringgrid 의 drag&drop 장성호 1387 2008/09/24
54656         Re:Re:오늘의 질문; stringgrid 의 drag&drop 김재범 1462 2008/09/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.