Posted by Daniel | Posted in AIR, Development, Flex, Software | Posted on October 12, 2011
0
In the Adobe AIR application descriptor file there are many options you can set. One of which is the tag(or in Flex SDK v4.1 and below), which lets you differentiate your release as well as utilize the Adobe AIR updater library.
It can be useful to display your version number inside of your app to inform the user as well as help with bug reports among other reasons. In order to prevent you from having to update the version number in multiple places you can use AS3 to grab it from the application descriptor and update your text for your app on the fly, as it loads. Here is an example of how to do that:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| <?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"
creationComplete="windowedapplication1_creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void
{
var appXML:XML = flash.desktop.NativeApplication.nativeApplication.applicationDescriptor;
var ns:Namespace = appXML.namespace();
versionLabel.text = 'v' + appXML.ns::versionNumber;
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Label id="versionLabel" />
</s:WindowedApplication> |
Flex Builder Project
Posted by Daniel | Posted in Development, Flex, Software | Posted on October 5, 2011
0
You may have noticed MouseEvent.Click is not an event available to be set on the BitmapImage Spark primitive(in the current Flex SDK). But, there is a simple workaround for this. All you have to do is place it inside of a Graphic primitive wrapper. In MXML it would look like this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| <?xml version="1.0" encoding="utf-8"?>
<s:Application 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:Script>
<![CDATA[
import mx.controls.Alert;
protected function graphic1_clickHandler(event:MouseEvent):void
{
Alert.show('Nope!', 'Click Event');
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:HGroup id="container">
<s:Graphic click="graphic1_clickHandler(event)">
<s:BitmapImage source="path/to/image.jpg"
smooth="true"
smoothingQuality="high" />
</s:Graphic>
</s:HGroup>
</s:Application> |
Flex Builder Project
In AS3 it looks like this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="application1_creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.FlexEvent;
import spark.primitives.BitmapImage;
import spark.primitives.Graphic;
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
var myBI:BitmapImage = new BitmapImage();
myBI.source = 'path/to/image.jpg';
myBI.smooth = true;
myBI.smoothingQuality = 'high';
var myG:Graphic = new Graphic();
myG.addElement(myBI);
myG.addEventListener(MouseEvent.CLICK, graphic1_clickHandler);
container.addElement(myG);
}
protected function graphic1_clickHandler(event:MouseEvent):void
{
Alert.show('Nope!', 'Click Event');
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:HGroup id="container">
</s:HGroup>
</s:Application> |
Flex Builder Project
Posted by Daniel | Posted in Development, Flex | Posted on May 25, 2009
1
Every once in a while you might run across a case where you need to access a property or method from the parent application, and you don’t have the ability to pass the value you need to the class. Or, for example, you’re debugging and you don’t want to write a bunch of code that you’ll have to remove later just to test the value of a variable.
So, with that said the process is fairly simple. The following is a hypothetical example of a class you have imported into your application:
package com.example.scope
{
private var myVar:String = "This is NOT the value we're trying to get";
public class scopeExample
{
public function scopeExample()
{
// Flex 4
import mx.core.FlexGlobals; // make "FlexGlobals" available in the current scope
trace(FlexGlobals.topLevelApplication.myVar); // outputs the value of myVar in the main application
// Flex 3
import mx.core.Application; // make "Application" available in the current scope
trace(Application.application.myVar); // outputs the value of myVar in the main application
}
}
}You could also use:
trace(parentDocument.myVar); // if the component is a child of the main application
I ran across a post on Holly Schinsky’s blog the other day that had good descriptions of the various scope keywords, and a few tips. All of which is good knowledge to possess, so check it out.
Posted by Daniel | Posted in Development, Flex | Posted on March 10, 2009
0
If you ever have the urge to capture a specific key pressed in Flex or AS3 in general, there is an excellent list of the keycodes, and costants you can use to represent them in your code here: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/ui/Keyboard.html

You can use them statically(without instantiating an object) like so:
trace(Keyboard.TAB); // 9
Posted by Daniel | Posted in Development, Flex | Posted on March 7, 2009
9
I’ve started dabbling in Flex recently, and something that was apparent(and annoying at times) to meĀ early on was it’s strongly-typed nature. Not type as in a keyboard, but variable types. Flex cares very much whether your variable is an Array, or ArrayCollection as it’s knowledge of types is key to it’s processing. This is quite the converse to a language like PHP, which is loosely-typed to say the least.
Anyway, I came upon a case where I needed to know the type a variable was so I could cast it properly(and for debugging), and I found that Flex doesn’t have a function to simply return a variable’s type. There is describeType(), but this returns an XML object with all of the information about the variable — not just the type. Plus you have to import the proper class to use it. So, I threw together this function quickly that will perform the import, and return/alert the type as needed:
private function getType(value:*, alert:Boolean = false):String
{
import flash.utils.*;
var description:XML = describeType(value);
if(alert)
Alert.show(description[0].@name);
return description[0].@name;
}I hope someone else can find it useful. 