Beruflich Dokumente
Kultur Dokumente
Flex
Table des matières
1. Introduction........................................................................................................................3
2. Empêcher la saisie dans un champ de saisie simple.........................................................3
3. Précaution d’utilisation des dataProvider dans les arbres..................................................3
4. Journalisation des évènements..........................................................................................4
5. Appels de WebService asynchrones.................................................................................4
6. La méthode ValidateNow()................................................................................................6
7. Appliquer un lissage de qualité sur un objet Image............................................................7
8. Comment forcer le Garbage Collecting..............................................................................8
9. Focus sur la barre d’adresse d’Internet Explorer...............................................................9
10. Désactivation de la tabulation standard Flex....................................................................9
11. Contournement du bug de molette dans Flash................................................................9
12. Focus sur le plugin Flash...............................................................................................11
13. Menu contextuel épuré..................................................................................................12
1. Introduction
Ce document regroupe divers astuces collectées pendant les développements de l’application
FMFB qui permettent de faire gagner du temps lors des prochains développements.
Le champ de type UITextField est accessible dans l’objet TextInput par la méthode :
input.mx_internal ::getTextField() dans le champ de type ComboBox par
_combo.mx_internal::getTextInput().mx_internal::getTextField(). Pour
empêcher l’affichage d’une touche saisie il faut donc séquentiellement :
Précédemment le texte de l’input ainsi que la position du curseur aura été sauvegardé sur
l’évènement TEXT_INPUT.
Déclencher les traitements sur l’évènement KEY_DOWN (par exemple vidage du champ sur
saisie dans la touche – du pavé numérique). Indiquer par une variable du contrôle que la
touche ne doit pas être affichée.
Sur l’évènement CHANGE si la touche ne doit pas être affichée on remet le texte précédent
et on repositionne le curseur à la position précédemment sauvegardée
(getTextField().setSelection(savedCaretIndex, savedCaretIndex)).
import mx.core.mx_internal;
webService.loadWSDL("http://localhost/Share/servlet/XFireServlet/FlexViewer?
wsdl");
webService.echo.addEventListener(ResultEvent.RESULT, onSuccess);
webService.echo.addEventListener(FaultEvent.FAULT, onFault);
// on appelle la méthode et on récupère l'AsyncToken
var token:AsyncToken = webService.echo(yell.text);
// on crée une propriété personnalisée qu'on récupérera
// dans la réponse
token.myProperty = new Date().getTime();
}
]]>
</mx:Script>
<mx:Button x="291" y="44" label="Crier" click="shout()"/>
<mx:TextInput x="102" y="29" id="yell"/>
<mx:TextInput x="102" y="59" id="echo"/>
<mx:Text x="10" y="31" text="Saisir l'écho"/>
<mx:Text x="10" y="61" text="Réponse"/>
</mx:Application>
6. La méthode ValidateNow()
Flex est une technologie très optimisée qui est capable d’accumuler les traitements graphique
pour les exécuter de manière fluide, évitant ainsi les clignotements ou autres artefact visuels.
Ceux-ci sont « mis en attente » et exécutez entre 2 traitements interactifs. Il est donc important
de savoir que la modification d’une propriété impactant le visuel d’un UIComponent ne peut être
suivie d’une relecture de la propriété elle-même ou d’autres liées aux composants fils, par
exemple :
try {
new LocalConnection().connect('foo');
new LocalConnection().connect('foo');
} catch (e:*) {}
9. Focus sur la barre d’adresse d’Internet Explorer
Par défaut le plugin Flash sous Internet Explorer permet de tabuler en dehors d’une
application Flex pour changer l’adresse du site. Malheureusement sur certaine application ce
comportement est plus perturbant que pratique. Pour désactiver ce mécanisme il suffit d’ajouter
le paramètre suivant dans la déclaration du plugin dans la page HTML :
AC_FL_RunContent(
"src", "${swf}",
"width", "${width}",
"height", "${height}",
"align", "middle",
"id", "${application}",
"quality", "high",
"bgcolor", "${bgcolor}",
"name", "${application}",
"SeamlessTabbing","false",
"flashvars",'stamp=' + stamp + '&historyUrl=history.htm%3F&lconid=' +
lc_id + '',
"allowScriptAccess","sameDomain",
"type", "application/x-shockwave-flash",
"pluginspage", "http://www.adobe.com/go/getflashplayer"
L’exemple ci-dessus est repris de la page HTML générée par Flex, « SeamlessTabbing » à
« false » signifie qu’il n’est pas possible de sortir du plugin avec les tabulations, le focus reste
constamment à l’intérieur.
DisplayObjectContainer(getComponent()).tabChildren = false;
function isReady()
{
return jsReady;
}
function pageInit()
{
jsReady = true;
}
function getSWF(id)
{
return (navigator.appName.indexOf("Microsoft") != -1) ? window[id] :
document[id];
}
function sendToAS(val)
{
if (val<50 && val>-50)
{
getSWF('WebIndexing').jsdelta(val);
}
}
function handler(delta)
{
if (delta < 0)
{
sendToAS(delta);
}
else
{
sendToAS(delta);
}
}
function wheel(event)
{
var delta = 0;
if (!event) event = window.event;
if (event.wheelDelta)
{
delta = event.wheelDelta/120;
if (window.opera)
{
delta = delta;
}
}
else if (event.detail)
{
delta = -event.detail/3;
}
if (delta)
{
value = Math.round(delta)
handler(value);
}
if (event.preventDefault)
{
event.preventDefault();
}
event.returnValue = false;
}
ExternalInterface.addCallback("jsdelta",wheelZoom);
public function wheelZoom(delta:Number):void
{
// do something with the delta
}
La fonction Flex « wheelZoom » est appelé à chaque tour de molette quelque soit la
position du curseur de la souris. Il convient donc de tester le positionnement du curseur de la
souris avec la méthode « hitTest » avant tout traitement.
ExternalInterface.call("focusBrowser");
function focusBrowser()
{
document.${application}.focus();
}
Ce mécanisme fonctionne à partir d’Internet Explorer 6 et Firefox 3.