2011-07-29 4 views
1

응용 프로그램 제한 시간 기능 (flex4)을 구현 중입니다. 내가 뭘 찾았는지 마우스와 키보드 이벤트입니다. 내가 들었습니다 :PopUpManager로 마스크 된 마우스 및 키보드 이벤트를 얻는 방법

FlexGlobals.topLevelApplication.addEventListener(MouseEvent.MOUSE_MOVE, resetLastActivity); 
FlexGlobals.topLevelApplication.addEventListener(KeyboardEvent.KEY_DOWN, resetLastActivity); 

은 팝업 창이 존재할 때 마스크되어 있습니다. 이 코드는 구성 요소의 생성자에 있습니다. 구성 요소가 블록의 주 응용 프로그램에 추가됩니다.

이러한 시스템 생성 이벤트가 PopUpManager 표시 객체에 의해 중단되지 않게하려면 어떻게합니까?

감사합니다.

+0

그게 제가 직면 한 문제입니다. 당분간 나는 모든 팝업을 추적하고 있으며 타임 아웃을 위해 eventlisteners를 추가하고 있습니다. –

답변

3

topLevelApplication 대신 Stage에서 수신 대기하십시오.

(FlexGlobals.topLevelApplication as Application).stage.addEventListener(MouseEvent.MOUSE_MOVE, resetLastActivity); 
(FlexGlobals.topLevelApplication as Application).stage.addEventListener(KeyboardEvent.KEY_DOWN, resetLastActivity); 

업데이트 :

에 보관 난 당신이 그런 짓을해야합니다, 그래서 topLevelApplication 공식적 개체를 반환 생각 topLevelApplication

stage property를 사용하여 무대에 액세스 해당 구성 요소의 creationComplete 이벤트가 발생하기 전까지 스테이지가 topLevelApplication에 설정되어 있지 않습니다. 비 UI 클래스의 스테이지에 이벤트 리스너를 추가하는 경우 topLevelApplication에서 creationComplete가 시작될 때까지이 작업이 완료되지 않았는지 확인해야합니다.

이렇게하려면 생성자의 topLevelApplication의 creationComplete 메서드에 이벤트 수신기를 추가합니다.

(FlexGlobals.topLevelApplication.addEventListener(FlexEvent.CREATION_COMPLETE, onCreationCompete); 

MXML UIComponent 인 경우 해당 코드를 생성자 대신 preinitialize 이벤트 처리기에 추가 할 수 있습니다.

public function onCreationComplete(event:FlexEvent):void{ 
    (FlexGlobals.topLevelApplication as Application).stage.addEventListener(MouseEvent.MOUSE_MOVE, resetLastActivity); 
    (FlexGlobals.topLevelApplication as Application).stage.addEventListener(KeyboardEvent.KEY_DOWN, resetLastActivity); 
} 
+0

1120 : 정의되지 않은 속성 응용 프로그램에 대한 액세스. - 무대 .. .. '캐스팅'을하지 않고서도 .stage를 추가하는 것만으로는 작동하지 않습니다 ... 컴파일되지만 런타임 충돌이 발생합니다. – reidLinden

+0

@reidLinden 리스너를 언제 추가합니까? 스테이지는 creationComplete가 실행될 때까지 정의되지 않습니다. – JeffryHouser

+0

내 코드가 생성자의 구성 요소에 있습니다. 컴포넌트는 메인 어플리케이션의 블록에 추가됩니다. – reidLinden

1

이것은의 creationComplete을 귀찮게하지 않고 더 우아하게 작동합니다

그런 다음이 생성이 완료 핸들러 될 것이다.

FlexGlobals.topLevelApplication.systemManager.addEventListener(MouseEvent.MOUSE_MOVE, resetSessionTimer); 
FlexGlobals.topLevelApplication.systemManager.addEventListener(KeyboardEvent.KEY_DOWN, resetSessionTimer); 
관련 문제