Понятия не имею, почему до сих пор я не смотрел в сторону ExtJS. Обалдеть можно от того, как просто с этим фреймворком можно построить красивое приложение.
Сегодня, мы создадим в AdobeAIR приложение с простым окном (Ext.Window):

Смысл того, что мы сделаем очень прост — мы создаем максимизированное нативное окошко с systemChrome, выставленным в none и включаем у окна transparency. Получится абсолютно прозрачное окно, в котором мы и создадим Ext.Window.
О том, как создать Hello World! в AdobeAIR нам уже рассказывали, так что, думаю, проблем создать новое приложение для вас уже не составит труда. Поэтому пишу кратко.
application.xml:
main.html:
Тут я использую не голый ExtJS, а с адаптером для jQuery, привык я к нему, извините :)
Документ, собственно, пустой, все дело будет происходить в javascript, а именно в application.js:
Если вкратце, то тут мы создаем новое окошко (Ext.Window), которое умеет сворачиваться в таскбар и разворачиваться из него. Ну и разворачиваться во весь экран, восстанавливаться из этого состояния и закрыться.
В setupListeners мы добавляем обработчика (doDisplayStateChanging) на событие изменения состояния окна. Там мы отлавливаем попытки свернуть и восстановить окно из таскбара. Тут, наверное, возник вопрос, почему я отключаю и включаю visible у окна. Ответ — иначе при сворачивании мы увидим артефакты в виде анимированного заголовка нативного окна. Откуда этот заголовок взялся — не очень понятно, но впечатление он портит.
Самому же окну мы назначаем обработчики на сворачивание (doMinimize) и закрытие (doClose) с соответсвующим сворачиванием главного нативного окна и выходом из приложения.
Если будет интересно, то продолжу свои изыскания :)
Всем спасибо. Комментарии приветствуются.
Скачать полученный пакет можно отсюда (440 кб, фильтровать extJS лениво, извините)
Кросспост из личного блога.
Сегодня, мы создадим в AdobeAIR приложение с простым окном (Ext.Window):

Смысл того, что мы сделаем очень прост — мы создаем максимизированное нативное окошко с systemChrome, выставленным в none и включаем у окна transparency. Получится абсолютно прозрачное окно, в котором мы и создадим Ext.Window.
О том, как создать Hello World! в AdobeAIR нам уже рассказывали, так что, думаю, проблем создать новое приложение для вас уже не составит труда. Поэтому пишу кратко.
application.xml:
<?xml version="1.0" encoding="utf-8" standalone="no"?> <application xmlns="http://ns.adobe.com/air/application/1.0"> <id>com.adobe.example.testJS</id> <filename>testJS</filename> <name>testJS</name> <version>1.0</version> <description/> <copyright/> <title>Тестируем ExtJs</title> <initialWindow> <content>html/main.html</content> <title/> <systemChrome>none</systemChrome> <transparent>true</transparent> <visible>false</visible> <minimizable>true</minimizable> <maximizable>false</maximizable> <resizable>false</resizable> </initialWindow> <icon> <image16x16>icons/AIRApp_16.png</image16x16> <image32x32>icons/AIRApp_32.png</image32x32> <image48x48>icons/AIRApp_48.png</image48x48> <image128x128>icons/AIRApp_128.png</image128x128> </icon> <fileTypes> </fileTypes> </application>
main.html:
<html>
<head>
<title>Тестируем ExtJS</title>
<meta http-equiv="content-Type" content="text/html; charset=UTF-8" />
<link href="/css/main.css" rel="stylesheet" type="text/css"/>
<link href="/lib/ext/resources/css/ext-all.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="/lib/air/AIRIntrospector.js"></script>
<script type="text/javascript" src="/lib/air/AIRAliases.js"></script>
<script type="text/javascript" src="/lib/jquery/jquery.js"></script>
<script type="text/javascript" src="/lib/ext/ext-jquery-adapter.js"></script>
<script type="text/javascript" src="/lib/ext/ext-all.js"></script>
<script type="text/javascript" src="/javascript/application.js"></script>
<script type="text/javascript">
$(document).ready( app.init );
</script>
</head>
<body>
</body>
</html>Тут я использую не голый ExtJS, а с адаптером для jQuery, привык я к нему, извините :)
Документ, собственно, пустой, все дело будет происходить в javascript, а именно в application.js:
var app = {
// --------------
_mainWindow: null,
// --------------
/*
* инициализация
*/
init: function() {
window.nativeWindow.maximize();
app.setupListeners();
app.doCreateMainWindow();
window.nativeWindow.visible = true;
},
/*
* настраиваем обработчики событий
*/
setupListeners: function() {
// тут мы отловим изменение состояния нативного окна
window.nativeWindow.addEventListener('displayStateChanging', app.doDisplayStateChanging);
},
/*
* создание главного окна
*/
doCreateMainWindow: function() {
this._mainWindow = new Ext.Window({
width: 800,
height: 600,
minWidth: 300,
minHeight: 200,
x: 100,
y: 100,
minimizable: true,
maximizable: true,
title: "Наше главное окошко",
});
this._mainWindow.on('minimize', app.doMinimize);
this._mainWindow.on('close', app.doClose);
this._mainWindow.show();
},
/*
* изменение состояния главного нативного окна
* @param {Event} событие displayStateChange
*/
doDisplayStateChanging: function( e ) {
if ( e.afterDisplayState == 'normal' ) {
e.preventDefault();
window.nativeWindow.visible = false;
window.nativeWindow.maximize();
window.nativeWindow.visible = true;
}
else
if ( e.afterDisplayState == 'minimized' ) {
e.preventDefault();
window.nativeWindow.visible = false;
window.nativeWindow.minimize();
window.nativeWindow.visible = true;
}
},
/*
* отработка события на закрытие главного окна
* @param {Ext.window} закрываемое окно
*/
doClose: function( win ) {
air.NativeApplication.nativeApplication.exit();
},
/*
* отработка события на сворачивание главного окна
* @param {Ext.window} сворачиваемое окно
*/
doMinimize: function( win ) {
window.nativeWindow.visible = false;
window.nativeWindow.minimize();
window.nativeWindow.visible = true;
}
}Если вкратце, то тут мы создаем новое окошко (Ext.Window), которое умеет сворачиваться в таскбар и разворачиваться из него. Ну и разворачиваться во весь экран, восстанавливаться из этого состояния и закрыться.
В setupListeners мы добавляем обработчика (doDisplayStateChanging) на событие изменения состояния окна. Там мы отлавливаем попытки свернуть и восстановить окно из таскбара. Тут, наверное, возник вопрос, почему я отключаю и включаю visible у окна. Ответ — иначе при сворачивании мы увидим артефакты в виде анимированного заголовка нативного окна. Откуда этот заголовок взялся — не очень понятно, но впечатление он портит.
Самому же окну мы назначаем обработчики на сворачивание (doMinimize) и закрытие (doClose) с соответсвующим сворачиванием главного нативного окна и выходом из приложения.
Если будет интересно, то продолжу свои изыскания :)
Всем спасибо. Комментарии приветствуются.
Скачать полученный пакет можно отсюда (440 кб, фильтровать extJS лениво, извините)
Кросспост из личного блога.
