음 뭔가 해보려고 하는데 잘 안되네요-_-;
원하는 모양은 아니지만 시스템트레이에 아이콘 띄우는 것 까지 성공했습니다--;
우선 저는 윈도우를 없애고 싶은데 이게 은근히 어렵네요-_-;

FLEX3 Beta 3에서 테스트했습니다. Beta2에서는 안됩니다.
방식이 조금 업그레이드되었어요. Beta2에서는 Shall어쩌구를 썼는데 바뀌었네요.
AIR예제니까 프로젝트 만들 때 Desktop Application으로 만들어야겠죠? ^^

예제입니다.
[code]
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
 applicationComplete="init();">

 <mx:Script>
  <![CDATA[
   public function init():void {
   
    var icon:Loader = new Loader();
    var iconMenu:NativeMenu = new NativeMenu();
    var visibleCommand:NativeMenuItem = iconMenu.addItem(new NativeMenuItem("Visible"));
    var exitCommand:NativeMenuItem = iconMenu.addItem(new NativeMenuItem("Exit"));
   
    visibleCommand.addEventListener(Event.SELECT,
     function(event:Event):void {
      stage.nativeWindow.visible = true;
     }
    );
   
    exitCommand.addEventListener(Event.SELECT,
     function(event:Event):void {
      NativeApplication.nativeApplication.icon.bitmaps = [];
      NativeApplication.nativeApplication.exit();
     }
    );
     
    if (NativeApplication.supportsSystemTrayIcon) {
     NativeApplication.nativeApplication.autoExit = false;
     icon.contentLoaderInfo.addEventListener(Event.COMPLETE, iconLoadComplete);
     icon.load(new URLRequest("icons/AIRApp_16.png"));
     var systray:SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon;
     systray.tooltip = "AIR application";
     systray.menu = iconMenu;
    }
 
    if (NativeApplication.supportsDockIcon){
     icon.contentLoaderInfo.addEventListener(Event.COMPLETE,iconLoadComplete);
     icon.load(new URLRequest("icons/AIRApp_128.png"));
     var dock:DockIcon = NativeApplication.nativeApplication.icon as DockIcon;
     dock.menu = iconMenu;
    }
   }
   
   private function iconLoadComplete(event:Event):void {
    NativeApplication.nativeApplication.icon.bitmaps =
     [event.target.content.bitmapData];
   }
   
   public function hide():void {
    stage.nativeWindow.visible = false;
   }
  ]]>
 </mx:Script>
 <mx:Button label="창숨기기버튼" click="hide();"/>
 
</mx:WindowedApplication>
[/code]
air 개발자문서를 보고 약간 변형에서 작성해봤습니다.
참숨기기버튼을 클릭하면 창이사라지구요. 트레이아이콘에서 오른쪽버튼을 눌러서
visible을 클릭하면 다시 생기게 만들었습니다. exit누르면 종료하게 하구요.

NativeMenuItem 클래스로 메뉴를 추가하구요.
그 객체에 addEventListener해서 Event.SELECT를 해서 함수를 지정해주면 선택된 메뉴에 대해서 지정된 함수를 호출하는 겁니다.

NativeApplication.supportsSystemTrayIcon 이거는 시스템트레이아이콘을 지원하는 놈이냐? 라고 물어보는겁니다. 윈도우는 당연히 지원하겠지요 ^^
만약 운영체제가 맥os라면 NativeApplication.supportsDockIcon라고 물어봤을 때 지원하는 것 같습니다.

크로스플랫폼(맞나-_-)형태로 제작이 되어있네요. 크로스운영체제!! 어디든 가능하게 ^^

샘플실행할 때 icons경로 밑에 AIRApp_128.png파일과 AIRApp_16.png파일이 있어야겠죠?^^

 
Posted by 머드초보
,
 
아직 저도 잘 모릅니다. 그래도 오늘 많이 삽질했으니 포스팅하겠습니다-_-;

플렉스를 이용한 환경을 다 만들었으면 플렉스를 해봐야겠죠!

FlexBuilder를 실행해봅시다.

익숙한 이클립스가 뜹니다! 덕분에 더 자신감을 가지게 해줍니다-_-; 자바개발자라면 누구나 써본 이클립스로 플렉스를 할 수 있다니!

File -> New -> Flex Project를 선택합니다.
3가지 종류가 나오는데 뭐 잘 모르니까 Basic를 선택합시다-_-;

넥스트를 눌러서 프로젝트 이름은 HelloWorld라고 찍읍시다. 정말 좋아하는 단어입니다.
Finish를 눌러서 프로젝트를 생성합니다.

HelloWorld.mxml 이라는 파일이 처음에 열려있네요.
mxml은 무슨 확장자냐! Machine-oriented extensible markup language 이라고 하더군요. 저도 잘모르겠습니다. 그런데 xml인거 같습니다 ^^ 태그 열고 닫고 하는게 xml과 같습니다.

이 프로젝트에서 ActionScript를 추가해봅시다.
File -> New -> ActionScript를 선택하고, HelloWorld폴더를 선택하고, 이름은 Greeter.as로 씁시다.

여기다가 코딩을 합시다.

[code]
package {
    public class Greeter {
        public static function sayHello():String {
            var greeting:String = "Hello World!";
            return greeting;
        }
    }
}
[/code]

내용을 보시면 package는 잘모르니 생깝시다. class를 정의 했는데 Greeter라는 클래스입니다. 이거의 멤버함수로 sayHello라는 것이 있습니다. 이건 리턴타입을 맨뒤에 써줍니다. 변수는 무조건 var로 선언하고, 타입은 그 뒤에 써줍니다. 안써주면 Object형이 됩니다.

클래스를 작성했으니 이 클래스를 mxml에서 사용해보도록 합시다.

[code]
<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*"   
 layout="vertical" creationComplete="initApp()"> 
 <mx:Script> 
 <![CDATA[ 
  public function initApp():void { 
       mainTxt.text = Greeter.sayHello(); 
     } 
 ]]> 
 </mx:Script> 
 <mx:TextArea id="mainTxt" width="400" /> 
</mx:Application>
[/code]

script부분의 initApp()함수를 보면 mainTxt.text라는 곳에다가 Greeter클래스의 static함수인 sayHello를 호출해서 넣겠다는 표현으로 보이구요.
아래에는 TextArea를 만드는데 이것의 이름이 mainTxt입니다. 거기의 text를 적겠다는 것 같습니다.

대충 보면 html처럼 위에 script는 자바스크립트라고 생각되고, 아래는 html처럼 input태그가 들어가는 것처럼 생각해도 되려나-_-; 어쨌든 그런 구조인거 같습니다 ^^

위에 플레이버튼 같이 생긴거 run을 클릭하면(Ctrl + F11) 아래와 같은 화면이 뜰껍니다.

사용자 삽입 이미지

정확한 동작구조는 파악을 못했는데요-_-; 좀더 공부해봐야 할꺼같습니다 ^^
 
Posted by 머드초보
,