2008-09-26 2 views

답변

4

OnPopup 이벤트에서 플래그를 설정할 수 있습니다. 문제는 팝업 메뉴가 닫힐 때를 아는 것입니다. Peter Below에 대한 해결책이 있습니다.

하지만 왜 내가이 질문을 원하니? 어쩌면 근원적 인 문제를 해결할 더 좋은 방법이있을 수 있습니다.

+1

컨트롤 팝업이 메뉴 위로 올라와 있습니다. 이제 컨트롤을 다시 클릭 할 때 특정 조건에서 메뉴를 표시하려고합니다. 문제는 메뉴가 표시되고 클릭이 메뉴가 닫히는 메뉴 바깥에서 발생하며 컨트롤이 메뉴가 표시되는지 여부를 알 수없는 경우입니다. (혼란스럽지 않기를 바란다) – Drejc

+0

@Lars가 Peter Below의 해결책에 대한 링크가이 작업을 수행하는 데 도움이 될 것으로 생각합니다. Lars가 말했듯이, Peter의 코드는 여러분이 일종의 상태/추적 변수를 유지할 수 있도록해야합니다. 행운을 빕니다! – robsoft

+0

Bellow 예제는 정상적으로 작동하지만 메시지가 컨트롤로 전달되지 않고 양식에만 전파되므로 일부 위치에 상태를 저장해야합니다. (적어도 나의 예제에서는) – Drejc

2

이 조금 더 간단 할 것 같다 (I 2007 델파이 사용) :

당신의 WM_CONTEXTMENU 메시지 처리기에서 상속 된 핸들러를 호출하기 전에, 팝업 메뉴를 사용하면 플래그를 설정할 수 있습니다, 표시하는 것입니다. inherited를 호출 한 후 팝업 메뉴가 닫히고 플래그를 재설정합니다.

procedure TForm1.WMContextMenu(var Message: TWMContextMenu); 
begin 
    FPopupActive := True; 
    try 
    OutputDebugString(PChar(Format('popup opening', []))); 
    inherited; 
    finally 
    FPopupActive := False; 
    OutputDebugString(PChar(Format('popup closed', []))); 
    end; 
end;