Comunidad de diseño web y desarrollo en internet online

cual es el error???

Citar            
MensajeEscrito el 03 Mar 2009 09:33 pm
hola amigos...unna nueva duda, pero esta es mas simple, solo q no encuentro la vuelta.

tengo unos textAreas que los uso de input text y despues tengo unos TextField que los usos de output text, la cuestion es que recupero las medidas y posiciones de los TextField de una base de datos y los paso como datos para q estos se posicionen donde debe ser, el problema es que salen en cualquier lado posicionado y no se si esta bien:

este es el codigo:

Código :

public function datos(resultado:Object):void 
      {
      /**
       * Guardo los resultados recuperados
       */
         t = resultado.serverInfo.initialData;
      for(i=0; i<t.length; i++)
         {
         comboCategoria.addItem( { idcampo_txt:t[i][0], tamanio_w:t[i][1], tamanio_h:t[i][2], pos_x:t[i][3], pos_y:t[i][4], nbre_imagen:t[i][5] } );   
         comboCategoria.x = 5;
         comboCategoria.y = 5;
         var cargarImagen:Loader = new Loader();
         cargarImagen.load(new URLRequest ("tarjetas/" + t[i][5] + ".jpg"));
         cargarImagen.x = 5;
         cargarImagen.y = 137.5;
         addChild(cargarImagen);
         addChild(bordeImagen);
         
         inputText = new TextArea()
         inputText.setSize(314, 88);
         inputText.editable = true;
         inputText.alwaysShowSelection = true;
         inputText.move(452, (165 * i + 70));
         inputText.text = "campo de texto listo para escribir";
         addChild(inputText);
         
         outputText = new TextField();
         outputText.width = t[i][1];
         outputText.height= t[i][2]
         outputText.selectable = false;
         outputText.border=true
         outputText.x = t[i][3];
         outputText.y = t[i][4];
         outputText.text = "campo de texto: " + t[i][0];
         addChild(outputText);
         
         inputText.addEventListener(Event.CHANGE, cambiarTexto);
         function cambiarTexto(ch_evt:Event):void 
         {
            outputText.text = inputText.text;
         }
         }
      }      


los output text que salen en cualkier lado y no donde deben ser, es esta parte:

Código :

outputText = new TextField();
         outputText.width = t[i][1];
         outputText.height= t[i][2]
         outputText.selectable = false;
         outputText.border=true
         outputText.x = t[i][3];
         outputText.y = t[i][4];
         outputText.text = "campo de texto: " + t[i][0];
         addChild(outputText);


bueno, espero puedan ayudarme.
desde ya gracias.
saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

firefox
Citar            
MensajeEscrito el 04 Mar 2009 07:27 am
no tengo ni idea, pero por si acaso vigila que t[i][3] y t[i][4] sean Números (puedes usar Number(t[i][3]) y Number(t[i][4]). En cualquier caso haz un "trace" de ellos para saber qué valor tienen

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Mar 2009 09:27 am
Eliseo2, si, los datos son todos numericos y me los trae todo correctamente. Si te fijas, antes de pasarlas como valor, visualizo que es lo q trae, para eso uso un datagrid, esta linea me da las propiedades:

Código :

comboCategoria.addItem( { idcampo_txt:t[i][0], tamanio_w:t[i][1], tamanio_h:t[i][2], pos_x:t[i][3], pos_y:t[i][4], nbre_imagen:t[i][5] } );

por eso me resulta extraño que me ponga los TextField en cualquier lado.
Igual, gracias.
Saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

firefox
Citar            
MensajeEscrito el 04 Mar 2009 05:58 pm
No sé cómo sabes si una variable es un número o un string en un Grid. Recuerda que no es lo mismo el STRING "2" que el número 2, por si acaso prueba

Código ActionScript :

outputText.x = Number(t[i][3]);
outputText.y = Number(t[i][4]);

Sé que no está ahí el fallo, pero...

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Mar 2009 06:03 pm
hola Eliseo2. si entindo lo que me decis, pero probandolo, sigue cometiendo el mismo error. Posiciciona todos los textField en cualquier lado, y hay 3 uno encima del otro.

No encuntro la vuelta al problema.

igual gracias por la ayuda

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

firefox
Citar            
MensajeEscrito el 04 Mar 2009 08:09 pm
Ese codigo esta dentro de la clase de documento?? osea que al dar addChild(); metes los textos directamente al stage??

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Mar 2009 08:09 pm
hola, ya he descubierto el error.
era muy simple, el problema era que los valores eran con referencia a la posicion de la imagen, sin embargo, la imagen estaba en el escenario, por lo que ahora los TextField tendria q hacer referencia a la imagen en el escenario, por lo que las lineas quedaron:

Código :

outputText.x = cargarImagen.x+Number(t[i][3]);
outputText.y = cargarImagen.y+Number(t[i][4]);

/*donde:
cargarImagen.x= posicion en el escenario de la imagen cargada;
cargarImagen.y=posicion en el escenario de la imagen cargada;
*/

saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

firefox
Citar            
MensajeEscrito el 04 Mar 2009 08:15 pm
pero ahora hay un nuevo problema:

lo que quiero, como veran con estas lineas:

Código :

inputText.addEventListener(Event.CHANGE, cambiarTexto);
         function cambiarTexto(ch_evt:Event):void 
         {
            outputText.text = inputText.text;
         }


es que cuando cambie el texto en inputText este cambie el texto en outputText.
el problema viene que de esta forma solo me funcionar 1 campo y es el ultimo que se agrega, y no se como ponerlo para que cada inputText modifique a su outputText correspondiente.

si me ayudan se los agradezco.
con esto ya no molestaria mas:P
saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

firefox
Citar            
MensajeEscrito el 05 Mar 2009 08:00 am
El motivo por el que sólo funciona en el último campo es porque, tanto la variable outputText como la variable inputText hacen referencia a los últimos TextField creados.
Dentro de la función deberíamos usar ch_evt.target, en lugar de inputText. claro que no sabemos a qué outputText corresponde cada uno de ellos.
Una solución pasa por dar como propiedad "name" a los textos una serie de nombres correlativos, p.e.

Código ActionScript :

//en el for donde los creamos
for(i=0; i<t.length; i++){
   .....
   inputText = new TextArea()
   //le damos nombre al inputText
   inputText.name="input"+i.toString();
  .....
  outputText = new TextField();
  //idem para el outputText
   outputText .name="output"+i.toString();
  ....
}

Así, la función cambiarTexto puede hacer uso de que nuestras cajas de teto tienen nombre

Código ActionScript :

function cambiarTexto(ch_evt:Event):void{ 
     var inputText=TextArea(ch_evt.target)
     var outputText=TextField(getChildByName("output"+inputText.name.substr(5)))
     outputText.text = inputText.text;
}

Vamos, recogemos en la VARIABLE inputText el "target" de la función
Recogemos en la VARIABLE outputText el DisplayObject que se llame "output"+ el número de
p.e.
inputText.name será "input2"
inputText.name.substr(5) será "2"
"output"+inputText.name.substr(5) será "output2"
con getChildByName("output"+inputText.name.substr(5)( tendremos el DispplayObjet output2
y le decimos que es de tipo TextField (lo que se conoce como "conversión de cast")

Vamos, en Flash lo que estamos haciendo siempre es crear VARIABLES que "hacen referencia" a los MCs (o Sprites, o Display). Ese es el modo de controlarlos.
1.-Si damos nombre (la propiedad name) a nuestros MCs, los podremos recuperar con getChildByName
2.-Si no les damos nombre, también los podremos controlar, ya sea con getChildAt, si sabemos su posición, o guardándolos en un array o en unas variables que pertenecezcan a la película principal
3.-Si los recuperamos con getChildBtName o getChildAt, debemos hacer una "conversión de cast" para indicarle al compilador de qué tipo es nuestro MC

NOTA:En lugar de
"output"+inputText.name.substr(5)
//podríamos haber usado
inputText.name.replace("input","output")

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Mar 2009 12:43 pm
Eliseo2, espectacular, la verdad que funciono perfecto.
solo me queda una ultima pregunta y es que yo a los textos tambien debo darle formato, es decir, color, tamaño, tipografia...etc.

quise copiar la funcion que me has explicado, pero no puedo hacer que funcione.

el codigo que tengo es:

Código :

formato = new TextFormat();
formato.color = 0x924834;
         
picker = new ColorPicker();
picker.x = 740;
picker.y = (170 * i) + 155;
addChild(picker);

picker.addEventListener(ColorPickerEvent.CHANGE, cambiarColorTexto);
function cambiarColorTexto(event:ColorPickerEvent)
         {
            var outputText=TextField(getChildByName("output"+inputText.name.substr(5))) 
            formato.color = picker.selectedColor;
            outputText.setTextFormat(formato);
         }


pero esto no funciona...no me lo hace.
El codigo esta dentro del for que recupera, es igual al anterior solo que modificaria el colo.
una vez que entienda esto, el formato, ya sea negrita, tamaño o tipografia, sera todo lo mismo.

si puedes ayudarme, como hasta ahora, estare gratamente agradecido.
saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

firefox
Citar            
MensajeEscrito el 05 Mar 2009 03:18 pm

bubudrc escribió:

Eliseo2, espectacular, la verdad que funciono perfecto.
solo me queda una ultima pregunta y es que yo a los textos tambien debo darle formato, es decir, color, tamaño, tipografia...etc.
quise copiar la funcion que me has explicado, pero no puedo hacer que funcione.

Eso me indica que no me expliqué bien :cry:

Voy a tratar de explicar la "magia" de la anterior función

Código ActionScript :

function cambiarTexto(ch_evt:Event):void{  
     var inputText=TextArea(ch_evt.target) 
     //la VARIABLE inputText hace referencia al TextArea indicado por ch_evt.target
     //en una función llamada por un objeto.addEventLister(Evento,funcion) el parámetro
     //de función siempre es un evento
     //la propiedad "target" de ese evento será "objeto"
     var outputText=TextField(getChildByName("output"+inputText.name.substr(5))) 
      //la VARIABLE outputText hace referencia a un TextField llamado "output#", donde
     //# es el sufijo del nombre del TextArea indicado por ch_evt.target
     outputText.text = inputText.text; 
} 


Si lo que queremos es cambirle el formato cuando lo estamos creando, vale con que lo hagamos en el for que lo crea

Código ActionScript :

//antes del for
//defino el formato
var formato:TextFormat = new TextFormat();
formato.color = 0x924834;

//en el for donde los creamos 
for(i=0; i<t.length; i++){ 
   ..... 
   inputText = new TextArea() 
   //le damos nombre al inputText 
   inputText.name="input"+i.toString(); 
  ..... 
  outputText = new TextField(); 
  //idem para el outputText 
   outputText .name="output"+i.toString(); 
   //le damos "formato" aquí
   outputText.setTextFormat(formato);
  .... 
} 


Si lo que queremos es que cambie el formato sólo cuando cambie el texto, deberemos cambiarle el formato en la misma función cambiarTexto.

Código ActionScript :

//puedo definir el formato fuera de la función, esto es, que pertenezca a la película principal
//o dentro de la función
var formato:TextFormat = new TextFormat();
formato.color = 0x924834;

function cambiarTexto(ch_evt:Event):void{  
     // si lo queremos definir dentro
     //var formato:TextFormat = new TextFormat();
     //formato.color = 0x924834;
     var inputText=TextArea(ch_evt.target) 
     var outputText=TextField(getChildByName("output"+inputText.name.substr(5))) 
     outputText.text = inputText.text; 
     outputText.setTextFormat(formato) //(*)
}

(*)Le podemos dar formato al TextField al que "hace referencia" la VARIABLE outputText porque, dentro de la función cambiarTexto, esa variable "apunta" (hace referencia) al TextField

No entiendo que tengas un ColorPicker para cambiarle el color a "outputText". Vamos:"outputText" es una VARIABLE a la que tenemos que dar un valor. Lo que has hecho es crear un ColorPicker, que cuando cambia...

Código ActionScript :

function cambiarColorTexto(event:ColorPickerEvent)
         {
            //la variable "inputText" NO tiene ningún valor
            var outputText=TextField(getChildByName("output"+inputText.name.substr(5))) 
            //por tanto la variable outputText es null
            formato.color = picker.selectedColor;
            //no podemos asignar ningún formato al MC al que "hace referencia" la VARIABLE outputText, puesto que
            //no hace referencia a nada
            outputText.setTextFormat(formato);
         }

Si quisiéramos, p.e. cambiar el color a TODOS los MCs output#, cuando seleccionemos el ColorPicker podríamos escribir

Código ActionScript :

function cambiarColorTexto(event:ColorPickerEvent)
{
           for (var i:int=0;i<10;i++){
              var outputText=TextField(getChildByName("output"+i.toString()) 
              //por tanto la variable outputText "apunta" a TextField output#
              formato.color = picker.selectedColor;
              outputText.setTextFormat(formato);
           }
}

Observa que no tiene nada que ver la variable ouputText que usamos DENTRO de la función "datos" -cuando hacemos el for para crear las cajas de texto- con la variable ouputText que usamos DENTRO de la función "cambiarTexto" o dentro de la función "cambiarColorTexto". Vale, es cierto que las llamamos igual, pero pensemos que "desaparecen" cuando salimos de las respectivas funciones -realmente desaparecen sólo de las que definimos con "var" dentro de la función-. Y las llamamos igual porque nos apetece y nos sentimos cómodos con esos nombres, pero una no tiene nada que ver con la otra. puff (menuda "chapa")

No sé si he conseguido que se entienda la "idea" de variables que hacen referencia a MCs -o TextField o TextArea o Shapes o...) En Flash estamos creando variables que hacen referencia a un MC dentro de funciones, pero, una vez fuera de la función ya no tienen ningún valor

NOTA:Que nadie piense que cuando escribo VARIABLE en mayúsculas estoy gritando, es sólo un modo de recalcar una idea -pero sin gritar, que nunca me gustaron los gritos :) -

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Mar 2009 11:30 pm
Hola eliseo. gracias nuevamente por tu respuesta.
Siempre tan claro y respondiendo completo, que no entienda no es culpa tuya, sino que es corto mi poder de pensamiento y analisis.
con referencia a los colorpiker, lo que hago es crear uno por cada campo de texto que se cree, es decir por cada Texfield="outputText".
Hago esto, por lo que quiero es q segun lo q se escriba en cada campo pueda darle un color, porque luego ademas del color se le agregaran tamaño de tipografia, fuente, estilo, etc, pero se le aplicaran por separado a cada uno de los campos de texto.
por eso es q creo la cantidad que creo.
lo que tu me has ayudado, sirve para que un colorpiker cambie todos los colores, pero yo no necesito eso...
si puedes guiarme a como tengo q hacer para que cada color picker.

he probado dandole nombre al picker, pero no me funcionar

Código :

picker = new ColorPicker();
         //idem para el outputText 
         picker.name = "picker" + i.toString();
         picker.x = 740;
         picker.y = (170 * i) + 155;
         addChild(picker);

function cambiarColorTexto(ch_evt:ColorPickerEvent) 
{
              var picker = ColorPicker (ch_evt.target)
           var outputText=TextField(getChildByName("output"+picker.name.substr(5)))
              //por tanto la variable outputText "apunta" a TextField output# 
              formato.color = picker.selectedColor; 
              outputText.setTextFormat(formato); 
} 


pero no es lo mismo, ya que no es un string.
por eso...te molesto esta ultima vez para poder realizarlo, ya q de esta forma dejaria listo los estilo y luego podria repetir la funcion del formato que quisiera agregarle.

desde ya gracias por todo.
saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

firefox
Citar            
MensajeEscrito el 06 Mar 2009 07:46 am
Has escrito
picker.name.substr(5);

substr cuenta como 0, el primer cracter de un string, como un picker se llama, "picker2", p.e., así que debería ser

Código ActionScript :

picker.name.substr(6)  //te devolvería "2"

También puedes escribir

Código ActionScript :

picker.name.replace("picker","output") //te devolvería "output2"

NOTA:supongo que has definido "formato" en la película principal con un
var formato:FormatText=new Format() fuera de cualquier función -si no lo tendrías que poner dentro de la función cambiarColorTexto
NOTA2:No es molestia

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Mar 2009 09:29 am
ha...mira lo que era el error, solo un numero, porq "picker" tiene 6 letras y no 5 jajajajajaa.....

muchas gracias.

pero te sigo molestando.
ya que aunque funcione todo correctamente, tengo la duda.

por ejemplo, yo escribo en el TextArea, despues le cambio el color al TextField con el ColorPicker, pero si le cambio el color y luego vuelvo a escribir en el TextArea, resulta que la letra pierde su color y vuelve al color normal, o sea, es como q no hubiera sufrido ningun cambio.
queria saber porque se producia ese desenlace y si habia forma de poder arreglarlo.

desde ya muchisisissismas gracias por todo lo que me has ayudado, me diste una mano inmensa.

saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

firefox
Citar            
MensajeEscrito el 06 Mar 2009 11:02 am
Crea en la función cambiarTexto una variable que haga referencia al ColorPicker que le corresponda y, después de cambiar el texto, aplicarle el color.

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Mar 2009 12:06 pm
perfecto Eliseo2.
al final las 2 funciones han quedado asi:

Código :

function cambiarTexto(ch_evt:Event):void
      {  
         var inputText=TextArea(ch_evt.target) 
         var outputText=TextField(getChildByName("output"+inputText.name.substr(5))) 
         outputText.text = inputText.text; 
//LO UNICO QUE HICE FUE AGREGAR ESTA LINEA
         outputText.setTextFormat(formato);
//HASTA AQUI
      }
      
      function cambiarColorTexto(ch_evt:ColorPickerEvent) 
      {
              var picker = ColorPicker (ch_evt.target)
           var outputText=TextField(getChildByName("output"+picker.name.substr(6)))
              //por tanto la variable outputText "apunta" a TextField output# 
              formato.color = picker.selectedColor; 
              outputText.setTextFormat(formato); 
      } 

y funciona perfecto. a esto te referias con tu mensaje anterior????

esto permitira que yo pueda luego, en otra clase despues poder tomar los valores y estilos que se le dieron a cada TextField???

desde ya muchisisismas gracias.
saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

firefox
Citar            
MensajeEscrito el 06 Mar 2009 12:16 pm
No, la variable "formato" tiene el valor del último formato que hayas cogido. Vamos, cambia un texto, cambia el color, cambia el color de otro texto y vuelve a cambiar el texto primero. Verás que te coge el color del último picker que hayamos seleccionado
....
....
....
....

Sé que vas a leer la olución -está ahí abajo- pero no me resistía a poner unos puntos de emoción.





Me refería a:

Código ActionScript :

function cambiarTexto(ch_evt:Event):void
      {  
         var inputText=TextArea(ch_evt.target) 
         var outputText=TextField(getChildByName("output"+inputText.name.substr(5))) 
         //buscamos el picker que le corresponde
        var picker = ColorPicker (getChildByName("picker"+inputText.name.substr(5))) 

         outputText.text = inputText.text; 
         //le decimos que nuetro formato coga el valor del picker
         formato.color = picker.selectedColor; 
         outputText.setTextFormat(formato);
      }

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Mar 2009 12:20 pm
Vale, "repensando el problema", creo que la mejor solución es recoger el formato que tuviera con un getTextFormat, cambarle el texto y aplicarle nuevamente el formato

Código ActionScript :

function cambiarTexto(ch_evt:Event):void 
      {   
         var inputText=TextArea(ch_evt.target)  
         var outputText=TextField(getChildByName("output"+inputText.name.substr(5)))  
         //recogemos el formato que tuviera
         var formato:TextFormat=outputText.getTextFormat(); 
         outputText.text = inputText.text;  
          //le aplicamos el formato
         outputText.setTextFormat(formato); 
      } 

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Mar 2009 12:55 pm
ha...excelente.

Muchisimas gracias.

como siempre muy claro y especifico.

con getTextFormat, me permite recuperar los formato que tuviera, entonces de esta forma, puedo luego recuperar los valor tanto de color, como de tamaño, como de tipo de fuente etc, y poder visualizarlos sin problemas???


gracias por todo lo que me has ayudado.
saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

firefox
Citar            
MensajeEscrito el 10 Mar 2009 09:00 pm
Hola comunidad. Como andan?
pues si, sigo teniendo problemas con esta clase y son siempre los mismos.

he creado algunos botones, pero basicamente siempre es la mismo funcion, o sea, crear dinamicamente para cada TextField un boton, y que al accionar el boton realize un formato.

lo que he realizado hasta ahora es:

Código :

//bold es un mc, en el .fla, donde hay una imagen.
//o sea, los botones lo muestra bien, solo que al clickear sale error #1009 y no hace lo que tiene q hacer

public var negrita:bold;
      
      public function datos(resultado:Object):void 
      {
t = resultado.serverInfo.initialData;
      for(i=0; i<t.length; i++)
         {
/**
          * creacion de los TextField donde se visualizara los textos
          */
         outputText = new TextField();
         //idem para el outputText 
         outputText.name="output"+i.toString();
         outputText.width = Number(t[i][1]);
         outputText.height = Number(t[i][2]);
         outputText.selectable = false;
         outputText.border=true
         outputText.x = cargarImagen.x+Number(t[i][3]);
         outputText.y = cargarImagen.y+Number(t[i][4]);
         outputText.text = "campo de texto: " + t[i][0];
         outputText.mouseEnabled = false;
         outputText.multiline = true;
         outputText.wordWrap = true;
         addChild(outputText);



negrita = new bold();
         negrita.name = "negrita" + i.toString;
         negrita.x = (50 * i) + 5;
         negrita.y = 50;
         negrita.buttonMode=true;
         addChild(negrita);
negrita.addEventListener(MouseEvent.CLICK, textoNegrita);
}
}
function textoNegrita(evt:MouseEvent)
      {
            var negrita = bold (evt.target)
         var outputText = TextField(getChildByName("output" + negrita.name.substr(7)));
            //por tanto la variable outputText "apunta" a TextField output#
         formato.bold = true;
            outputText.setTextFormat(formato); 
      }

Le problema es que me crea el boton, lo pone donde tiene q poner y todas las caracteristicas, pero cuando le doy click le sale "error #1009" y no realiza ninguna accion.
Tendria q crearse un boton por cada TextField y hacer que segun el boton se modifique el text field correspondiente.

espero puedan ayudarme a solucionarlo.
desde ya muchas gracias
saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.