오늘도 삽집을 하고 있는데요.

AIR에서는 File이라는 클래스를 사용할 수 있더군요.
File클래스를 자세히 보면 FileReference클래스를 상속받고 있어요.
기존에 Flash나 Flex Application에서는 보안상 문제로 파일을 Browse()를 통해서 선택이 되어도 전체경로는 나오지 않습니다. FileReference속성에는 name이라는 속성이 있는데 읽기 전용이며 Browse()통해 파일이 선택이 되면 name속성에는 파일 이름만 들어갑니다.
(어느 플래시카페를 보니까 자바스크립트로 가져오는 법을 올려놨더라구요^^)

하지만, File이라는 클래스는 nativePath라는 속성을 제공하는데 이건 전체경로까지 다나옵니다.
단, AIR에서만 됩니다-_-;

저도 전체 경로가 필요해서 찾고 있었는데 이렇더라구요 ^^
AIR에서는 FileReference를 사용하지 말고, File을 사용하세요.
그대로 상속받고 있기 때문에 다 사용할 수 있구요.
기능도 더 추가된 것 같은데-_-; 아...로컬에 있는 파일을 컨트롤 할 수 있을 껍니다 ^^

뭐 결론은 AIR에서는 File을 쓰고, Flex나 Flash에서는 FileReference(뭐 File클래스를 여기서 사용할 수 없습니다^^)를 사용해요 ^^

혹시 AIR로 뭔가 하려는 분중에 FileReference에서 전체경로를 찾고 계신 분이 있을 것 같아서 올려요^^
 
Posted by 머드초보
,
 

머리나쁘면 평생고생한다더니 그말이 맞습니다!
이거 소스코드 한줄만 고치면 되는 것을 저는 그것도 모르고 계속 샘플분석했어요--;
AIR프로젝트를 만들게 되면 xml이 자동으로 만들어지게 되는데 저는 그건 제가 관리하는게 아니라고 생각했는데 아니더군요. 안에 보면 셋팅할 수 있는게 몇개 있더군요 ^^

우선 기존 윈도우틀을 없애봅시다.

File -> New -> Flex Project를 선택하시고, ProjectName은 NoneWindowApp라고 하고
Application Type은 Desktop application을 선택하시고 Finish를 선택합니다.

프로젝트이름-app.xml파일이 있을 껍니다. 이거를 보게 되면 xml로 되어있는데요.
<initialWindow>
      ...
    <systemChrome>none</systemChrome>
이놈이 주석처리 되어있는데 none을 바꿔주고 주석을 풀어봅시다!

그리고 프로젝트이름.mxml파일을 열어서 vbox에 button을 하나 추가해봅시다.
[code]<mx:VBox>
  <mx:Button label="버튼" />
</mx:VBox>
[/code]
한번 실행해봅시다.

사용자 삽입 이미지
기존의 윈도우는 사라지기는 했습니다만.... 뭔가 또다른 윈도우가 생겼네요--;

저것조차도 없애봅시다--;

<initialWindow>
     ....
    <visible>true</visible>

아까 xml파일의 visible을 true로 바꿔줍니다.
그리고 메인 mxml로 돌아와서 WindowedApplication으로 되어있는 가장 최상위태그를 Application으로 바꿔줍니다.
[code]<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

 <mx:VBox>
    <mx:Button label="버튼" />
 </mx:VBox>
</mx:Application>
[/code]
실행해봅시다.
사용자 삽입 이미지

아.....사라졌군요. 근데 닫을 수가 없군요-_-; 닫기, 최대화, 최소화 를 구현해봅시다 ^^
이 예제는 AIR개발자문서에서 제공하는 예제입니다.
[code]<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

 <mx:Script>
  <![CDATA[
   public function minimizeWindow():void
   {
    this.stage.nativeWindow.minimize();
   }

   public function maximizeWindow():void
   {
    this.stage.nativeWindow.maximize();
   }
   
   public function restoreWindow():void
   {
    this.stage.nativeWindow.restore();
   }
   
   public function closeWindow():void
   {
    this.stage.nativeWindow.close();
   }
  ]]>
 </mx:Script>
 <mx:VBox>
  <mx:Button label="Minimize" click="minimizeWindow()"/>
  <mx:Button label="Restore" click="restoreWindow()"/>
  <mx:Button label="Maximize" click="maximizeWindow()"/>
  <mx:Button label="Close" click="closeWindow()"/>
 </mx:VBox>

</mx:Application>
[/code]
stage라는 놈이 최상위에 있느 놈 같은데 거기에서 nativeWindow라 하면 그 자신의 윈도우를 말하는건가요?-_-;
아....잘모르겠네. 어쨌든 저 nativeWindow라는 객체가 그 해당윈도우를 말하는 것 같습니다.
그 객체의 close, maxmize, minimize등의 메소드를 실행하니 해당윈도우가 작동을 하니 ^^

 
Posted by 머드초보
,
 

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

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 머드초보
,
 
제가 제일 좋아하는 HelloWorld시간이군요-_-;

우선 Adobe Air를 받아야 합니다.
Window용으로 가볍게 받아서 설치합니다. 다음신공으로!
http://labs.adobe.com/downloads/air.html

Adobe Flex Builder 3 Beta 2를 받아야합니다.
Adobe 아이디가 있어야 합니다.
http://labs.adobe.com/downloads/ 
여기서 Flex Builder 3 Beta 2를 선택합니다.

여기에 AIR SDK가 포함되어 있습니다.
물론 AIR SDK만 받아서 컴파일하는 식으로 해도 되는데
전 클릭세대라서-_-;

자 우선 무쟈게 무거운 Flex Builder 3 Beta 2를 설치합시다.
StandAlone이든 Plugin방식이든 어떤 것으로 설치해도 됩니다.

Flex Builder를 실행해봅시다.

File -> New -> Flex Project를 만듭시다.
Project name은 "AirHelloWorld" 로 합니다.
Application type은 AIR를 할꺼니깐 당근 Desktop application (runs in Adobe AIR)를 선택합니다.
Finish를 클릭해서 프로젝트를 만듭시다.

[code]
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
   layout="absolute">
 
</mx:WindowedApplication>
[/code]
기본적으로 저렇게 되어있네요. 이건 WindowedApplication이라는 컴포넌트를 사용하는군요.
저기에 HelloWorld를 찍어봅시다.
[code]
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
   layout="absolute"
title="Hello World">
<mx:Style>
Application
{
background-image:"";
background-color:"";
background-alpha:"0.5";
}
</mx:Style>
<mx:Label text="Hello AIR" horizontalCenter="0" verticalCenter="0"/>
</mx:WindowedApplication>
[/code]
Label컴포넌트를 하나 추가해서 Hello AIR라고 찍었네요. Flex랑 문법이 같아요-_-;
Run As를 실행해서 Adobe AIR Application을 선택하고 OK를 누릅시다.
사용자 삽입 이미지
아...예전에 빡씨게 윈도우프로그래밍을 공부하던게 생각나네요-_-;
이건뭐 디게 쉬워졌네요. 기존 C/C++기반의 윈도우즈프로그래밍보다 강력하다고는 말 못하겠지만, 웹과 연동하거나 데이터를 다루는 부분은 더욱 코딩하기 쉬워질 것 같네요.
MFC프로그래밍 해보신 분들은 알껍니다-_-;

이거를 배포해보도록 합시다-_-; install프로그램까지 친절하게 만들어주는군요-_-;

이클립스에 Flex Navigator에서 AirHelloWorld를 클릭한 뒤 export를 합시다.
그러면 Flex폴더안에 Export Release Version이라는 게 있습니다. 고걸 선택합니다.
다 default로 하고 export하는 파일의 확장자는 air인데, 이거를 더블클릭하면 자동으로 설치가 됩니다.
(물론 AIR가 설치된 Desktop에서만 되겠지요 ^^)

다음으로 넘어가면 Digital Signature라고 해서 디지털서명같은데요. 잘모르겠습니다-_-;
그냥 Create로 하나생성해서 이름쓰고, 비번정하고, 한다음에 비밀번호를 씁시다 ^^
(저작권 보호 그런건가요?-_-;)

그다음 Finish를 클릭합니다. 그러면 air파일이 생성되었습니다.
이거를 설치해봅시다.
export한 파일을 찾아서 더블클릭합니다.
사용자 삽입 이미지
그러면 저렇게 뜨는데 install을 클릭해서 설치를 해봅시다.
desktop에 아이콘을 추가할 꺼냐고 묻네요.
설치후에 application을 실행할껀가도 묻는군요.
어디다 설치할지도 묻네요. Program Files로 되어있을텐데 저기다 설치하면 자동으로 폴더가 AirHelloWorld가 만들어지게 됩니다. 설치가 완료되면...
아까 플렉스에서 실행한 화면이 뜨네요-_-;

지울때에는 프로그램 지울 때 처럼 지우세요-_-;
사용자 삽입 이미지

이거 뭔가 새로운 세계에 온 듯 하네요-_-;

따라하기 출처 - Developing AIR Applications with Adobe Flex (adobe)
 
Posted by 머드초보
,