sábado, 15 de noviembre de 2008

Conectando a MySQL con PHP


Si queremos hacer paginas dinamicas donde los usuarios puedan interactuar con votaciones, comentarios en foro, y subir sus propios contenidos, la mejor manera de hacerlo es utilizando Bases de Datos (BD).

En este tutorial vamos a realizar una coneccion a una BD utilizando el lenguaje PHP, especificamente las funciones mysql_connect() y mysql_select_db().

Para comenzar vamos a crear un archivo db_conect.php en el que vamos a colocar el siguiente codigo de conexion:

Código
/* conexion ****************/
// conectamos al servidor MySQL
$link = mysql_connect('localhost', 'miUsuario', 'miClave');
if(!$link)
{
die("Error al intentar conectar: ".mysql_error());
}

// seleccionamos la base de datos
$db_link = mysql_select_db('miBaseDeDatos', $link);
if(!$db_link)
{
die('Error al intentar seleccionar la base de datos'. mysql_error());
}
/* fin conexion ************/
La funcion mysql_select_db() se encarga de hacer la conexion del usuario ("miUsuario") con una session de mysql, debemos haber configurado antes este usuario con permisos de lectura o escritura dependiendo de lo que queramos hacer, es decir, si estamos conectandonos a una base de datos para guardar datos debemos tener permisos para insercion en las tablas.

Luego de conectarnos a mysql debemos seleccionar la BD sobre la que queremos operar, en este caso "miBasededatos", para eso utilizamos la funcion mysql_select_db() y le pasamos el nombre de la base de datos y una variable con el valor devuelto por la funcion de conexion mysql_select_db() que utilizamos anteriormente.

Ahora debemos guardar este archivo y incluirlo en cualquier pagina donde queramos realizar transacciones con base de datos, eso lo hacemos añadiendo el siguiente codigo al principio de cada pagina:

<?php


require('db_conect.php');


?>



//de aqui en adelante podemos hacer cualquier transaccion con
//la base de datos sin importar la conexion
Para descargar el codigo de este ejemplo haz click aqui. Cualquier duda o comentario no duden en escribirlo.



Continuar leyendo...

jueves, 13 de noviembre de 2008

Hola Mundo PHP



Este pequeño tutorial es para explicar los undamentos de un lenguaje tan practico y facil como PHP, para empezar debemos diferenciar entre dos tipos de lenguajes que se pueden utilizar a la hora de realizar páginas web:
  • Lenguajes del lado del Cliente: Son lenguajes que corren en la computadora de cada cliente, son muy vulnerables a cualquier ataque informaticos ya que el usuario final posee todo el codigo fuente y puede modificarlo, normalmente se usan para realizar interfaces de usuario, validaciones basicas, etc. Entre ellos encontramos javaScript, HTML, ActionScript, etc.
  • Lenguajes del lado del Servidor: Son lenguajes que no pueden ser visualizados por el cliente, se ejecutan antes que los lenguajes del lado del cliente, y, de esta forma, pueden generar codigos para que sean interpretados por javascript, html, etc. Son los responsables de las conecciones a bases de datos, WebServices, etc.
Por ejemplo: supongamos la siguiente situacion: Un usuario quiere llenar un formulario para inscribirse en una página (el formulario debe estar hecho en HTML) luego cuando introduce los datos y presiona enviar tiene un error de "email no valido", en ese caso, javascript ha sido el responsable de detectarlo, luego lo corrige y el fomulario es enviado al servidor y guardado en una base de datos, el responsable de hacer este paso es PHP. Luego el usuario es redicerrionado a la pagina de su nueva cuenta y ya esta lista para usar (de vuelta a la pagina html).

El desempeño de la aplicacion seria como el mostrado en el gráfico

Ahora vamos a dejar de hablar y vamos entrar en el ejemplo practico, para imprimir por pantalla en PHP debemos utilizar la funcion echo, esta funcion imprime al navegador un codigo para ser interpretado por el cliente, es decir, si colocamos lo siguiente:
echo "<strong>Hola Mundo </strong> ";
En realizada el navegador imprimiria por pantalla lo siguiente:

Hola Mundo
Ya que interpretaria la etiqueta como codigo HTML para poner en negritas el texto. En el ejemplo actual vamos a imprimir por pantalla las frases "Hola Mundo", "<h1>Hola Mundo </h1>" y "<h2>Hola Mundo </h2>" para mostrar las diferencias y las diferentes interpretaciones por parte del navegador.

El codigo del ejemplo es el siguiente:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Untitled Document</title>

<style type="text/css">

<!--

.style6 { font-size: 24px;

font-family: Georgia, "Times New Roman", Times, serif;

font-weight: bold;

}

-->

</style>

</head>


<body>

<table width="74%" border="0" align="center" cellpadding="0" cellspacing="0">

<tr>

<td><p>&nbsp;</p>

<p>Hola mundo en PHP, el codigo en este lenguaje debe incluirse entre las etiquetas &lt;?php ?&gt; y para imprimir por pantalla debe usarse la funcion &quot;echo&quot; seguida de la variable, numero o string que se desea imprimir.</p></td>

</tr>

<tr>

<td height="170" valign="top"><p align="left"><br />

<br />

<br />

<span class="style6"><?php echo "hola mundo!!!"; ?></span></p>

<p align="left"><span class="style6"><?php echo "<h1>hola mundo!!!<h1>"; ?></span></p>

<p align="left"><span class="style6"><?php echo "<h2>hola mundo!!!</h2>"; ?></span></p>

<p align="left">&nbsp;</p>

<p align="left"></p>

<p align="center">Alejandro Sánchez - http://internetdeveloping.blogspot.com/</p></td>

</tr>

</table>

</body>

</html>




Para descargar y probar el codigo fuente del ejemplo haz click aqui. Espero que te haya gustado el tutorial y no dudes en preguntarme nada!!


Continuar leyendo...

miércoles, 12 de noviembre de 2008

Simple Libro de Visitas con MySQL y PHP


PHP es una de las tecnologías mas fáciles de usar a la hora de realizar aplicaciones web, es uno de los lenguajes mas fáciles de aprender y lo recomiendo 100% si queremos empezar en este mundo tan versátil de desarrollo web.

En este caso vamos a realizar un libro de visitas donde los usuarios podrán dejar mensajes en tu página web de manera muy secilla, y los mensajes sera guardados en una Base de Datos MySQL para futuras consultas.

Lo primero que debemos hacer es crear una base de datos en nuestro manejador de base de datos, por ejemplo, PHPMyAdmin. Entramos a en manejador y creamos una base de datos llamada "FirmasVisitas", recuerden saber bien el usuario y login que debeun usar para conectarse a la bd, si lo desconocen prueben siempre co el usuario "root" y clave "" (vacia), esos usuarios por defecto normalmente funcionan.

Una vez creada la BD lo que debemos hacer es crear la tabla "firma" en la base de datos, la tabla va a almacenar los mensajes que pongan los usuarios, utilizando el siguinte script en lenguaje SQL:


Código

CREATE TABLE `firmar` (
`firma_ID` int(11) NOT NULL auto_increment,
`usuario` varchar(25) collate latin1_general_ci NOT NULL,
`firma` text collate latin1_general_ci NOT NULL,
PRIMARY KEY (`firma_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2;

Una vez creada la BD y la tabla que va a almacenar la información procedemos a crear la pagina web que va a permitir al usuario escribir un mensaje apra que sea guardado en la base de datos y luego exibirlo al público, el codigo del archivo es el siguiente:

Debemos conectarnos a la BD al mometo de cargar la página para traer los mensajes ya escritos, Para eso a la base de datos escribimos:

Código
/* conexion ****************/
// conectamos al servidor MySQL
$link = mysql_connect('localhost', 'miUsuario', 'miClave');
if(!$link)
{
die("Error al intentar conectar: ".mysql_error());
}

// seleccionamos la base de datos
$db_link = mysql_select_db('miBaseDeDatos', $link);
if(!$db_link)
{
die('Error al intentar seleccionar la base de datos'. mysql_error());
}
/* fin conexion ************/
Luego debemos enviar el formulario y procesarlo para guardar los datos en la base de datos, en ese mismo momento consultamos los mensajes de la base de datos (que ya deberían incluir el nuevo mensaje recien colocado) y los mandamos a imprimir por pantalla en la página web:

Código
/* prosesamiento de los datos */
// verificamos si ha sido enviado el formulario
if(isset($_POST['enviar']) && $_POST['enviar'] == 'Enviar'){
// verificamos que el formulario
// no venga vacio
if(!empty($_POST['usuario']) && !empty($_POST['firma'])){
// creamos las variables a usar en la consulta
// y le asignamos sus valores
$usuario = htmlentities(trim($_POST['usuario']));
$firma = htmlentities(trim($_POST['firma']));
// la consulta INSERT
$sqlInsert = mysql_query("INSERT INTO firmar (usuario, firma)
VALUES ('$usuario', '$firma')", $link)
or die(mysql_error());
}else{
echo "Debe llenar todos los campos";
}
}
/* fin del proseso de datos */
/* mostrando los registros (firmas) */
$sqlQuery = mysql_query("SELECT * FROM firmar", $link)
or die(mysql_error());
$totalFirmas = mysql_num_rows($sqlQuery);
// verificamos si hay
// alguna firma registrada,
// de lo contrario enviamos un mensaje
if($totalFirmas == 0){
echo "Nadie se ha animado a firmar este libro :(";
}
// si hay firmas registradas
// las mostramos
else{
while($row = mysql_fetch_array($sqlQuery)){
echo "<p><b>$row[usuario]</b> dijo:<br />". nl2br($row['firma']) ."</p><hr />";
}
}
Con esto hemos concluido el libro de visitas, que fácil ¿verdad?, bueno todo con PHP es asi, acostumbrense a esta maravilla de lenguaje para hacer paginas web.

Aqui les dejo el código fuente de la aplicación para que lo descarguen. Recuerden que para correrlo tienen que crear la base de datos y modificar el código de conexión con su usuario, servidor y clave.


Continuar leyendo...

miércoles, 5 de noviembre de 2008

Hosting Gratis, Sin publicidad, con PHP y MySQL


Recientemente he tenido la necesidad de hospedar una pagina web muy sencilla, para lo que no valia la pena pagar un servidor web, ya que la pagina era demasiado pequeña y nunca hubiese exprimido todo el potencial del servidor, por mas limitado que fuera.

La pagina que estaba montando, ademas requeria de la utilizacion de PHP y MySQL para la construccion de un pequeño foro donde los usuarios podian dejar sus mensajes y discutir entre ellos asuntos de interes.

Fue cuando encontre este excelente servicio en 000Webhost.com, no solo te permite todo esto, sino que ademas publican los servidores DNS para que puedas utilizar tu propio dominio y te ofrecen la opcion de crear cuentas de email con el dominio, publico las especificaciones tecnicas a continuacion:

» Free Web Hosting
Disk Space 1500 MB
Bandwidth 100,000 MB = 100 GB!
Domains Allowed Unlimited
Control Panel cPanel
Ads on your pages? No Ads or Banners!
Your own ads allowed? Yes
» Package Details
Website Builder
PHP Scripts Autoinstaller
Unrestricted PHP Support
MySQL Databases
Instant Backups
FTP Support
Web File Manager
99.9% Uptime
Instant Activation
» Supported Features
PHP and MySQL PHP5
Cron Jobs
Curl
GD
Image Magick
Streaming Video
PHP Pear Modules
» E-mail Features
POP3 Accounts
Web Mail
Auto Responders
Spam Protection
Mail Forwarding
IMAP Support
Modify MX Entry
» Control Panel Features
Latest cPanel
Website Builder
Fantastico Autoinstaller
Getting Started Wizard
Video Tutorials
Multi Language Support
Hotlink Protection
IP Deny Manager
Redirect URL
Password Protected Directories
Web Based File Manager
phpMyAdmin

Ya yo me encuentro utilizandolo y hasta ahora no tengo ninguna queja, me parece tremendo servicio y hasta el dia de hoy, no he conseguido ningun mejor que ese, espero que les sirva de ayuda!

Continuar leyendo...

martes, 4 de noviembre de 2008

Pideme un Video tutorial de Flex

Abro este post porque estoy completamente abierto a cualquier pedido para un tutorial, por cuestiones de tiempo no he podido publicar mas tutoriales, por eso les dejo este post para que me pidan el que ustedes quieran y seguro todos los fines de semana los publicare!!

Recuerden los posibles temas para tutoriales es todo lo relacionado con el mundo de Adobe Flex:
Datagrid, Eventos, Componentes Flex, UIComponents, Animaciones, ModuleLoader, LoadBar, DatePicker, etc. etc.

Deja tu comentario aqui pidiendome el tutorial que quieras!! si es que lo se hacer jajaja


Continuar leyendo...

lunes, 6 de octubre de 2008

Realizando Animaciones a DiplayObjects en flex


Jurungando entre los excelentes componentes que se encuentran en Quietly Scheming encontramos una clase muy interesante, que permite realizar camibios a las propiedades X, Y, Width, Height, Alpha, entre muchas otras, de cualquier objeto Flex cuya clase implemente la interfaz IFlexDisplayObject.

Ustedes se preguntaran, ¿Qué hay de nuevo en esto?, pero la gran utilidad esta en la manera como esta clase raliza los cambios a estas propiedades, y es que, por ejemplo, cuando queremos pasar un objeto de un width determinado a otro, la clase se encarga de realizar efecto muy estilizado y vistoso mientras realiza la transicion entre el width original y el width deseado, y asi realiza con todaslas propiedaes.


El efecto se logra aplicando una funcion exponencial al cambio de la propida, asi q a medida que se acerca mas al valor final deseado, mas lento se realiza el cambio.

Para utilizar la clase debemos definir una funcion "generateLayout" y debemos pasarsela al objeto de tipo LayourAnimato, esta funcion va a realizar los cambios a las respectivas propiedades de nuestro LayoutTarget definido en la función. Un ejemplo de funcion sería:

public function generateLayout() : void
{
layoutTarget = layoutAnimator.targetFor(displayObject);
layoutTarget.x = Number(200);
layoutTarget.y = Number(300);
layoutTarget.unscaledWidth = Number(400);
layoutTarget.unscaledHeight = Number(600);
layoutTarget.alpha = Number(0.4);
}
Una vez construida esta funcion debemos llamar al metodo invalidateLayout(true) del objeto de tipo LayoutAnimator, en ese momento se iniciará el efecto para cambiar los valores del DisplayObject de su valor actual al nuevo valor deseado.

Tambien se puede especificar que velocidad queremos para la animacion con un numero del 0 al 1, siendo 1 el valo maximo de velocidad.

Una vez terminado el efecto, la clase dispara un evento de tipo AnimationEvent.ANIMATION_COMPLETE.

El codigo completo del proyecto lo pueden encontrar aqui, y el codigo de la aplicación principal seria el siguiente:

Código
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[

public var layoutAnimator : LayoutAnimator = new LayoutAnimator();
public var layoutTarget : LayoutTarget;

public function init() : void
{
layoutAnimator.layoutFunction = generateLayout;
}

public function generateLayout() : void
{
layoutTarget = layoutAnimator.targetFor(panel1);
layoutTarget.x = Number(txtx.value);
layoutTarget.y = Number(txty.value);
layoutTarget.unscaledWidth = Number(txtwidth.value);
layoutTarget.unscaledHeight = Number(txtheight.value);
layoutTarget.alpha = Number(txtalpha.value);
}

public function aplicarHandler() : void
{
if(animatingPicker.selected) layoutAnimator.animationSpeed = animationSpeedPicker.value;
else layoutAnimator.animationSpeed = 1;
layoutAnimator.invalidateLayout(true);
}
]]>
</mx:Script>
<mx:Label x="124" y="297" text="y"/>
<mx:Label x="124" y="269" text="x"/>
<mx:Label x="10" y="297" text="Height"/>
<mx:Label x="10" y="323" text="Alpha"/>
<mx:Label x="10" y="269" text="Width"/>
<mx:HSlider x="54" y="329" width="133" maximum="1" minimum="0" snapInterval="0.1" id="txtalpha" value="1"/>
<mx:Canvas x="10" y="10" width="458" height="249" borderStyle="solid" borderThickness="3">
<mx:Panel id="panel1" x="10" y="10" width="263" height="107" layout="absolute" cornerRadius="11" clipContent="false">
<mx:Label x="10" y="10" text="Internet Developing" height="29" fontSize="20"/>
<mx:Label x="10" y="36" text="http://internetdeveloping.blogspot.com/"/>
</mx:Panel>
</mx:Canvas>
<mx:Button x="195" y="321" label="Aplicar" click="aplicarHandler()"/>
<mx:Label x="278" y="269" text="Animation Speed"/>
<mx:NumericStepper id="animationSpeedPicker" x="386" y="267" width="58" stepSize="0.05" maximum="1" minimum="0.1" value="0.1"/>
<mx:CheckBox id="animatingPicker" x="278" y="295" label="Animating" selected="true"/>
<mx:NumericStepper id="txtheight" x="59" y="295" width="58" stepSize="1" maximum="249" minimum="10" value="107"/>
<mx:NumericStepper id="txtx" x="140" y="267" width="58" stepSize="1" maximum="450" minimum="5" value="10"/>
<mx:NumericStepper id="txty" x="140" y="295" width="58" stepSize="1" maximum="240" minimum="5" value="10"/>
<mx:NumericStepper id="txtwidth" x="58" y="267" width="58" stepSize="1" maximum="458" minimum="10" value="263"/>

</mx:Application>

Ejemplo


Continuar leyendo...

sábado, 4 de octubre de 2008

Video Tutorial Disparanto y escuchando eventos manualmente con los metodos dispatchEvent() y addEventListener()


Dado que ActionScript 3.0 es un lenguaje orientado a eventos, me parece importante profundizar un poco mas en ese tema, hasta ahora habíamos trabajado algunos ejemplos con eventos a través de mxml, pero, de esa forma, no se puede tener un verdadero control sobre los mismos, y se desperdician muchas oportunidades y potencialidades que se pueden usar cuando los eventos se trabajan desde el lado de ActionScript 3.0.

En este tutorial vamos a despachar eventos manualmente desde un botón (pueden ser despachados por cualquier objeto cuya clase implemente la interfaz IEventDispatcher) y vamos a controlar el flujo del evento despachado con las propiedades UseCapture, Bubble y los metodos addEventListener(), removeEventListener(), dispatchEvent() y stopImmediatePropagation().

Para empezar, debemos seleccionar el evento que queremos escuchar y disparar, en mi caso voy a crear un evento propio para fines didacticos y que todos aprendamos como hacerlo. Para crear un evento propio debemos crear una clase que extienda de la clase Event, y luego procedemos a crear un identificador único para el evento definiendo dentro de la clase una constante publica y estatica de tipo String con el nombre que le queremos dar al evento (Este nombre debe ser único entre todos los eventos, ya que sera el que utilizaremos cada vez que nos querramos referir al él. En el ejemplo he creado una clase MiEvento que extiende de Event y le he asignado como identificador la constante MI_EVENTO.



Luego debemos crear las funciones Handlers que van a procesar las acciones cuando el evento se dispare, en el ejemplo las funciones p1Handler, p2Handler, p3Handler, despacharEvento y usaCaptureChange().
El handler es la función que se encarga de recibir un evento y realizar cualquier accion que uno desee, el handler puede obtener la informacion contenida en el evento y utilizarla. El handler es llamado automaticamente por el Framework de Flex inmediatamente despues de que el evento que recive, es disparado.
Luego de crear los handlers debemos empezar a escuchar el evento que queremos, para hacer eso llamamos el metodo addEventListener() desde la instancia que deseemos, en el ejemplo he creado 3 Panels, cada uno de ellos escucha el mismo evento de tipo "MiEvento.MI_EVENTO".

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


public function p1Handler(e : Event) : void
{
if(para1.selected) e.stopImmediatePropagation();
p1txt.text = "event";

traceString.text += "p1 lo escuchó\n";
}

public function p2Handler(e : Event) : void
{
if(para2.selected) e.stopImmediatePropagation();
p2txt.text = "event";

traceString.text += "p2 lo escuchó\n";
}

public function p3Handler(e : Event) : void
{
if(para3.selected) e.stopImmediatePropagation();
p3txt.text = "event";

traceString.text += "p3 lo escuchó\n";
}



El metodo addEventListener() recibe dos parametros obligatorios y 3 opcionales, los dos primeros deben ser el Identificador del evento a escuchar y la funcion Handler que deseemos, de los otros tres parametros el primero es llamado useCapture y se encarga de decidir en que momento de el ciclo de vida de el evento deseamos escucharlo, si le asignamos verdadero estamos diciendo que queremos capturarlo mientras este bajando, de lo contrario le decimos que queremos capturarlo mientras esta subiendo.
Cuando un evento es despachado por un objeto de tipo DisplayObject, podemos asignarle el parametro bubbles como verdadero, con eso le estariamos diciendo que se propague desde la instancia de lo despachó subiendo hasta su mas lejano antecesor o padre en la jerarquia de instancias y luego que vuelva a bajar hasta el objeto que lo disparó. Si le asigna falso a esta propiedad entonces el evento solo podra ser escuchado por las instancias de el mismo nivel en la jerarquía.
El cuarto parametro indica la prioridad del Handler, si tenemos mas de un handler escuchando ese evento a ese nivel en la jerarquía, podemos decidir cual queremos que se dispare primero asignandole un valor mayor en la prioridad. El último parametro de todos no va a ser estudiado en este ejemplo y tiene que ver con el uso de a memoria y el garbageCollector.

Luego de agregar los listeners necesarios procedemos a despachar el evento, en este ejemplo el evento "evt" es despachado en el momento dehacer clik en botón "button1" conenido dentro del Panel 1.

Para despachar el evento realizamos una instancia llamada "evt" de la clase Evento pasandole en el contructor el identificador MiEvento.MI_EVENTO y si queremos que se propague hacia sus ascendentes con la propuedad Bubbles.

Si queremos interrumpi en cualquier momento el flujo del evento (y anteriormente seleccionamos que queriamos un lujo de tipo "blubbles" haciendo el paremetro bubbles verdadero en el constructor del evento al momento de crearlo) debemos llamar al metodo stopImmediatePropagation() en la funcion handler desde la instancia de tipo Evento que recibimos por parametro.

Es importante dejar de escuchar un evento si sabemos que ya no lo vamos a necesitar, para hacer eso debemos llamar a la funcion removeEventListener() pasandole los tres mismos primeros parametros que le pasamos a la funcion, incluso con los mismos valores, es decir, si hicimos

Bueno para terminar el ejemplo aqui les coloco el codigo fuente descargable de el proyecto el video tutorial, el codigo fuente y un ejemplo demostrarivo en funcionamiento, espero que les sirva de algo y cualquier duda o observación no duden en comentarlo en el artículo que yo las reponderé con mucho gusto:

Parte 1

Parte 2

Parte 3

Código
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()" width="513" height="346">
<mx:Script>
<![CDATA[

public function init() : void
{
p2.addEventListener(MiEvento.MI_EVENTO,p2Handler,usaCapturePicker.selected);
p3.addEventListener(MiEvento.MI_EVENTO,p3Handler,usaCapturePicker.selected);
p1.addEventListener(MiEvento.MI_EVENTO,p1Handler,usaCapturePicker.selected);
}

public function usaCaptureChange() : void
{
removeListeners();

p2.addEventListener(MiEvento.MI_EVENTO,p2Handler,usaCapturePicker.selected);
p3.addEventListener(MiEvento.MI_EVENTO,p3Handler,usaCapturePicker.selected);
p1.addEventListener(MiEvento.MI_EVENTO,p1Handler,usaCapturePicker.selected);
}

public function removeListeners() : void
{
p2.removeEventListener(MiEvento.MI_EVENTO,p2Handler,true);
p3.removeEventListener(MiEvento.MI_EVENTO,p3Handler,true);
p1.removeEventListener(MiEvento.MI_EVENTO,p1Handler,true);
p2.removeEventListener(MiEvento.MI_EVENTO,p2Handler,false);
p3.removeEventListener(MiEvento.MI_EVENTO,p3Handler,false);
p1.removeEventListener(MiEvento.MI_EVENTO,p1Handler,false);
}

public function borrar() : void
{
traceString.text = "";
}

public function p1Handler(e : Event) : void
{
if(para1.selected) e.stopImmediatePropagation();
p1txt.text = "event";

traceString.text += "p1 lo escuchó\n";
}

public function p2Handler(e : Event) : void
{
if(para2.selected) e.stopImmediatePropagation();
p2txt.text = "event";

traceString.text += "p2 lo escuchó\n";
}

public function p3Handler(e : Event) : void
{
if(para3.selected) e.stopImmediatePropagation();
p3txt.text = "event";

traceString.text += "p3 lo escuchó\n";
}

public function despacharEvento(e : MouseEvent) : void
{
p1txt.text = "";
p2txt.text = "";
p3txt.text = "";

var evt : Event = new Event(MiEvento.MI_EVENTO,bubblesPicker.selected);
button1.dispatchEvent(evt);

traceString.text += "Evento disparado.\n";
}
]]>
</mx:Script>

<mx:Panel x="10" y="10" width="285" height="285" layout="absolute" title="Panel 3" id="p3">
<mx:Panel x="10" y="36" width="248" height="199" layout="absolute" title="Panel 2" id="p2">
<mx:Panel x="10" y="40" width="210" height="109" layout="absolute" title="Panel 1" id="p1">
<mx:Button id="button1" x="10" y="37" label="Despachar" click="despacharEvento(event)"/>
<mx:Label x="10" y="10" text="Label" id="p1txt"/>
<mx:CheckBox id="para1" x="126" y="8" label="Para" width="54"/>
</mx:Panel>
<mx:Label x="10" y="10" text="Label" id="p2txt"/>
<mx:CheckBox id="para2" x="168" y="8" label="Para"/>
</mx:Panel>
<mx:Label x="10" y="10" text="Label" id="p3txt"/>
<mx:CheckBox id="para3" x="205" y="8" label="Para"/>
</mx:Panel>
<mx:CheckBox id="bubblesPicker" x="226" y="321" label="Bubbles" selected="true"/>
<mx:Panel x="303" y="10" width="200" height="326" layout="absolute" title="Trace">
<mx:TextArea id="traceString" x="0" y="0" width="180" height="245"/>
<mx:Button id="button0" x="58.5" y="254" label="Borrar" click="borrar()"/>
</mx:Panel>
<mx:CheckBox id="usaCapturePicker" x="10" y="321" label="UseCapture" change="usaCaptureChange()"/>
<mx:Label x="10" y="305" text="En el listener" color="#FFFFFF"/>
<mx:Label x="213" y="305" text="En el dispatch" color="#FFFFFF"/>

</mx:Application>
Ejemplo



Continuar leyendo...