et moi macapuche tu m'as oubliée,ce n'est pas parce que je suis une blonde que je m'y connais pas en actionscript :
En ce qui me concerne, ayant un blog "fait maison", je n'ai pas encore eu à faire face à des spammeurs, mais c'est surtout pour des raisons pratiques de formatage du texte par les BBCode que j'ai fait ce formulaire en Flash. Je n'ai pas pris la peine de faire un preload pour les 2,26Ko occupés par l'animation
Le problème qui s'est posé à moi est que la classe Selection est assez capricieuse : en effet, elle ne permet de connaitre la zone sélectionnée que pour un élément ayant le focus. Or, lorsque l'on clique sur un bouton, ce bouton prend le focus, et on perd donc les informations concernant le texte qui a été selectionné. J'ai donc créé une mini-classe qui permet de garder en permanence la sélection faite sur une zone de texte donnée, et de lui appliquyer des "tags" : dans cecas les tags sont bien évidemment des BBCodes ...
là-voici commentée en + messieurs :
/**
* TextFormater
* Premier brouillon, v0.0 alpha
*
* Surveille la sélection dans un champ texte
* et fournit les outils pour le formater
*/
class TextFormater {
// TextField à formater
private var _textfield:TextField;
// Position de début et de fin de la sélection
private var _begin:Number;
private var _end:Number;
// Constructeur
// Prend en paramètre le champ texte à formater
function TextFormater ($tf:TextField) {
this._textfield = $tf;
// On crée une propriété dans le TextField
// qui pointe vers l'objet TextFormater
this._textfield._formater = this;
// Quand le champ texte prend le focus
// on surveille la selection
this._textfield.onSetFocus = function() {
this._formatInterval = setInterval(this._formater,"checkSelection",50);
}
// Quand le champ texte perd le focus
// on arrête de le surveiller
this._textfield.onKillFocus = function() {
clearInterval(this._formatInterval);
}
}
// Surveille la sélection faite dans le champ texte
function checkSelection() {
// Si le champ texte a bien le focus
if (eval(Selection.getFocus()) == this._textfield) {
// On renseigne le début et la fin de la selection
this._begin = Selection.getBeginIndex();
this._end = Selection.getEndIndex();
}
}
// Ajoute un "tag" (BBCode ou autre) au début
// et à la fin de la sélection
function addTag($begin:String, $end:String) {
var txt:String = this._textfield.text;
// Encadre la sélection avec les tags
this._textfield.text = txt.slice(0,this._begin) + $begin + txt.slice(this._begin,this._end) + $end + txt.slice(this._end);
// Donne le focus au champ texte et sélectionne
// le texte encadré par les tags
Selection.setFocus(this._textfield);
Selection.setSelection(this._begin,this._end + $begin.length + $end.length);
}
}
et oui c'est bien moi la blonde neutron
s'il y une commande que tu ne peux pas trouver dans l'aide contacte moi
Edité le 06/06/2008 à 16:49