Páginas

martes, 22 de enero de 2008

Contenedores vs Coordenadas

Mono
Buenas noches mis cuatro lectores, como antes les habia contado instale en mi PC MonoDevelop para probar el desarrollo de aplicaciones de escritorio. He aquí un detalle que me ha llamado la atención de Stetic, el diseñador grafico de ventanas incluido con MonoDevelop.

Una de las diferencias que más pronto saltan a la vista al usar GTK# si vienes acostumbrado al manejo de Windows Forms es que no maneja coordenadas absolutas para hubicar los controles en las ventanas, para resolver la situación GTK# hace uso de contenedores ¿Qué significa esto?


Bueno, es algo similar a lo que es el diseño de una página web con HTML donde el contenido puede ajustarse cambiando el tamaño de los controles contenidos en la ventana si cambia la resolución o el tamaño de la ventana y las barras de desplazamiento solo aparecen cuando ya no pueden verse todo el contenido a pesar de los ajustes automaticos.

MonoDevelop

En GTK# no puedes simplemente arrastrar un control (aquí llamado widget) a la ventana y colocarlo así nada más donde sea, no. Aquí es necesario poner primero un contenedor para luego poner en él los controles que necesites. Los contenedores son un poco similares al control PANEL de Windows Forms pero también van más halla de eso y se parecen a tablas porque los contenedores se dividen en espacios que podemos considerar como las celdas de una tabla.


En Windows Forms estos contenedores no son indispensables porque maneja un sistema de coordenadas absolutas para definir la hubicación y tamaño de los controles en los formularios; pero esto fija los controles a una posición y tamaño en particular definido en tiempo de diseño que será invariable a menos que manejes anclas o funciones para redimencionar los controles por código en tiempo de ejecución.


Ahora, hay que cuidar la colocación de los controles en las celdas de los contenedores porque si una linea o columna queda vacia entonces la siguiente se recorre en tiempo de ejecución y es como si no existiera en el diseño y ademas los controles tienden a ocupar todo el espacio de la celda donde se encuentra, y solo puedes poner un control por celda. Detalles importantes para que visualices en tiempo de diseño como se vera durante la ejecución.


Hay un control TABLA muy bueno para acomodar muchos widgets, o puedes usar paneles verticales u horizontales para poner la cantidad de celdas requeridas.

GTK#

Esta diferencia puede marear un poco al principio a quien solo conoce como diseñar aplicaciones de escritorio con Winforms, por mi no hubo tal problema por que me parece similar el diseño de las GUI con GTK# a las páginas Web y hasta me gusta esta forma porque permite que las ventanas se redimencionen de una manera muy sencilla sin que yo tenga que preveer nada. Cuestión de acostumbrarse vamos.


En cambio, en Windows forms para lograr redimenar ventanas necesitas indicarle anclas a los controles para que se mantengan a una cierta distancia de los bordes de la ventana, teniendo cuidado de a cuales bordes atas tus controles y evitando que el crecimiento de un control haga que tape a otro al hacer una redimención. Es decir, se puede hacer en la mayoria de los casos pero requiere declararse explicitamente, pensar como hacerlo y probarlo antes de tener el resultado optimo, o de plano deshabilitar la posibilidad de redimención si el formulario es muy complejo.


Antes de que Stetic fuese incluido en MonoDevelop solia usarse Glade para el diseño de las interfaces, este creaba unos esquemas XML para en base a ellos construir las ventanas que después serian asociadas al código. Ahora es más facil pues Stetic las crea directamente en código para la aplicación permitiendo ya escribir el código para los eventos de los controles como Visual Studio hace con las Window Forms, en eso son igual.

No hay comentarios:

Publicar un comentario

Por favor trata de escribir bien, no te pido que no te falte ni un acento pero por favor evita escribir como metroflogger o facebookero. Este blog es un sitio decente. Gracias.