AIRやFLASHなどを表示するのに不便なので、ブログから自作サイトに移転します。

N2-Works移転先

今後はこちらで更新を行っていきます。


エラーダイアログを作成しようとした時に大ハマリしたのでメモしておきます。


しばらく調査してみたのですが、モーダルダイアログを簡単に作成するようなAPIは、用意されていないようです。


ならNativeWindowでダイアログを作成してしまうことにしたのですが、そこで変な挙動を確認しのです。


私はmxmlを使用せず、全てActionScriptで記述しているのですが、エントリポイントになるクラスから初期ウインドウにアタッチする方法は皆様はご存知でしょうか?


以下のようなコードです。

package  
{	
    // SYSTEM PACKAGE
    import flash.display.*;

    // エントリポイントHogeクラス
    public class Hoge extends Sprite
    {
        // コンストラクタ
        public function Hoge() 
       {
            /**
             * 初期ウインドウへのアタッチ例
              */
            // ウインドウ幅の取得
              trace(this.stage.nativeWindow.width);
            // ウインドウ高さの取得
              trace(this.stage.nativeWindow.height);
        }
    }
}


例としてwidthとheightの取得を挙げましたが、エントリポイントのクラスが保持しているStage.nativeWindowのメソッドやプロパティから色々と操作できます。


話が逸れましたが、エラーダイアログ作成時に何が起きたかというと、新たに作成したnativeWindowに配置したSpriteが意図した大きさにならなかったのです。


それどころか、そのSpriteに配置したTextFieldも設定した値とかけ離れた大きさになってしまいました。


これは何が原因かというと、nativeWindowは新規に作成した場合、Stage.scaleModeとStage.alignが正しく設定されていないからです。


ただしここでいう正しい設定というのは、左上隅が(0, 0)になりwidthやheightの単位がpixel単位で表示されるということです。AIRの仕様書にはこれがデフォルトであると載っています。


// 新規作成するウインドウのオプションを設定
var option:nativeWindowInitOptions = new NativeWindowInitOptions();
option.systemChrome = "standard";

// ウインドウを新規作成
var window:nativeWindow = new NativeWindow(option);

// scaleModeとalignを正しく設定
window.scaleMode = StageScaleMode.NO_SCALE;    // 拡大縮小なし
window.align = "TL";                           // 左上隅に座標(0,0)を設定


この設定を行わないと、こちらの意図した座標系とはなりませんので注意が必要です。


しかしHowTo本には何も設定していないウインドウの作成までしか載っていないので解決が

大変でした。もう少し突っ込んだ内容の本は売ってないもんですかね(笑)