2012-08-13 4 views
1

예상대로 작동하는 팝업 메뉴가 있습니다. 같은 개체의 끌어서 놓기 기능이 예상대로 작동합니다. 그들을 함께 넣어 ...드래그 앤 드롭으로 해석되는 TPopupMenu를 마우스 오른쪽 버튼으로 클릭하십시오.

마우스 오른쪽 버튼을 클릭하면 팝업 메뉴가 나타납니다. 메뉴가 끝나면 의 팝업 메뉴에서 왼쪽 버튼을 마우스 왼쪽 버튼으로 클릭하고 드래그 앤 드롭 기능을 호출합니다.이 때 마우스 오른쪽 버튼 클릭은 지금까지 보류 중이던 왼쪽 클릭이었던 것처럼 보입니다. 그 때 풀어 놓았다.

void __fastcall myGrid::eDragDrop(System::TObject *Sender, System::TObject *Source, int X, int Y) 
{ 
    while((Sender != this) && (Sender != NULL)) 
    { 
    TControl *control = dynamic_cast < TControl * > (Sender); 
    if(control != NULL) 
    { 
     X += control->Left; 
     Y += control->Top; 
     Sender = control->Parent; 
    } 
    else 
    { 
     Sender = NULL; 
    } 
    } // while 
    // Check for a drop onto the Chart 

    if((Column != NULL)&&(Column->Visible)&& (Column->HeaderIndex>=0)) 
    { 
    int Xt = X - FHeaderSB->Left + FHorzScroll->Position; 
    int HeaderIndex = Column->HeaderIndex; 
    if((Xt > FHeaderSections->Items[HeaderIndex]->Left) && (Xt < FHeaderSections->Items[HeaderIndex]- >Right)) 
    { 
     Xt -= FHeaderSections->Items[HeaderIndex]->Left; 
     GotDragDropTime = true; 
     DragDropTime = Column->GetTimeFromPosition(Xt); 
    } // if 
    } // if Visible 


    if(fDragDrop != NULL) 
    { 
    fDragDrop(Sender, Source, X, Y); 
    } 
} 

내가 잘못 했습니까? 이 문제를 어떻게 해결할 수 있습니까?

+3

일부 코드를 표시 할 수 있습니까? 추가 코드 (OnMouseXYZ 이벤트)가있어 팝업을 표시하거나 드래그 앤 드롭을 구현합니까? – GolezTrol

+3

여기에 표시된 코드는 실행 시점에 이미 너무 늦었 기 때문에 관련성이 없습니다. 끌기 작업이 이미 시작되었습니다. 당신은 처음에 어떻게 거기에 도착했는지 알아 내야합니다. 마우스 이벤트 및 컨트롤의 DragMode 속성에 대해 알려주십시오. (또한이 함수의 첫 번째 루프는'this-> ScreenToClient (Sender-> ClientToScreen (x, y))'를 다시 구현 한 것 같습니다.) –

답변

0

발견! 어떤 버튼을 클릭했는지 확인하지 않고 PendingDrag 플래그가 설정되어있는 OnMouseDown이라는 함수에 감시 기능이 있습니다.

코드에서 얼마나 많은 드래그 기능이 제어되는지 알지 못했습니다. 결국 Borland C++ Builder 6의 결함이 아닙니다.

의견을 보내 주셔서 감사합니다. 그들은 내가 그 벌레를 찾도록 도왔다.

관련 문제