2009-05-29 57 views
2

我想在屏幕上獲得實際的鼠標座標,因此我可以在該位置創建一個本機窗口,但我似乎無法找到正確的方法來正確執行此操作。在flex中的屏幕上的鼠標位置

我曾嘗試過各種東西,我此刻的最接近的事是:

this.contentMouseX and this.contentMouseY 

這給了我現階段這是很好的COORDS,然後我再加上:

NativeApplication.nativeApplication.activeWindow.x and activeWindow.y 

這是關閉的,但這沒有考慮到應用程序標題欄。

必須有一個更容易,更直接的方式做到這一點我相信,任何人都可以提供建議因爲我沒有在谷歌上找到它?

我試過localToGlobal哪個不起作用,似乎'全局'是指在應用程序內,而不是全局的屏幕,對我來說沒有用處。下面是顯示了失敗的例子...

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
    <mx:Script> 
     <![CDATA[ 
      import mx.core.Application; 

      private function click(evt:MouseEvent):void 
      { 
       var pt:Point = new Point(this.contentMouseX, this.contentMouseY); 
       var global:Point = Application.application.localToGlobal(pt); 

       trace("local_x: " + pt.x + " x " + pt.y); 
       trace("global_x: " + global.x + " x " + global.y); 
      } 
     ]]> 
    </mx:Script> 

    <mx:HBox horizontalAlign="center" width="100%"> 
     <mx:Button id="butt" label="Click" click="click(event)" /> 
    </mx:HBox> 
</mx:WindowedApplication> 

回答

5

搶跑後......我們對此深感抱歉...

您可以使用stage.nativeWindow.globalToScreen - 這會做你需要什麼。

根據窗口的位置(爲了完整性) - 您還可以查看stage.nativeWindow.x和stage.nativeWindow.y ---這將爲您提供桌面應用程序的位置 - 從那裏 - 您可以相對於該點進行定位。

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
<mx:Script> 
<![CDATA[ 
import mx.core.Application; 

private function click(evt:MouseEvent):void 
{ 
    var pt:Point = new Point(this.butt.x, this.butt.y); 
    var global:Point = Application.application.localToGlobal(pt); 

    trace("local_x: " + pt.x + " x " + pt.y); 
    trace("global_x: " + global.x + " x " + global.y); 

    var p:Point = stage.nativeWindow.globalToScreen(new Point(this.butt.x, this.butt.y)); 

    trace(p.x + " x " + p.y); 
    var na:NativeWindow = new NativeWindow(new NativeWindowInitOptions()); 
    na.visible = true; 
    na.width = 100; 
    na.height = 100; 
    na.x = p.x; 
    na.y = p.y; 
    na.activate(); 

} 
]]> 
</mx:Script> 


<mx:Button x="10" y="10" id="butt" label="Click" click="click(event)" /> 

</mx:WindowedApplication> 
+0

作爲Rick的評論,我嘗試了這些功能,但他們沒有像我期望的那樣工作。他們根本不轉換爲屏幕共舞。 – Dan 2009-05-29 12:51:40

+0

必須吃午飯 - 但是當我回來時 - 我會再次檢查這一點 - 感謝後續行動,如果這些人沒有幫助,很抱歉。 現在我很感興趣 - 哈 - 讓我有一點點gr and,我會研究這個。 好玩。 – Gabriel 2009-05-29 18:18:14

+0

返回 - 現在檢查。 – Gabriel 2009-05-29 19:42:13

0
//get the application level mouse coordinate 
var local_x : int = this.mouseX; 

//convert this x value into a global coordinate 
var pt : Point = new Point(local_x, 0); 
var global_x : int = this.localToGlobal(pt).mouseX; 
+0

不,不工作。這是我得到的問題,在localToGlobal之後它是相同的值。 'global'在應用程序中,與我閱讀過的屏幕和我使用這些功能的體驗無關。 – Dan 2009-05-29 12:44:06

0

這是否工作:

private function click(evt:MouseEvent):void 
{ 
    var pt:Point = new Point(evt.localX, evt.localY); 
    var global:Point = new Point(evt.stageX, evt.stageY); 

    trace("local_x: " + pt.x + " x " + pt.y); 
    trace("global_x: " + global.x + " x " + global.y); 
} 
+0

不,evt.local是在我點擊的按鈕內的鼠標位置,stagex是鼠標在舞臺內的位置(與在我的文章),我想要鼠標的屏幕共同點。 – Dan 2009-05-29 13:29:41

+0

無賴,對不起,我忍不住 - 沒有FB3的副本在工作中進行測試。祝你好運。 – 2009-05-29 14:42:22

相關問題