Lees voor een snelle uitleg en codevoorbeelden van het werken met native vensters in AIR de snelstartartikelen in de Adobe Developer Connection:
AIR biedt een gebruikersvriendelijke API die op meerdere platforms kan worden gebruikt. Met deze API voor vensters kunnen met Flash®-, Flex™- en HTML-programmeertechnieken native vensters worden gemaakt (dit zijn vensters die eigen zijn aan het besturingssysteem).
Met AIR hebt u een grote vrijheid bij het ontwikkelen van het uiterlijk van uw toepassing. De vensters die u maakt kunnen er uitzien als een standaardbureaubladtoepassing die passen bij de Apple-stijl wanneer ze worden uitgevoerd op de Mac, die voldoen aan de Microsoft-conventies wanneer ze worden uitgevoerd op Windows en die zich aanpassen aan het Linux-vensterbeheer op Linux zonder dat u een regel platformspecifieke code hoeft te gebruiken. U kunt echter ook het uitbreidbare chroom met verwisselbare skins (weergaven) gebruiken die door het Flex-framework wordt geboden. Met dit chroom kunt u uw eigen stijl ontwikkelen, ongeacht het besturingssysteem waarin uw toepassing wordt uitgevoerd. U kunt zelfs uw eigen vensterchroom tekenen met vector- en bitmapillustraties met volledige ondersteuning voor transparantie. Ook alfaovervloeiing wordt ondersteund, waarmee u een gedeeltelijk transparant venster kunt laten overvloeien in de bureaubladachtergrond. Hebt u genoeg van die rechthoekige vensters? Teken eens een rond venster.
Vensters in AIR
AIR ondersteunt drie specifieke API's voor het werken met vensters:
-
De ActionScript-georiënteerde NativeWindow-klasse biedt de venster-API van het laagste niveau. Gebruik native vensters in toepassingen die in ActionScript en Flash Professional zijn ontworpen. U kunt de klasse NativeWindow uitbreiden om de vensters te specialiseren die in de toepassing worden gebruikt.
-
In de HTML-omgeving kunt u de klasse JavaScript Window gebruiken, net als in een browsergebaseerde webtoepassing. Aanroepen naar JavaScript Window-methoden worden doorgestuurd naar het onderliggende native Window-object.
-
De Flex-frameworkklassen mx:WindowedApplication en mx:Window bieden een Flex-“wrapper” voor de klasse NativeWindow. De component WindowedApplication vervangt de component Application wanneer u een AIR-toepassing met Flex maakt en moet altijd worden gebruikt als beginvenster in uw Flex-toepassing.
ActionScript-vensters
Wanneer u vensters maakt met de klasse NativeWindow, kunt u rechtstreeks gebruikmaken van het werkgebied en de weergavelijst van Flash Player. Als u visuele objecten aan een NativeWindow wilt toevoegen, voegt u het object toe aan de weergavelijst van werkgebied van het venster of aan een andere weergaveobjectcontainer in het werkgebied.
HTML-vensters
Wanneer u HTML-vensters maakt, gebruikt u HTML, CSS en JavaScript om inhoud weer te geven. Als u een visueel object aan een HTML-venster wilt toevoegen, voegt u die inhoud toe aan het HTML DOM. HTML-vensters vormen een speciale categorie van NativeWindow. De AIR-host definieert in HTML-vensters een
nativeWindow
-eigenschap die toegang biedt tot de onderliggende NativeWindow-instantie. U kunt deze eigenschap gebruiken om toegang te krijgen tot de NativeWindow-eigenschappen, -methoden en -gebeurtenissen die hier worden beschreven.
Opmerking:
Het JavaScript-object Window heeft ook methoden voor het schrijven van scripts voor het venster waarin het object zich bevindt, zoals
moveTo()
en
close()
. Als er overlappende methoden beschikbaar zijn, gebruikt u de methode die u zelf geschikt vindt.
Flex-frameworkvensters
Wanneer u vensters maakt met het Flex-framework, gebruikt u gewoonlijk MXML-componenten om het venster te vullen. Als u een Flex-component aan een venster wilt toevoegen, voegt u het componentelement toe aan de MXML-definitie van het venster. U kunt ook ActionScript gebruiken om inhoud dynamisch toe te voegen. De componenten mx:WindowedApplication en mx:Window zijn ontworpen als Flex-containers en kunnen daarom Flex-componenten direct accepteren, terwijl NativeWindow-objecten dat niet kunnen. Indien nodig kunt u met de eigenschap
nativeWindow
via de objecten WindowedApplication en Window toegang krijgen tot de NativeWindow-eigenschappen en -methoden.
Het beginvenster van de toepassing
Het eerste venster van uw toepassing wordt automatisch voor u gemaakt door AIR. AIR stelt de eigenschappen en inhoud van het venster in met de parameters die zijn opgegeven in het element
initialWindow
van het descriptorbestand van de toepassing.
Als de inhoud van de hoofdmap een SWF-bestand is, maakt AIR een NativeWindow-instantie, laadt het dit SWF-bestand en voegt het dit bestand toe aan het werkgebied van het venster. Als de inhoud van de hoofdmap een HTML-bestand is, maakt AIR een HTML-venster en laadt het dit HTML-bestand.
Klassen van native vensters
De API voor native vensters bevat de volgende klassen:
Pakket
|
Klassen
|
flash.display
|
|
flash.events
|
|
Gebeurtenisstromen voor native vensters
Native vensters verzenden gebeurtenissen om belanghebbende componenten te melden dat er een belangrijke wijziging zal worden doorgevoerd of al is doorgevoerd. Veel gebeurtenissen die betrekking hebben op vensters, worden in paren verzonden. De eerste gebeurtenis waarschuwt dat er binnenkort een verandering zal plaatsvinden. De tweede gebeurtenis meldt dat de wijziging heeft plaatsgevonden. U kunt een waarschuwingsgebeurtenis annuleren, maar een meldingsgebeurtenis niet. De volgende reeks gebeurtenissen laat zien hoe de gebeurtenisstroom loopt wanneer een gebruiker op de knop Maximaliseren van een venster klikt:
-
Het NativeWindow-object verzendt de gebeurtenis
displayStateChanging
.
-
Als de gebeurtenis niet door geregistreerde listeners wordt geannuleerd, wordt het venster gemaximaliseerd.
-
Het NativeWindow-object verzendt de gebeurtenis
displayStateChange
.
Daarnaast verzendt het NativeWindow-object ook gebeurtenissen voor gerelateerde wijzigingen in het formaat en de positie van het venster. Het venster verzendt geen waarschuwingsgebeurtenissen voor deze gerelateerde wijzigingen. De gerelateerde wijzigingen zijn:
-
De gebeurtenis
move
wordt verzonden als de linkerbovenhoek van het vensters is verplaatst als gevolg van het maximaliseren.
-
De gebeurtenis
resize
wordt verzonden als het vensterformaat is gewijzigd als gevolg van het maximaliseren.
Het NativeWindow-object verzendt een vergelijkbare reeks gebeurtenissen bij het minimaliseren, sluiten en verplaatsen van vensters en bij het wijzigen of herstellen van het formaat van vensters.
De waarschuwingsgebeurtenissen worden alleen verzonden wanneer een wijziging is geactiveerd via het vensterchroom of andere door het besturingssysteem gecontroleerde mechanismen. Wanneer u een venstermethode aanroept om het formaat, de positie of de weergavestatus te wijzigen, verzendt het venster alleen een gebeurtenis om de wijziging te melden. U kunt desgewenst een waarschuwingsgebeurtenis verzenden met de methode
dispatchEvent()
van het venster en vervolgens controleren of uw waarschuwingsgebeurtenis is geannuleerd voordat u de wijziging doorvoert.
Zie de
Naslaggids voor ActionScript 3.0 voor het Adobe Flash-platform
voor meer informatie over de klassen, methoden, eigenschappen en gebeurtenissen van de venster-API.
Eigenschappen die de stijl en het gedrag van een native venster bepalen
De volgende eigenschappen bepalen het basisuiterlijk en -gedrag van een venster:
-
type
-
systemChrome
-
transparent
-
owner
Wanneer u een venster maakt, stelt u deze eigenschappen in voor het NativeWindowInitOptions-object dat aan de vensterconstructor wordt doorgegeven. AIR leest de eigenschappen voor het beginvenster van de toepassing vanuit de toepassingsdescriptor. (Dit geldt niet voor de eigenschap
type
, die niet in de toepassingsdescriptor kan worden ingesteld en altijd is ingesteld op
normal
.) De eigenschappen kunnen niet worden gewijzigd nadat het venster is gemaakt.
Sommige instellingen van deze eigenschappen sluiten elkaar uit:
systemChrome
kan niet worden ingesteld op
standard
als
transparent
is ingesteld op
true
of als
type
is ingesteld op
lightweight
.
Venstertypen
In de venstertypen van AIR zijn de chroom- en zichtbaarheidskenmerken van het oorspronkelijke besturingssysteem gecombineerd. Op die manier zijn er drie functionele typen vensters ontstaan. Gebruik de constanten die in de klasse NativeWindowType zijn gedefinieerd, om in de code te verwijzen naar de naam van de typen. AIR biedt de volgende venstertypen:
Type
|
Beschrijving
|
Normaal
|
Dit is een normaal venster. Normale vensters maken gebruik van het maximale formaat van het chroom en verschijnen op de taakbalk van Windows en in het venstermenu van Mac OS X.
|
Utiliteit
|
Dit is een venster met een palet met hulpmiddelen. Utiliteitsvensters maken gebruik van een afgeslankte versie van het systeemchroom en verschijnen niet op de taakbalk van Windows of in het venstermenu van Mac OS X.
|
Lichtgewicht
|
Lichtgewichtvensters hebben geen chroom en verschijnen niet op de taakbalk van Windows of in het venstermenu van Mac OS X. Bovendien beschikken lichtgewichtvensters niet over een systeemmenu (Alt+Spatiebalk) in Windows. Lichtgewichtvensters zijn geschikt voor het weergeven van ballonnetjes met mededelingen en voor besturingselementen, zoals keuzelijsten met invoervak die kortstondig een weergavegebied openen. Wanneer het lichtgewichtvenster
type
wordt gebruikt, moet
systemChrome
zijn ingesteld op
none
.
|
Vensterchroom
Het vensterchroom bestaat uit een set besturingselementen waarmee gebruikers een venster in de bureaubladomgeving kunnen manipuleren. Tot de chroomelementen behoren de titelbalk, titelbalkknoppen, vensterrand en formaatgrepen.
Systeemchroom
U kunt de eigenschap
systemChrome
instellen op
standard
of
none
. Kies
standard
voor het systeemchroom als u het venster wilt voorzien van de reeks standaardbesturingselementen die worden gemaakt en vormgegeven door het besturingssysteem van de gebruiker. Kies
none
als u het venster wilt voorzien van uw eigen chroom. Gebruik de constanten die in de klasse NativeWindowSystemChrome zijn gedefinieerd, om in de code te verwijzen naar de instellingen van het systeemchroom.
Het systeemchroom wordt beheerd door het systeem. Uw toepassing heeft niet rechtstreeks toegang tot de besturingselementen zelf, maar kan reageren op de gebeurtenissen die worden verzonden wanneer de besturingselementen worden gebruikt. Wanneer u het standaardchroom gebruikt voor een venster, moet de eigenschap
transparent
zijn ingesteld op
false
en moet de eigenschap
type
zijn ingesteld op
normal
of
utility
.
Flex-chroom
Wanneer u de Flex-component WindowedApplication of Window gebruikt, kan het venster gebruikmaken van het systeemchroom of van het chroom dat door het Flex-framework wordt geleverd. Als u het Flex-chroom wilt gebruiken, stelt u de eigenschap
systemChrome
, die wordt gebruikt om het venster te maken, in op
none
. Wanneer u Flex 4 spark-componenten gebruikt in plaats van mx-componenten, moet u de skinklasse opgeven. Als u dit niet doet, kunt u Flex-chroom niet gebruiken. U kunt de ingebouwde skins gebruiken of uw eigen skins beschikbaar maken. Het volgende voorbeeld laat zien hoe u de skinklasse WindowedApplication van de ingebouwde spark gebruikt om de vensterchroom beschikbaar te maken:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Style>
@namespace "library://ns.adobe.com/flex/spark";
WindowedApplication
{
skinClass:ClassReference("spark.skins.spark.SparkChromeWindowedApplicationSkin");
}
</fx:Style>
</s:WindowedApplication>
Zie
Using Flex 4: About the AIR window containers: Controlling window chrome
voor meer informatie.
Aangepast chroom
Wanneer u een venster maakt zonder systeemchroom, moet u uw eigen chroombesturingselementen toevoegen om de interactie tussen een gebruiker en het venster mogelijk te maken en te sturen. U hebt ook de mogelijkheid om transparante, niet-rechthoekige vensters te maken.
U moet de stijl
showFlexChrome
instellen op
false
om het aangepaste chroom met de componenten mx:WindowedApplication of mx:Window te gebruiken. Anders wordt het Flex-chroom zelf aan uw vensters toegevoegd.
Venstertransparantie
Als u alfaovervloeiing wilt toestaan, waarbij het venster deels transparant wordt en overvloeit in de bureaubladachtergrond of in andere vensters, stelt u de eigenschap
transparent
van het venster in op
true
. De eigenschap
transparent
moet worden ingesteld voordat het venster wordt gemaakt en kan niet worden gewijzigd als het venster eenmaal is gemaakt.
Een transparant venster heeft geen standaardachtergrond. Elk venstergebied dat geen object bevat dat door de toepassing is getekend, is onzichtbaar. Als voor een weergegeven object de alfa-instelling kleiner is dan één, is alles wat zich onder het object bevindt, gedeeltelijk zichtbaar door het object heen, inclusief eventuele andere weergaveobjecten, andere vensters en het bureaublad.
Transparante vensters zijn handig wanneer u toepassingen wilt maken met randen die onregelmatig van vorm zijn, geleidelijk vervagen of onzichtbaar lijken. Als u echter grote gebieden met alfaovervloeiing wilt renderen, kan dit traag gaan. Gebruik het effect daarom met mate.
Belangrijk:
In Linux kunnen muisgebeurtenissen volledig transparante pixels niet passeren. Vermijd het maken van vensters met grote, volledig transparante gebieden, aangezien u de toegang van de gebruiker tot andere vensters of items op hun bureaublad mogelijk op onzichtbare wijze zou kunnen blokkeren. In Mac OS X en Windows kunnen muisgebeurtenissen volledig transparante pixels niet passeren.
Transparantie kan niet worden gebruikt voor vensters die gebruikmaken van het systeemchroom. Bovendien wordt SWF- en PDF-inhoud in HTML mogelijk niet weergegeven in transparante vensters. Zie
Belangrijke opmerkingen voor het laden van SWF- of PDF-inhoud in een HTML-pagina
voor meer informatie.
De statische eigenschap
NativeWindow.supportsTransparency
geeft aan of venstertransparantie beschikbaar is. Als transparantie niet wordt ondersteund, wordt de toepassing tegen een zwarte achtergrond geplaatst. In deze gevallen worden transparante gebieden van de toepassing dekkend zwart weergegeven. Het kan nuttig zijn een functie te maken waarop kan worden teruggevallen als de eigenschap
false
test. U kunt bijvoorbeeld een waarschuwingsdialoogvenster voor de gebruiker weergeven of een rechthoekige, niet-transparante gebruikersinterface weergeven.
Bedenk dat transparantie altijd wordt ondersteund door Mac- en Windows-besturingssystemen. Voor ondersteuning in Linux-besturingssystemen is een hulpprogramma voor samenstellend vensterbeheer vereist. Zelfs als zo'n hulpprogramma actief is, is transparantie mogelijk niet beschikbaar vanwege de door de gebruiker gekozen weergaveopties of de hardwareconfiguratie.
Transparantie in een MXML-toepassingsvenster
De achtergrond van een MXML-venster is standaard ondoorzichtig, zelfs als u bij het maken van het venster kiest voor
transparent
. (Let op het transparantie-effect in de hoeken van het venster.) Als u een transparante achtergrond voor het venster wilt weergeven, stelt u in het opmaakmodel of het element <mx:Style> dat zich in het MXML-bestand van uw toepassing bevindt, een achtergrondkleur en een alfawaarde in. Met de volgende stijldefinitie krijgt de achtergrond bijvoorbeeld een enigszins transparante groene tint:
WindowedApplication
{
background-alpha:".8";
background-color:"0x448234";
}
Transparantie in een HTML-toepassingsvenster
De achtergrond van HTML-inhoud die in HTML-vensters en HTMLLoader-objecten wordt weergegeven, is standaard ondoorzichtig, zelfs als het venster waarin de inhoud wordt weergegeven, transparant is. Als u de standaardachtergrond wilt uitschakelen die voor HTML-inhoud wordt weergegeven, stelt u de eigenschap
paintsDefaultBackground
in op
false
. In het volgende voorbeeld wordt een HTMLLoader gemaakt en wordt de standaardachtergrond uitgeschakeld:
var htmlView:HTMLLoader = new HTMLLoader();
htmlView.paintsDefaultBackground = false;
In dit voorbeeld wordt JavaScript gebruikt om de standaardachtergrond van een HTML-venster uit te schakelen:
window.htmlLoader.paintsDefaultBackground = false;
Als een element in het HTML-document een achtergrondkleur instelt, is de achtergrond van dat element niet transparant. Het instellen van een waarde voor gedeeltelijke transparantie (of matheid) wordt niet ondersteund. U kunt echter een transparante afbeelding in de PNG-indeling als achtergrond voor een pagina of pagina-element gebruiken om een vergelijkbaar visueel effect te krijgen.
Eigendom van vensters
Een venster kan
eigenaar
zijn van een of meerdere vensters. Deze eigendomvensters worden altijd vóór het hoofdvenster weergegeven, worden tegelijk met het hoofdvenster tot pictogram verkleind of hersteld en worden gesloten wanneer het hoofdvenster wordt gesloten. Eigendom van vensters kan niet worden overgedragen aan een ander venster en kan niet worden verwijderd. Een venster kan slechts het eigendom zijn van één hoofdvenster, maar kan eigenaar zijn van een onbeperkt aantal andere vensters.
Met venstereigendom kunt u vensters die voor gereedschapspaletten en dialoogvensters worden gebruikt eenvoudiger beheren. Als u bijvoorbeeld een dialoogvenster Opslaan weergeeft in combinatie met een documentvenster en het documentvenster eigenaar maakt van het dialoogvenster, blijft het dialoogvenster automatisch vóór het documentvenster staan.
Een visuele venstercatalogus
De volgende tabel illustreert de visuele effecten van verschillende combinaties van de instellingen van venstereigenschappen in de besturingssystemen Mac OS X, Windows en Linux:
Vensterinstellingen
|
Mac OS X
|
Microsoft Windows
|
Linux
*
|
Type: normal
SystemChrome: standard
Transparent: false
|
|
|
|
Type: utility
SystemChrome: standard
Transparent: false
|
|
|
|
Type: alle
SystemChrome: none
Transparent: false
|
|
|
|
Type: alle
SystemChrome: none
Transparent: true
|
|
|
|
mxWindowedApplication of mx:Window
Type: alle
SystemChrome: none
Transparent: true
|
|
|
|
*
Ubuntu met Compiz-vensterbeheer
Opmerking:
De volgende systeemchroomelementen worden niet ondersteund door AIR: de Mac OS X-werkbalk, het Mac OS X-proxypictogram, pictogrammen op de Windows-titelbalk en het alternatieve systeemchroom.
|
|
|