¿Quieres registrarte?

Clase Actionscript 3 para cargar texto externo con estilos

Por: penHolder
24 de Noviembre del 2008

Esta es una clase simple que facilita el cargado de un texto externo y su css correspondiente agilizando el uso de contenido externo. La clase extiende de TextField, y recibe solo la ruta del contenido y el css.

Código :

package ph.display.text{
   //
   import flash.text.TextField;
   import flash.text.StyleSheet;
   import flash.net.URLLoader;
   import flash.net.URLRequest;
   //
   public class TextHolder extends TextField {
      //
      private var field:TextField;
      private var externalTxt:String;
      private var externalCss:String;
      private var css:StyleSheet;
      private var cssLoader:URLLoader;
      private var txtLoader:URLLoader;      
      //
      public function TextHolder():void {
         //
         field = this;
      }
      //
      public function loadExternalContent(_externalTxt:String, _externalCss:String = ""):void {
         //
         externalTxt = _externalTxt;
         externalCss = _externalCss;
         //
         loadText();
      }
      //
      private function loadText():void {
         //
         cssLoader = new URLLoader;
         cssLoader.load(new URLRequest(externalCss));
         cssLoader.addEventListener(Event.COMPLETE, cssComplete);
         //
         txtLoader = new URLLoader;
         txtLoader.load(new URLRequest(externalTxt));
         txtLoader.addEventListener(Event.COMPLETE, txtComplete);
      }
      //
      private function cssComplete(e:Event):void {
         //
         css = new StyleSheet();
         css.parseCSS(e.target.data);
         field.styleSheet = css;
      }
      //
      private function txtComplete(e:Event):void {
         //
         field.htmlText = e.target.data;
      }
      //      
   }// class
}// package


Entonces solo hariamos algo asi:

Código :

import ph.display.text.TextHolder;
//
var texto:String = "miTexto.txt";
var estilo:String = "miEstilo.css";
var txt:TextHolder = new TextHolder();
txt.loadExternalContent(texto, estilo);
addChild(txt);

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas css actionscript_3 componente

Comentarios | Enviar un comentario
Está bien la clase (y)
Aunque como te dije la propiedad field es innecesaria.
Y yo delegaría la carga de los datos externos para hacer el código mas reutilizable

PD: También le hubiese venido bien un poco de explicación del código *tirón de orejas
Por: Zguillez
Mandame un ejemplo a rafael.mendosa704@ipigrm.rimed.cu
Por: Rafael Mendoza-blog

Rafael Mendoza-blog :

Mandame un ejemplo a rafael.mendosa704@ipigrm.rimed.cu
Okey ! Pero, ¿no quieres que te envié algo mas de camino?, ¿quizá un certificado oficial de Adobe?, ¿tu taza de café?
Por: M@U
Hey parce estamos en una comunidad, codigo libre, para ayudarnos todos, me parece que deberias subir todos los archivos y explicar el codigo, es un tutorial verdad?, entonces que se vea como uno, y está muy interesante y practico.
Por: JasonGamba
ok, parece que necesita explicacion U_U

Código :

package ph.display.text{

   // importamos los paquetes necesarios
   import flash.text.TextField;
   import flash.text.StyleSheet;
   import flash.net.URLLoader;
   import flash.net.URLRequest;
   //
   public class TextHolder extends TextField {
      //
      private var field:TextField;      // esta variable se pude obviar
      private var externalTxt:String;   // la ruta donde estara nuestro texto
      private var externalCss:String;   // la ruta donde estara nuestro estilo
      private var css:StyleSheet;       // el objeto de tipo css
      private var cssLoader:URLLoader;  // el loader para cargar el estilo
      private var txtLoader:URLLoader;  // el loader para cargar el texto      
      //
      public function TextHolder():void {
         //
         field = this; // como dije, se puede ovbiar y usar directamente this
      }
      //
      public function loadExternalContent(_externalTxt:String, _externalCss:String = ""):void {

         // pisamos las variables e iniciamos la funcion que carga el texto
         externalTxt = _externalTxt;
         externalCss = _externalCss;
         //
         loadText();
      }
      //
      private function loadText():void {

         // instanciamos el primer loader y le pasamos la ruta del archivo por medio del metodo load()
         cssLoader = new URLLoader;
         cssLoader.load(new URLRequest(externalCss));
         // llamamos una funcion cuando se haya completado la carga
         cssLoader.addEventListener(Event.COMPLETE, cssComplete);

         // lo mismo pero con el texto
         txtLoader = new URLLoader;
         txtLoader.load(new URLRequest(externalTxt));
         txtLoader.addEventListener(Event.COMPLETE, txtComplete);
      }
      //
      private function cssComplete(e:Event):void {

         /*
         primero instanciamos el objeto StyleSheet,
         luego, mediante el metodo parseCSS() "leemos" el contenido y, finalmente,
         le asignamos el contenido al texto
         */
         css = new StyleSheet();
         css.parseCSS(e.target.data);
         field.styleSheet = css;
      }
      //
      private function txtComplete(e:Event):void {

         // finalmente nos queda cargar el texto
         field.htmlText = e.target.data;
      }
      //      
   }// class
}// package

Para probarlo, por ejemplo usa un codigo HTML basico en un archivo txt:
texto.txt

Código :

<p><h1>Bienvenidos a Cristalab</h1>
<a href="http://www.cristalab.com/usuario/2-freddie" target="_blank">Freddie</a>. es el creador de <b>Cristalab</b> y confiesa que existen dos razones principales de su creación, la primera es muy íntima:
<span class="quote">"Cristalab surge en respuesta al claro deseo de aniquilar, sin el menor miramiento, piedad o tregua, a Maestros del Web. La versión para el público es que Cristalab nació como una comunidad independiente, sin enlaces corporativos, obligaciones con terceros o simplemente la mentalidad tradicional.</span>
<span class="foot">Fragmento tomado de la <a href="http://www.maestrosdelweb.com/editorial/freddie-vega-de-cristalab/" target="_blank">entrevista a Freddie en Maestros del Web</a>.<span/>
</p>

Y tambien creas un archivo css con los correspondientes estilos:
estilo.css

Código :

h1 {
 font-size:24px;
 font-family:"verdana";
 color:#336699;
 text-align:center;
}

p {
 font-family:"verdana";
 font-size:12px;
 color:#333333;
 text-indent:10px;
 text-align:left;
}
 
.quote { color:#AAAAAA; font-style:italic; }

.foot { font-size:9px; text-align:right;}

a:link { color:#006699; }

a:hover { color:#0099CC; text-decoration:underline; }

Entonces, para usarlo, solo hariamos algo asi:

Código :

import ph.display.text.TextHolder;
//
var texto:String = "texto.txt";
var estilo:String = "estilo.css";
var txt:TextHolder = new TextHolder();
txt.loadExternalContent(texto, estilo);
addChild(txt);


Todos los archivos deben estar en el mismo directorio


para entender mas sobre la clase Loader, busca aqui en clab hay bastante info
Por: penHolder
Me da 2 errores...

1046: No se encontró el tipo o no es una constante en tiempo de compilación:

private function cssComplete(e:Event):void {

y

private function txtComplete(e:Event):void {

Alguna idea ??? Mil gracias...
Por: PinkPonk-blog
Arreglao falta importar el paquete de eventos...

import flash.events.*;

GRACIAS !!!!!
Por: PinkPonk-blog
Hola!
Ya sé que el post es antiguo, pero la necesidad me ha traido hasta él y después de mucho pelear me he encontrado con un error que no puedo solucionar principalmente porque no soy nada experta en esto :(
El error en cuestión es el siguiente:

1151: Existe un conflicto con la definición txt del espacio de nombres internal.

¿Alguien puede ayudar?
Mil gracias :)
Por: Sonsku
Y que pasa si intento recuperar texto dinamico (valores de variables desde un php externo por ejemplo)?.

Recuperar las variables ya lo resolvi, ahora como formateo el texto resultante?.
Por: yo-blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.