martes, 12 de junio de 2007

Windows Forms en páginas web

Recuerdan los controles ActiveX de VisualStudio 6? No debe ser tan difícil, hoy en día se siguen utilizando en varios sitios web, pero para breviario programático diremos que un control ActiveX es algo asi como la contraparte de los Applet de java en la plataforma COM de Microsoft, es decir, un programa con interfaz de controles estilo Windows que se pueden ya sea acoplar a proyectos de aplicaciones de escritorio dentro de una ventana o incorporar dentro de una página web con el tag <object> de HTML. En la plataforma .NET de Microsoft, ya no se pueden crear controles ActiveX de manera directa, sin embargo podemos crear un ensamblado que funcione de manera similar.

Lo primero que tenemos que hacer es crear un proyecto de Biblioteca de Controles de Windows en VisualStudio (2003 o 2005), el cual nos dará como resultado una dll. Dentro del proyecto insertamos un nuevo control que herede de System.Windows.Forms.UserControl por ejemplo:

//Este control tiene un TextBox llamado cajaTexto al que le asignamos la propiedad Texto del control
namespace MiControl
{
public partial class MiControl : UserControl
{
private string m_texto;

public string Texto
{
get
{
return m_texto;
}
set
{
m_texto = value;
cajaTexto.Text = value;
}
}

public MiControl()
{
InitializeComponent();
}
}
}

Despues de compilar el proyecto anterior, creamos un proyecto de sitio web en VisualStudio y copiamos al directorio raíz del sitio web nuestra dll de controles y dentro del WebForm principal agregamos el tag de object de la siguiente manera:

<object id="miControl1" name="miControl1" classid="MiControl.dll#MiControl.MiControl">
<param name="Texto" value="ejemplo de texto">
</object>

Donde el atributo classid ya no es un extraño número identificador de COM, sino una cadena compuesta de el nombre de nuestra dll, un # y por último el nombre completo de nuestro control, con namespaces. Ahora bien, podemos asignar las propiedades de nuestro control con el tag
<param> y los atributos name y value como se muestra en el ejemplo.

Por último hay que mencionar algunas observaciones y limitaciones de poner controles windows en una página web. Para que todo esto funcione correctamente es necesario al momento de publicar nuestra web poner los permisos de ejecución del directorio de IIS en Sólo Scripts, por consiguiente la segunda es que solo funciona en IIS e Internet Explorer como cliente, además de que cliente y servidor deber tener el Redistributable del .NET Framework instalado. Si no nos importa lo anterior y de todas formas queremos hacerlo, otra limitante es la seguridad de .NET Framework que no nos va a dejar hacer casi nada (acceder al sistema de archivos, a la red, etc.) si no configuramos la directiva de seguridad del mismo en Panel de control/Herramientas Administrativas/Configuración de Microsoft .NET Framework X.X/Mi PC/Directiva de seguridad en tiempo de ejecución/Ajustar Zona de seguridad, en cada cliente que queramos que utilice nuestro control desde el navegador, lo cual puede funcionar para una intranet pero no para una página pública, y la última y más importante es que como el control se ejecuta en el cliente, nosotros desde ASP.NET no podemos acceder al estado y las propiedades del control de manera directa. Sin embargo, ésta técnica es útil cuando tenermos un control hecho y no queremos implementarlo de nuevo en ASP.NET (como fue mi caso jejeje). Me despido, au revoir!

AJAH?

Esto es una reverenda mamada... pero hace que se vean chidas las paginas, de manera facilita... sin necesidad mas que de HTML y Javascript.

Por que AJAH(Asynchronous Javascript and HTML)??... pos es como AJAX(Asynchronous Javascript And XML) pero mas mamon y con HTML en vez de XML esto por que? pos nomás por que queria una pagina facilita y mamonsona para mi servicio social (Lazzy bastard).

Osease... son llamadas asíncronas de HTML durante la vista de una página...

y como se hace?

pos simple... en vez de XMLHttpRequest usamos un iframe...

< id="frameLoader" width="0" height="0" frameborder="0" onload="showLoaded()">
< /iframe>


cuando queremos llamar una página distinta a la que estamos viendo pues nada mas le cambiamos el src a nuestro iframe...
document.getElementById('frameLoader').src = url;

(:-o) ohh!!...

aqui la parte importante en el iframe es el evento onLoad ya que si la página que deseas leer aun no ha cargado pues te va a generar errores de javascript... entoncs con este onLoad le dices que cuando termine de cargar haga lo que quieras hacer con los datos del HTML que cargó el iframe...

ya de esto pues nada mas es usar divs...

function showLoaded(){
document.getElementById(divDest).innerHTML = window.frames['frameLoader'] .document.getElementById(divSrc).innerHTML;
}


ya lo demás es hacerlo bonito agregarle imagenes y blocks y nones a los divs para que se vea mas dinámico el asunto... incluso puedes poner variables en un HTML y jalartelos con javascript por ejemplo...

en la pagina fuente poner

< id="variable"> hola mundo < /div>

y ya después de haber cargado en el iframe la pagina fuente llamar la siguiente funcion...

function getString(divOrigen){
return window.frames['frameLoader'] .document.getElementById(divOrigen).innerHTML;
}


y llamarla como

var holamundo = getString('variable');

ya si quieres la variable de algun tipo pues haces el parseo... bueno pues es una mamada pero hace el paro cuando tienes un servidor muy limitado.

aqui está el link de la página de mi SS en Geocities

El pinche Geocities bloquea el javascript en firefotz asi que mejor veanlo con el buen Explorer.

http://www.geocities.com/leningher84/

felices trazos