음 뭔가 해보려고 하는데 잘 안되네요-_-;
원하는 모양은 아니지만 시스템트레이에 아이콘 띄우는 것 까지 성공했습니다--;
우선 저는 윈도우를 없애고 싶은데 이게 은근히 어렵네요-_-;
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파일이 있어야겠죠?^^
'예제'에 해당되는 글 7건
- 2007.12.16 [AIR FLEX] 시스템트레이아이콘(system tray icon) 예제입니다.
- 2007.09.02 [Flex] 플렉스로 HelloWorld!를 찍어봅시다!(액션스크립트3.0) 2
아직 저도 잘 모릅니다. 그래도 오늘 많이 삽질했으니 포스팅하겠습니다-_-;
플렉스를 이용한 환경을 다 만들었으면 플렉스를 해봐야겠죠!
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) 아래와 같은 화면이 뜰껍니다.
정확한 동작구조는 파악을 못했는데요-_-; 좀더 공부해봐야 할꺼같습니다 ^^
플렉스를 이용한 환경을 다 만들었으면 플렉스를 해봐야겠죠!
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) 아래와 같은 화면이 뜰껍니다.
정확한 동작구조는 파악을 못했는데요-_-; 좀더 공부해봐야 할꺼같습니다 ^^