Utiliser le clavier en mode plein écran avec Flex dans un navigateur web

Le mode plein écran sur un site, permet de masquer le navigateur web et d’afficher l’application ou le site en mode plein écran.

Le problème de sécurité avec ce type de fonctionnalité, aurait été que des petits malins, fassent passer leur site en mode plein écran, pour un bureau windows par exemple, je vous laisse imaginer les dégâts que cela pourrait engendrer.
Pour palier à cette problématique Adobe a décidé d’ajouter une sécurité qui bloque certaines fonctionnalités de flash player en mode plein écran.

Telle que la saisie dans un champ TextInput, ou l’event KeyEvent, ce qui n’est pas toujours très pratique, car vous pourriez avoir besoin de touches clavier pour l’application ou le jeu que vous êtes en train de développer. Dans la nouvelle version de Flash ( à partir de Flash player 11.3 ), Adobe a ajouté un nouveau mode plein écran :

FULL_SCREEN_INTERACTIVE

, ce dernier permet une demande d’autorisation pour l’utilisation du clavier, au passage en mode plein écran.

Super me direz-vous ! Encore faut il comprendre et savoir le mettre en place car il existe très peu de documentation à ce sujet ! Mais vous savez quoi ? je me suis cassé la tête une fois de plus pour vous 😉

Donc c’est très simple encore fallait il le savoir le passage du mode plein écran en Flash avec les fonctions clavier activé ce fait de la manière suivante :

stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;

Mais cela ne suffit pas ! et c’est à ce moment en général que vous cherchez à comprendre pourquoi cette belle fonctionnalité ne fonctionne pas !La solution est dans le corps de votre page web ajoutez le paramètre suivant :

params.allowFullScreenInteractive = "true";

et

<param name="allowFullScreenInteractive" value="true" />

Et voila, un beau message s’affichera au passage en mode plein écran pour demander à l’internaute si il accepte ou non de partager les évents du clavier.

flash player sur iphone et ipad

Flash sur iPhone et iPad c’est possible !

Pour ceux ne l’ayant pas encore remarqué, par défaut, les produits iPhone et iPad ne peuvent pas lire des contenus flash dans leur navigateur web ( safari ) .
Je ne vais pas rentrer dans l’ éternel débat du flash est mort … Apple sont les meilleurs ect … bref !

Les iPhone et iPad peuvent lire du flash !

La solution :

logo_puffin-web-browser

Je vous propose de télécharger et tester ce navigateur qui est en version gratuite sur Apple store : Puffin Web Browser, il a la particularité de lire sans aucun problème les contenus flash player. il n’est pas le seul, mais celui ci est gratuit ( une version gratuite et une autre payante ), testé et approuvé !

Flex Apache la renaissance !

flex_apache_logo_blancAdobe cède Flex SDK à la fondation Apache

Voila déjà un an qu’ Adobe à cédé le Flex SDK à apache. Durant une année j’ai calmé les développements Flex ( en maintenant seulement quelques projets pour des clients ) et complètement abandonné la R & D sur cette technologie, suite aux annonces massacrantes d’Adobe pour le player Flash et l’avenir si incertain de Flex. J’ai donc suivi le troupeau vers la technologie HTML5 / Javascript !
Vous n’imaginez même pas à quel point j’étais rempli de bonheur ( ironie ), de délaisser des années de savoir pour tout recommencer vers des technologies qui ne me semblaient pas vraiment à la hauteur, ce qui fut très rapidement confirmé.
Je n’ai plus aucun doute sur ce qui est faisable ou non en HTML5 et je vous assure que sur cette techno on est à des années lumière de ce que l’on faisait à l’époque avec Flex :).

Qu’est devenu Flex SDK ?

Aujourd’hui j’ai décidé de retourner voir ce qu’est devenu ce bijou de technologie, comment a t’il évolué ? est-ce que le SDK a changé de version ? La dernière fois ou j’ai jeté un oeil sur le projet de reprise, la fondation Apache était en train de définir le futur nouveau logo Flex, on était encore loin de connaître les futures évolutions du Framework Flex.
Qu’elle bonne surprise lorsque je découvris ce nouveau site dédié au Flex SDK, d’autant plus que la fondation Apache n’a apparemment pas chômé sur le projet, à l’ époque j’avais fait ma pause en recherche et développement sur la version 4.6 du SDK, aujourd’hui je suis comme un enfant devant ses cadeaux de noël avec cette nouvelle version Flex SDK 4.9 .

Une nouvelle jeunesse pour Flex SDK ?

Désormais je n’ai plus aucun doute quant aux besoins des entreprises pour les développements d’applications riches, actuellement aucune technologie ne peut rivaliser avec Flex, HTML5 et javascript ne sont pas l’avenir mais seulement des embryons d’une future technologie beaucoup plus avancée pour le web ( HTML6 ou HTML 7 ) mais tout ceci est un avenir très très lointain ! et d’ici là, Flex n’aura aucun mal à s’adapter aux nouvelles demandes du marché car désormais il est entre de très bonnes mains (Fondation Apache) .

Reprise des projets et de la partie recherche et développement en Flex Apache !

desktop-sm mobile-sm

Je ne doute plus de l’importance pour ma société et moi même à continuer mes recherches et me spécialiser dans la technologie Flex / Flash, pour plusieurs bonnes raisons, déja plus ou moins abordées précédemment mais également parce que je pense qu’un développeur Flex/AS aura plus de facilité à apprendre les futures nouvelles techno web (qui seront sûrement compilées ) qu’un développeur JS ou HTML5. L’autre raison c’est que je n’ai jamais aimé suivre les masses et que je pense qu’il y a plus d’avenir dans une technologie importante mais maîtrisée par peu de personne, plutôt qu’une techno qui fait le buzz et ou tout et n’importe quel développeur va s’engouffrer !

Coté HTML5 / javascript je pense avoir fait le tour en un an, car au final il n’y a pas grand chose de novateur dans ces technos. je continuerai les dev. HTML5 / javascript dans certain cas.
Je pense me pencher de nouveau sur les développements et la recherche en Flex, je vais ouvrir une section tutoriaux sur l’utilisation de ce superbe langage de programmation. Mes deux prochains projets seront la refonte de l’application en AIR qui permet de gagner des Like Facebook et plus sérieusement la partie administrateur de la gestion d’apparence graphique ainsi que de l’interface statistiques du module e-commerce WordPress récemment développé.

Voici un très bon article qui est le résumé d’un échange entre deux personnes sur les avantages et problématiques du framework Flex. : http://flexblog.faratasystems.com/2013/01/22/html5-or-flex-framework

Les textures dans Alternativa3D 8

alternativa3d-logoAujourd’hui nous allons voir comment ajouter des textures à notre modèle de boîte primitive. Pour les bases concernant l’utilisation du moteur Alternativa3D vous pouvez vous référer au premier tutorial Alternativa3D premier pas …

Pour commencer nous allons créer un dossier « assets » dans notre projet, dans lequel nous allons placer une image qui nous servira de texture.Il est indispensable que la hauteur et la largeur de l’image soit une puissance de deux. Sinon vous aurez une erreur à l’exécution :

Argument Error: Error #3682: La taille de la texture n’est pas une puissance de deux.

Si vous le souhaitez, vous pouvez utiliser une texture telle que celle-ci :

box01

Nous chargeons notre texture :

[Embed(source="assets/alternativa3d-logo.png")] static private const BoxTexture:Class; 

Nous créons un objet pour que le bitmap soit chargé dans les ressources, puis nous l’appliquons sur toutes les faces de notre box avec un objet TextureMaterial :

var bmd_res:BitmapTextureResource = new BitmapTextureResource(new BoxTexture().bitmapData);
box.setMaterialToAllSurfaces( new TextureMaterial( bmd_res ) ); 

voici le code complet de l’exemple :

package
{
import alternativa.engine3d.controllers.SimpleObjectController;
import alternativa.engine3d.core.Camera3D;
import alternativa.engine3d.core.Object3D;
import alternativa.engine3d.core.Resource;
import alternativa.engine3d.core.View;
import alternativa.engine3d.materials.TextureMaterial;
import alternativa.engine3d.primitives.Box;
import alternativa.engine3d.resources.BitmapTextureResource;

import flash.display.Sprite;
import flash.display.Stage3D;
import flash.events.Event;

public class Alternativa3DBase02 extends Sprite
{
private var rootContainer:Object3D = new Object3D();
private var camera:Camera3D;
private var controller:SimpleObjectController;
private var stage3D:Stage3D;
private var box:Box;

[Embed(source="assets/box01.png")] static private const BoxTexture:Class;

public function Alternativa3DBase02()
{
super();
addEventListener(Event.ADDED_TO_STAGE, init3D);
}

private function init3D(evt:Event):void
{
camera = new Camera3D(0.01, 10000000000);
camera.x = -50;
camera.y = -300;
camera.z = 100;
controller = new SimpleObjectController(stage, camera, 200);
controller.lookAtXYZ(0,0,0);
camera.view = new View(800, 600, false, 0xFFFFFF, 0, 4);
camera.view.hideLogo();
addChild(camera.view);
addChild(camera.diagram);

rootContainer = new Object3D();
rootContainer.addChild(camera);

//box
box = new Box();
var bmd_res:BitmapTextureResource = new BitmapTextureResource(new BoxTexture().bitmapData);
box.setMaterialToAllSurfaces( new TextureMaterial( bmd_res ) );
rootContainer.addChild(box);

stage3D = stage.stage3Ds[0];
stage3D.addEventListener(Event.CONTEXT3D_CREATE, init);
stage3D.requestContext3D();

}

private function init(event:Event):void
{
for each (var resource:Resource in rootContainer.getResources(true)) {
resource.upload(stage3D.context3D);
}
addEventListener(Event.ENTER_FRAME, enterFrameHandler)
}

private function enterFrameHandler(event:Event):void
{
box.rotationZ -= 0.01;
box.rotationY += 0.01;
controller.update();
camera.render(stage3D);
}
}
}

le rendu final :

final-300x246

Importation d’objets .A3D dans Alternativa3D

alternativa3d-logo Alternativa3D nous propose sur son site internet le téléchargement d’un plugin pour exporter ses scènes 3DSmax au format .A3D, nous allons voir comment intégrer ces objets 3D dans notre scène flash.

Pour commencer assurez-vous d’avoir téléchargé puis installé le plugin en question! Vous le trouverez en téléchargement gratuit à l’adresse suivante : Alternativa3D

Ouvrez 3ds max, puis créez votre objet 3d, pour l’exemple je vais utiliser l’emblématique « Tea Pot » de 3dsMax.
Appliquez lui une texture « standard » avec un Bitmap comme « Diffuse » :

3dsmax01_A3D-1024x613

Exportez le projet au format A3D :

3dsmax02_A3D-300x202

Passons maintenant au projet as3, créez votre projet comme expliqué dans les précédents tutoriels de la même catégorie.
Nous allons ajouter une fonction « initObject » dans laquelle nous allons charger notre objet .A3D que vous aurez bien sûr, déjà placé dans le dossier /assets/A3D/ de votre projet.
Et faites de même avec la texture que vous placez dans le dossier /assets/textures/ nomdevotretexture.jpg.
Nous utilisons un simple objet URLLoader pour charger notre modele .A3D
Le chargement effectué nous allons parser la scene 3D (ParserA3D), puis récupérer notre Teapot en passant par une boucle sur les objets de la scène.

// Model parsing
var parser:ParserA3D = new ParserA3D();
parser.parse((e.target as URLLoader).data);
var mesh:Mesh;
for each (var object:Object3D in parser.objects)
{
if (object.name == "Teapot01")
{
mesh = object as Mesh;
break;
}
}

rootContainer.addChild(mesh);        

Une fonction qui permet de charger les textures dans le context3D de la stage3D :

private function uploadResources(resources:Vector.):void
{
for each (var resource:Resource in resources)
{
resource.upload(stage3D.context3D);
}
}

Une boucle sur les matériaux de notre objet 3D, et un chargement de ces mêmes textures.

             var textures:Vector. = new Vector.();
for (var i:int = 0; i < mesh.numSurfaces; i++)
{
var surface:Surface = mesh.getSurface(i);
var material:ParserMaterial = surface.material as ParserMaterial;
if (material != null)
{
var diffuse:ExternalTextureResource = material.textures["diffuse"];
if (diffuse != null)
{
diffuse.url = "assets/textures/" + diffuse.url;
textures.push(diffuse);
surface.material = new TextureMaterial(diffuse);
}
}
}

// chargement des textures
var texturesLoader:TexturesLoader = new TexturesLoader(stage3D.context3D);
texturesLoader.loadResources(textures);

Il ne vous reste plus qu’à tester votre projet 🙂 !
voici le code complet du projet :

 package
{
import alternativa.engine3d.controllers.SimpleObjectController;
import alternativa.engine3d.core.Camera3D;
import alternativa.engine3d.core.Object3D;
import alternativa.engine3d.core.Resource;
import alternativa.engine3d.core.View;
import alternativa.engine3d.loaders.ParserA3D;
import alternativa.engine3d.loaders.ParserMaterial;
import alternativa.engine3d.loaders.TexturesLoader;
import alternativa.engine3d.materials.TextureMaterial;
import alternativa.engine3d.objects.Mesh;
import alternativa.engine3d.objects.Surface;
import alternativa.engine3d.primitives.Box;
import alternativa.engine3d.resources.BitmapTextureResource;
import alternativa.engine3d.resources.ExternalTextureResource;

import flash.display.Sprite;
import flash.display.Stage3D;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;

public class Alternativa3DBase03 extends Sprite
{
private var rootContainer:Object3D = new Object3D();
private var camera:Camera3D;
private var controller:SimpleObjectController;
private var stage3D:Stage3D;

public function Alternativa3DBase03()
{
super();
addEventListener(Event.ADDED_TO_STAGE, init3D);
}

private function init3D(evt:Event):void
{
camera = new Camera3D(0.01, 10000000000);
camera.x = -50;
camera.y = -100;
camera.z = 100;
controller = new SimpleObjectController(stage, camera, 200);
controller.lookAtXYZ(0,0,0);
camera.view = new View(800, 600, false, 0xFFFFFF, 0, 4);
camera.view.hideLogo();
addChild(camera.view);
addChild(camera.diagram);

rootContainer = new Object3D();
rootContainer.addChild(camera);

stage3D = stage.stage3Ds[0];
stage3D.addEventListener(Event.CONTEXT3D_CREATE, init);
stage3D.requestContext3D();

initObject();
}

private function init(event:Event):void
{
for each (var resource:Resource in rootContainer.getResources(true)) {
resource.upload(stage3D.context3D);
}
addEventListener(Event.ENTER_FRAME, enterFrameHandler)
}

private function initObject():void
{
var loaderA3D:URLLoader = new URLLoader();
loaderA3D.dataFormat = URLLoaderDataFormat.BINARY;
loaderA3D.load(new URLRequest("assets/A3D/TeaPot.A3D"));
loaderA3D.addEventListener(Event.COMPLETE, onA3DLoad);
}

private function onA3DLoad(e:Event):void
{

// on parse le modele
var parser:ParserA3D = new ParserA3D();
parser.parse((e.target as URLLoader).data);
var mesh:Mesh;
for each (var object:Object3D in parser.objects)
{
if (object.name == "Teapot01")
{
mesh = object as Mesh;
break;
}
}

rootContainer.addChild(mesh);
uploadResources(mesh.getResources());

var textures:Vector. = new Vector.();
for (var i:int = 0; i < mesh.numSurfaces; i++)
{
var surface:Surface = mesh.getSurface(i);
var material:ParserMaterial = surface.material as ParserMaterial;
if (material != null)
{
var diffuse:ExternalTextureResource = material.textures["diffuse"];
if (diffuse != null)
{
diffuse.url = "assets/textures/" + diffuse.url;
textures.push(diffuse);
surface.material = new TextureMaterial(diffuse);
}
}
}

// chargement des textures
var texturesLoader:TexturesLoader = new TexturesLoader(stage3D.context3D);
texturesLoader.loadResources(textures);
}

private function uploadResources(resources:Vector.):void
{
for each (var resource:Resource in resources)
{
resource.upload(stage3D.context3D);
}
}

private function enterFrameHandler(event:Event):void
{
controller.update();
camera.render(stage3D);
}
}
}

et le rendu qui paye pas de mine je vous l’accorde mais qui aujourd’hui vous permet de charger n’importe quel modèle 3D dans votre scène !

teaPot01

Développement d’un composant Clavier intuitif en Flex

Je vais vous présenter un composant, dont nous aurons besoin dans un projet d’application tablette ( Android / ios Apple ) destiné aux opticiens.
Ce composant est un clavier intuitif. Son fonctionnement de base est simple : nous lui donnons une liste de mots dans laquelle le clavier fera une recherche . Il classera alors les mots, et proposera les touches possibles pour la suite du ou des mots correspondants.

Par exemple pour la liste des mots suivants :
[ android, apple, tablette, mobile, developpement, application ]

voici notre clavier de départ :
composant-flex-clavier-01
Imaginons que nous appuyons la touche « A » le tableau se triera de cette façon :
[ android, apple, tablette, application ]
et le clavier se réactualisera de cette manière :

composant-flex-clavier-02

Pour correspondre aux lettres suivantes : [ android, apple, tablette, application ].
Et ainsi de suite jusqu’à obtenir un résultat de recherche satisfaisant.
Une fois se composant de base réalisé, nous ajouterons des fonctions plus poussées. telles que l’intégration d’un autre composant, de reconnaissance de forme que je vous détaillerai dans un prochain article.

AS3 stage.stageWidth et stage.stageHeight sur mobile Android IOS

androidappleAujourd’hui nous allons voir comment résoudre le problème de résolution d’écran pour vos applications Android et Iphone.
Sur un projet classique as3, destiné au navigateur internet, nous récupérons la largeur et la hauteur de la scène:

 stage.stageWidth; // largeur

stage.stageHeight //hauteur

Néanmoins je ne sais pas si c’est dû à un bug Adobe, mais les valeurs retournées par stageWidth et stageHeight sur un portable Android ou Iphone ou encore une tablette, sont erronées.

La seule solution que j’ai trouvé pour palier à ce problème c’est d’utiliser la classe Capabilities dont son rôle est de fournir les propriétés du système qui héberge l’application.

il suffit donc de remplacer stage.stageWidth par Capabilities.screenResolutionX et stage.stageHeight par Capabilities.screenResolutionY. Ces deux fonctions nous retournent la hauteur et largeur de l’écran ou est exécutée l’application.

Flash Builder 4.6 BUG loading workbench .snap

bug-flash-builder-4Pour ceux qui comme moi auraient leur FlashBuilder qui reste figé sur l’initialisation du Workbench ! Ne faîtes pas de réinstallation ! voici la solution à votre problème :

Pour les versions de Flashbuilder 4 à Flashbuilder 4.6 voici ce qu’il faut faire :

  1. Killez le process de Flashbuilder.exe si il est encore en exécution.
  2. Supprimez le fichier .lock dans le dossier :
    C:\Users\{votreNom}\Adobe Flash Builder 4.6\.metadata
  3. Supprimez le fichier .snap dans le dossier :
    C:\Users\{votreNom}\Adobe Flash Builder 4.6\.metadata\.plugins\org.eclipse.core.resources
  4. Et pour ceux qui ne trouvent pas comme moi ce fichier .snap allez dans
    C:\Program Files (x86)\Adobe\Adobe Flash Builder 4.6
    et exécutez FlashBuilderC.exe

Voila, votre problème doit être réglé ! 😉

bug-flash-builder-4.6

Comment obtenir plein de Like (J’aime) Facebook ou de Follow Twitter ?

logo128Comment faire pour être beaucoup Aimé (Like) sur Facebook ? et être beaucoup suivi (Follow ) sur Twitter ?

Voici la nouvelle version de LikeAndFollow 2 disponnible gratuitement et en téléchargement ici au choix :

Sur le site vous découvrirez un logiciel, qui une fois installé sur votre pc, vous permettra de faire de l’échange de like (j’aime)  Facebook, mais également dans une prochaine version des échanges de follow (abonnés) sur Twitter, ou encore des Plus one de Google et du trafic pour vos sites internet.

 

l’application est en cours de refonte en version 2, cet article sera bientot mis à jour avec un téléchargement en direct sur cette page

 

Le principe est simple :

  1. Il faut tout d’abord télécharger l’application like-follow.me sur le site www.like-follow.me en cliquant simplement sur l’image dans la première page.
  2. Lancer l’application qui se trouve sur votre bureau.
  3. Pour le premier lancement indiquer votre mail et cliquer connexion.
  4. Une fois sur le menu principal choisir entre Facebook / Twitter / Google +One / Trafic sur votre site internet. (la version est actuellement en Beta, pour le moment seul facebook est activable)
  5. Une fois sur le menu secondaire sélectionner « Ajouter une page »
    like-follow-3-1024x590
  6. Renseigner les informations du formulaire en entête : Adresse de votre page facebook, catégorie de votre page, cpc c’est le coût que vous voulez dépenser (en points) à chaque clic (like, follow, visite … ), et le budget : c’est le maximum que vous voulez allouer en crédits pour cette page.
    like-follow-4-1024x613
  7. Retourner au menu précédent en cliquant l’icône planète à gauche de l’interface.
  8. Voila, des visiteurs vont venir cliquer votre bouton j’aime sur votre page facebook.
  9. Pour gagner des crédits vous pouvez cliquer sur « Gagner des Crédits », puis Liker des pages qui se présenteront à vous.

Je complèterai cet article suivant l’avancée de l’application. Une version 2 est en préparation.

Créez un e-commerce à partir de WordPress c’est tout à fait possible avec plugEcom :

  • + votre nom de domaine
  • + hébergement
  • + WordPress
  • + le module e-commerce plugEcom

50 € /mois le tout !
créer boutique en ligne

Simuler la souris, le clavier ou contrôler les fenêtres des autres applications en Adobe Flex AIR

botAujourd’hui je vais vous présenter brièvement ma nouvelle librairie AIR qui permet entre autres de prendre le contrôle et de simuler un clavier, une souris sous Flex  AIR.
Ces fonctions peuvent s’avérer très utiles lorsque vous créez des programmes pour automatiser certaines tâches du quotidien, en d’autres termes la création de « Bot ».

Cette class est à peu prêt l’équivalent de la class Robot en java.

  1. Commencez par créer un nouveau projet AIR.
  2. Ajoutez dans « properties > Flex build path > Library path » le fichier Robot.swc
  3. Placez l’exe pbot.exe à la racine de votre projet.
  4. Créez un objet de type Robot
  5. Appelez les différentes fonctions de l’objet tel que setClick, setKey, …

Procédure d’installation de la démo :

  1. Téléchargez l’installation ci-dessus.
  2. Installez puis acceptez si le parfeu windows vous demande l’autorisation pour le fichier pbot.exe
  3. cliquez les différents boutons « Go » pour tester quelques unes des fonctions de la librairie Robot.swc .
  4. Vous pouvez lancer Firefox pour faire les tests de Handle application.

Voici le code de l’application :

<!--?xml version="1.0" encoding="utf-8"?-->

<![CDATA[ import com.ideva.fr.robot.Robot; import com.ideva.fr.robot.RobotEvent; import mx.events.FlexEvent; private var robot:Robot; protected function creationCompleteHandler(event:FlexEvent):void { robot = new Robot(); initEvent(); } protected function closeHandler(event:Event):void { robot.exit(); } protected function initEvent():void { robot.addEventListener( RobotEvent.CONNECT, robotConnect ); robot.addEventListener( RobotEvent.RESULTHANDLE, resultHandle); robot.addEventListener( RobotEvent.RESULTPOSWIN, resultPosition); } protected function robotConnect( evt:RobotEvent ):void { menuGe.visible = true; } /*********** Windows position ************/ protected function position_clickHandler(event:MouseEvent):void { //robot.firstPlan("Firefox"); if(inName.text.length > 0)
robot.getHandleWindow(inName.text);
}

protected function resultHandle(evt:RobotEvent):void
{
log.appendText( 'result handle window '+String( evt.window.handle )+"\n" );
//get position
robot.getPositionWindow( evt.window.handle );
}

protected function resultPosition(evt:RobotEvent):void
{
log.appendText( 'result position window :'+String(evt.window.position)+"\n" );
}

protected function first_clickHandler(event:MouseEvent):void
{
if(inName2.text.length > 0)
robot.firstPlan(inName2.text);
}

/************** Mouse click **************/
protected function autoClick_clickHandler(event:MouseEvent):void
{
robot.setClick( new Point(Number(inXmouse.text), Number(inYmouse.text)) );
}

/************** Key control **************/
protected function keypress_clickHandler(event:MouseEvent):void
{
focusManager.setFocus( inRes );
robot.setKey( inKey.text );
}

protected function string_clickHandler(event:MouseEvent):void
{
focusManager.setFocus( inRes2 );
robot.setString( inStr.text );
}

]]>

  • 1
  • 2