AIR のウインドウ (1) -- メインウインドウ で、いろいろなウインドウを作成しましたが、 メインウインドウでは設定でき無い type を使用するには、2次ウインドウを作成 して使用する必要があります。 2次ウインドウを使用すれば、自由にウインドウ設定ができるようになるので、 メインウインドウは特に必要無いかもしれません。ですから、それを想定して、 AIR のウインドウ (2) -- メインウインドウ では、メインウインドウをシステムトレイ に登録して動作するようにしました。 2次ウインドウを作成するには、Window クラスを別ファイルで作成して、 ユーザークラス( Window クラスを継承した形 ) をインスタンス化して使用します ユーザークラスと呼び出しtype="utility"
![]() ![]() systemChrome が standard と none での見た目の差は、type="normal"と差はありませんが、 utility では、タスクバーに表示されません。standard の場合には、「閉じる」ボタンしか 無いので処理を実装すれば矛盾しませんが、none の場合では最小化や最大化が有効になっているので カスタマイズが必要です ↓ minimizable="false" maximizable="false" LboxWindow.mxml
01. <?xml version= "1.0" encoding= "utf-8" ?> 02. <mx:Window 03. xmlns:mx= "http://www.adobe.com/2006/mxml" 04. 05. type= "utility" 06. systemChrome= "none" 07. transparent= "false" 08. showFlexChrome= "true" 09. 10. initialize= "initData();" 11. creationComplete= "initApp1()" 12. applicationActivate= "initApp2()" 13. 14. visible= "true" 15. usePreloader= "true" 16. 17. backgroundAlpha= "1" 18. 19. alwaysInFront= "false" 20. 21. title= "Flex" 22. titleIcon= "@Embed('icon.png')" 23. 24. width= "600" 25. height= "300" 26. 27. horizontalAlign= "center" 28. verticalAlign= "middle" 29. > 30. 31. <mx:Script> 32. <![CDATA[ 33. 34. // ********************************************************* 35. // initialize 36. // ********************************************************* 37. public function initData(): void { 38. 39. trace( "[App:beforeDisplay]" ); 40. 41. } 42. 43. // ********************************************************* 44. // creationComplete 45. // ********************************************************* 46. private function initApp1(): void { 47. 48. trace( "[App:afterDisplay]" ); 49. 50. } 51. 52. // ********************************************************* 53. // applicationComplete 54. // ********************************************************* 55. private function initApp2(): void { 56. 57. trace( "[App:start]" ); 58. 59. dr.setFocus(); 60. 61. } 62. 63. 64. ]]> 65. </mx:Script> 66. 67. 68. <mx:Image id= "dr" source= "@Embed('dr.png')" /> 69. 70. <mx:HBox> 71. <mx:TextInput id= "data" width= "400" /> 72. <mx:Button 73. id= "btn" 74. label= "参照" 75. /> 76. </mx:HBox> 77. 78. 79. </mx:Window> 呼び出し部分
01. import LboxWindow; 02. 03. public var win:LboxWindow = new LboxWindow(); 04. public var rect:Rectangle; 05. public var primaryScreen:Screen; 06. 07. // ********************************************************* 08. // initialize 09. // ********************************************************* 10. public function initData(): void { 11. 12. trace( "[App:beforeDisplay]" ); 13. 14. // ********************************************************* 15. // 表示レイアウトが完成する前に、 16. // タイトルのアイコンを Image に転送しておきます 17. // initApp1 では正しいビットマップが作成されません 18. // ********************************************************* 19. app_icon.source = Object( this .titleIcon); 20. 21. primaryScreen = Screen.mainScreen; 22. rect = primaryScreen.bounds; 23. 24. win.open(); 25. win.nativeWindow.x = (rect.width- this .nativeWindow.width)/ 2 ; 26. win.nativeWindow.y = (rect.height- this .nativeWindow.height)/ 2 - 200 ; 27. } type="lightweight" では、systemChrome は none でのみ動作します。 見た目の差はありませんが、マニュアルでは「最小ウインドウ」とあります。 やはり、タスクバーに表示されません。 type="lightweight"
![]() タスクバーに表示されない、最小化と元のサイズに戻すtype="utility" でかつ systemChrome="none" の場合、最小化ボタンが有効です。 しかし、最小化してしまうとタスクバーに表示されないので戻せません。 実際バグっぽい動きもしますので、最小化した場合は「非表示」にし、 システムトレイのメニューに「元のサイズに戻す」を実装します。 ![]() 001. <?xml version= "1.0" encoding= "utf-8" ?> 002. <mx:Window 003. xmlns:mx= "http://www.adobe.com/2006/mxml" 004. 005. type= "utility" 006. systemChrome= "none" 007. transparent= "false" 008. showFlexChrome= "true" 009. 010. initialize= "initData();" 011. creationComplete= "initApp1()" 012. applicationActivate= "initApp2()" 013. 014. visible= "true" 015. usePreloader= "true" 016. 017. backgroundAlpha= "1" 018. 019. alwaysInFront= "false" 020. 021. title= "Flex" 022. titleIcon= "@Embed('icon.png')" 023. 024. width= "600" 025. height= "300" 026. 027. horizontalAlign= "center" 028. verticalAlign= "middle" 029. 030. minimizable= "true" 031. maximizable= "false" 032. 033. displayStateChange= "miniAction(event)" 034. close= "exitApp()" 035. > 036. 037. <mx:Script> 038. <![CDATA[ 039. 040. // ********************************************************* 041. // initialize 042. // ********************************************************* 043. public function initData(): void { 044. 045. trace( "[App:beforeDisplay]" ); 046. 047. } 048. 049. // ********************************************************* 050. // creationComplete 051. // ********************************************************* 052. private function initApp1(): void { 053. 054. trace( "[App:afterDisplay]" ); 055. 056. } 057. 058. // ********************************************************* 059. // applicationComplete 060. // ********************************************************* 061. private function initApp2(): void { 062. 063. trace( "[App:start]" ); 064. 065. dr.setFocus(); 066. 067. } 068. 069. // ********************************************************* 070. // 最小化の処理 071. // ********************************************************* 072. private function miniAction( e:flash.events.NativeWindowDisplayStateEvent ): void { 073. 074. trace( "[State] : " + e.afterDisplayState); 075. 076. // 最小化の場合のみ 077. if ( e.afterDisplayState == "minimized" ) { 078. this .visible = false ; 079. } 080. 081. } 082. 083. // ********************************************************* 084. // アプリケーション終了 085. // ********************************************************* 086. private function exitApp(): void { 087. 088. mx.core.Application.application.nativeApplication.icon.bitmaps = []; 089. // 終了 090. mx.core.Application.application.exit(); 091. 092. } 093. 094. 095. ]]> 096. </mx:Script> 097. 098. 099. <mx:Image id= "dr" source= "@Embed('dr.png')" /> 100. 101. <mx:HBox> 102. <mx:TextInput id= "data" width= "400" /> 103. <mx:Button 104. id= "btn" 105. label= "参照" 106. /> 107. </mx:HBox> 108. 109. 110. </mx:Window> Mainw.mxml の メニュー追加
01. // セパレータ 02. menuItem = nativeMenu.addItem( new NativeMenuItem( "" , true )); 03. // 最小化 04. menuItem = nativeMenu.addItem( new NativeMenuItem( "最小化" )); 05. menuItem.addEventListener(flash.events.Event.SELECT, 06. function(): void { 07. win.minimize(); 08. win.visible = false ; 09. } 10. ); 11. // 元に戻す 12. menuItem = nativeMenu.addItem( new NativeMenuItem( "元に戻す" )); 13. menuItem.addEventListener(flash.events.Event.SELECT, 14. function(): void { 15. win.visible = true ; 16. win.restore(); 17. } 18. ); |