常に前面に表示

AIXインストール中につき、一字違いのAIRでも触るかと思った。

Screenクラス

Screenというクラスがあり、このクラスから使っているPCの画面情報が取得できる。
ということでサンプルを作ってみた。

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="{start()}">
  <mx:Script>
    <![CDATA[
      public function start():void{
        trace("メイン画面");
        trace("画面サイズ"+Screen.mainScreen.bounds);
        trace("色深度"+Screen.mainScreen.colorDepth);
        
        trace("全画面");
        for each(var sc:Screen in Screen.screens){
          trace("画面サイズ"+sc.bounds);
          trace("色深度"+sc.colorDepth);
        }
        
        trace("RECT1");                
        var rect:Rectangle = new Rectangle(0,0,100,100);
        var screens:Array = Screen.getScreensForRectangle(rect);
        for each(var sc:Screen in screens){
          trace("画面サイズ"+sc.bounds);
        }
        trace("RECT2");
        rect = new Rectangle(0,0,2000,2000);
        var screens:Array = Screen.getScreensForRectangle(rect);
        for each(var sc:Screen in screens){
          trace("画面サイズ"+sc.bounds);
        }        
        trace("RECT3");
        rect = new Rectangle(-100,-100,10,10);
        var screens:Array = Screen.getScreensForRectangle(rect);
        for each(var sc:Screen in screens){
          trace("画面サイズ"+sc.bounds);
        }        
      }      
    ]]>
  </mx:Script>
<mx:WindowedApplication>

例えば1600x1200のディスプレイ2台が繋がっているPCで実行すると、こうなる。

メイン画面
画面サイズ(x=0, y=0, w=1600, h=1200)
色深度32
全画面
画面サイズ(x=0, y=0, w=1600, h=1200)
色深度32
画面サイズ(x=1600, y=0, w=1600, h=1200)
色深度32
RECT1
画面サイズ(x=0, y=0, w=1600, h=1200)
RECT2
画面サイズ(x=0, y=0, w=1600, h=1200)
画面サイズ(x=1600, y=0, w=1600, h=1200)
RECT3

ScreenクラスのstaticプロパティのmainScreenを取得すると、メインスクリーンのインスタンスが取得できる。
またScreen.screensの配列からは、すべてのスクリーンのインスタンスが取得できる。
マルチディスプレイの場合、この配列にディスプレイ分のインスタンスがセットされている。


このインスタンスからは、画面の位置、サイズ、色深度が取得できる。
画面の位置というのは、画面の論理的な位置で、例えば1600x1200のディスプレイが2台並んでいるとすると、メイン画面はx=0,y=0、もうひとつはx=1600,y=0となる。


またScreenクラスには、Screen.getScreensForRectangleというstaticメソッドがあって、これは引数のRectangleが表示されるディスプレイの配列を取得できる便利メソッドになっている。
上記の例の場合、RECT1はメインだけ、RECT2は両方のディスプレイ、RECT3はどのディスプレイでも表示されていないことが分かる。
Rectangleが画面外かどうかを判定するには便利かもしれない。


ということで、このScreenからサイズを取ることで、全ディスプレイにかぶさるようなウィンドウを作ることが出来る。
と思いやってみたところ、今のAIRではNativeWindowは幅、高さ共に2880pixelが上限らしく、それ以上の値を入れてもセットされない。
なので、例えば画面を10個並べて、幅10000pixelのウィンドウで流しそうめんをリアルタイムで監視するようなAIRアプリを注文された場合は、素直に断ったほうが御社の為になると思いました。