¡Bienvenid@ a La bloguera.net! Iniciar sesión | ÚNETE a la web | Ayuda

Hoy vamos a ver como cambiar el fondo de pantalla en el inicio de sesión de Windows 7.

 

 

Antes de nada, he visto que existen algunos programas que hacen el proceso que viene a continuación de manera casi automática, pero dado que después de probar varios he comprobado que unos funcionan y otros no, lo mejor creo que es hacerlo a mano (que por lo menos a mi no me falla).

Lo primero de todo es ver si tenemos la carpeta backgrounds en la siguiente dirección: C:\Windows\System32\oobe\info\backgrounds , si no la tenemos debemos ir hasta el directorio oobe, crear info y dentro de este backgrounds.

A continuación vamos a editar el registro de Windows, ya sabéis Inicio -> Ejecutar y ponéis Regedit, debemos ir hasta:  

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\-->

--> Authentication\LogonUI\Background 

Y fijarnos si tiene la clave OEMBackground puesto a 1. Si no es así o no existe lo creamos pulsando con el botón derecho del ratón en la parte derecha del registro y añadiendo un valor DWORD con el nombre que he indicado, lo ponéis a 1 y cerráis el registro.

Ahora vamos a preparar la imagen de fondo, escoged la que queráis, a ser posible de la resolución de vuestra pantalla, la guardáis en  la carpeta backgrounds con el nombre backgroundDefault.jpg y con un tamaño que no supere los 256kb.

Solo queda reiniciar vuestra máquina para comprobar el resultado Big Smile

Saludetes

0 comentarios
Archivado en: ,

Me acabo de encontrar con 3 cursos gratuitos que ha sacado Microsoft Learning sobre Windows 7 para ir conociendo este nuevo sistema operativo.

Los cursos según el tipo de usuario que seas los podéis encontrar en estos enlaces:

Saludetes ;)

Me encuentro ahora mismo desarrollando un sitio web en ASP.NET  para una asignatura de la universidad y esta tarde me he encontrado con que necesito tener accesibles algunos datos en cualquiera de las páginas que componen el sitio web, así que voy a dejar aquí las dos formas de hacer esto que he encontrado.

Para poneros en situación os diré que mi sitio web está compuesto por una MasterPage, varias páginas de contenido asociadas a la MasterPage y dos páginas más que no están asociadas; la MasterPage tiene un control de LoginName del cual quiero obtener el nombre del usuario que está logueado en cada momento en cualquier página.

Aclaración: podemos obtener el nombre de usuario logueado en el site mediante "this.User.Identity.Name", que sería mucho más correcto para obtener el nombre del usuario en cualquier momento. Sin embargo la idea es ejemplificar como llevar un dato de una parte a otra del site en situaciones en las que no dispongamos del tipo de facilidades como la que tenemos en el caso concreto que he utilizado de ejemplo en el post.

En el Web.config

Para hacer esto he visto varias maneras, la primera de todas se trata de guardar los datos en el Web.config en la zona de "appSettings", esto lo haría de la siguiente forma:

Primero añadiendo una clave a la zona de appSettings en el Web.config

<appSettings>  

        <add key="username" value="valor" />

</appSettings>

Y luego en el código de la página en la que lo necesitemos podemos obtener o modificar el valor de la clave mediante:

System.Configuration.ConfigurationSettings.AppSettings["username"] 

En el Global.asax

Otra manera que he visto es utilizando el archivo Global.asax. Este archivo opcional en los desarrollos de ASP.NET nos permite manejar eventos que ocurren a nivel de la aplicación y de sesión, también nos permite declarar valores que necesitemos entre las diferentes solicitudes.

El archivo Global.asax para que funcione tiene que permanecer en la raíz de la aplicación y solo se admite uno por aplicación ejecutada. Si tenemos algún otro archivo de este tipo en algún subdirectorio no se tendrán en cuenta por la aplicación.

Cuando declaremos una variable dentro de Global.asax estará disponible en todas las páginas de la aplicación. Lo podemos hacer de la siguiente manera:

En el fichero Global.asax declaramos una variable string y luego en Session_Start otorgamos el valor de la cadena a un objeto de tipo Session que en mi caso se llama valorCadena.

public class Global : System.Web.HttpApplication
    {
        string cadena="valor inicial";
        protected void Application_Start(object sender, EventArgs e) { }
        protected void Session_Start(object sender, EventArgs e)
        {
            Session["valorCadena"] = cadena;
        }

...

          ......

Luego en la página que lo necesitemos podemos escribir valores:

       Session["valorCadena"] = "la_cadena_que_quiera_poner";

y leer de la variable:

       Label1.Text = (string)Session["valorCadena"];

Aporte: Jorge Dieguez nos hace un comentario interesante: "..te recomiendo que en lugar de una(o varias) varaibles sueltas uses una clase que te centralize el acceso a la infromacion de contexto(usuario,su perfil, o lo que sea), esta clase es la responable de almacenear el estado en algun lugar(por ejemplo en la sesion) la idea es que la aplicacion no sepa como y donde se guarda la informacion de contexto..". Quizás es la solución más elegante de todas las planteadas.

Pues nada, si hay alguna corrección o manera más de hacer esto ponedlo en los comentarios y así vamos completando entre todos el post

P.D.: Si queréis más información sobre Global.asax podéis leer algo más aquí

Saludetes :)

2 comentarios
Archivado en: ,

Este año la verdad es que voy bastante apretado de tiempo me toca correr en todo y no me da tiempo ha hacer todo lo que me gustaría. Una de esas cosas que me hubiera gustado hacer es postear dos videos que hice sobre los instaladores de programas, el tiempo ha pasado y los videos me los he encontrado guardando polvo en el disco duro.

En una de las primeras charlas que tuvimos en el club a principios de curso tratamos el tema de windows forms y no pudimos ver con detenimiento la forma en la que se pueden crear instaladores de programas con Visual Studio. Como lo hice bastante rápido y alguno me vino preguntando varias veces sobre el proceso a seguir, decidí hacer un par de videos cortos en los que explico como hacer el típico setup de toda la vida de forma rápida y otro en el que se ve como hacer este proceso con clickonce.

Aquí los dejo, no explican nada más que lo básico pero como se que ha un par de personas les ha servido de ayuda imagino que a alguno más también le servirá.

Si los queréis descargar tenéis las direcciones más abajo.

LaBloguera.net - Generación de un instalador de aplicaciones
LaBloguera.net - Generación de un instalador de aplicaciones

LaBloguera.net - Instalción de aplicaciones con ClickOne
LaBloguera.net - Instalción de aplicaciones con ClickOne

La descarga de los videos, aquí y aquí

Saludetes Cool

Nivel: Básico

Tema: Visual Studio

Autor: César Reneses – Coordinador Albacete DotNetClub

A pesar de llevar ya bastante tiempo entre nosotros mis compañeros del club e incluso los visitantes de mi blog, me siguen preguntando sobre como instalar y solucionar los problemas que surgen durante la instalación del Visual Studio 2008.

Así que me parece interesante de cara a aprender más cosas sobre .NET saber primero como instalar VS2008 ya que principalmente el post va dirigido a gente que no ha tocado nunca Visual Studio y que tiene que instalarlo por primera vez.

Si habéis probado otros entornos de desarrollo iréis notando poco a poco la facilidad y rapidez que da Visual Studio a la hora de programar.

Hay que tener en cuenta que esta es la versión 9 de VS2008 lo que da una idea de lo trabajado que está el entorno. Es cierto que siempre quedan cosas por limar o implementar, características que a muchos nos gustaría tener, etc., pero después de 8 versiones, de recoger sugerencias y peticiones de usuarios durante varios años, es a día de hoy uno de los entornos de desarrollo más completos.

Donde conseguir Visual Studio 2008

Desde la versión de Visual Studio 2005, Microsoft ofrece diferentes versiones gratuitas enfocadas a gente que quiere aprender o experimentar con .NET, este grupo de de herramientas se denominan “express” y están orientadas a cuatro grupos de la tecnología .net, como son el desarrollo web, la programación con C++, C# o Visual Basic.

Estas versiones las podemos descargar desde el sitio web de Microsoft: http://www.microsoft.com/express/product/default.aspx

Los que sois estudiantes universitarios tenéis acceso gratuito a una de las versiones de Visual Studio de pago a través de la Academic Alliance que podéis tener a través de vuestro DotNetClub o de vuestra universidad, y también a través del programa Microsoft DreamSpark si lo tiene concertado vuestra universidad.

La versión que aparece en mi Academic Alliance es la Professional, que se ofrece con fines educativos y sin coste alguno. Además de la versión Professional existen otras versiones como la Standard o la Team System. Podéis bajaros las versiones de prueba desde aquí.

Instalando Visual Studio

Lo primero de todo es tener algo más de 2Gb de espacio libre en disco y paciencia (tarda un poco, pero merece la pena), podemos aligerar el tiempo de instalación si marcamos solo las características justas que necesitamos.

La elección de idioma va en gusto de cada uno, a mi me gusta tenerlo en inglés, ya que si tienes que buscar información sobre alguna característica del entorno o sobre algún error, encuentras más cantidad de información en la red.

Por lo demás metemos el disco y aparece la siguiente ventana para comenzar la configuración de la instalación.

Pulsamos sobre “Install Visual Studio 2008” y carga los componentes necesarios para iniciar la instalación.

Una vez cargados los componentes pulsamos sobre “Next” y en la siguiente pantalla aceptamos el contrato de licencia.

Ahora podemos indicar que programas vamos a instalar, todos, los más comunes o una selección que nos venga bien.

Indicamos la ruta de la instalación y pulsamos en “Install” para que inicie la copia del programa.

Después de un ratillo aparecerá esta pantalla:

Hasta aquí lo que ocurre en la mayoría de los casos, es decir que se instala correctamente. Pero también, aunque es en situaciones muy particulares esta instalación no se nos da tan bien.

Problemas que pueden surgir en la instalación

Como en toda instalación de software el Visual Studio no se libra de esos “fallicos” que tenemos que solucionar.

Error 1330: este error nos indica que alguno de los archivos de instalación está corrupto. Las solución es bien sencilla, copiar los archivos a una carpeta local de nuestro disco duro y volver a comenzar desde allí la instalación.

Aunque parezca increíble la solución es efectiva :D, podéis leer más en el blog de El Bruno y en el de Heath Stewart por duplicado, aquí y aquí.

Web Authoring Component Error: también nos puede aparecer este error en la instalación en el que se produce un conflicto con un archivo perteneciente a office 2007.

Lo más fácil en este caso sería desinstalar Office e instalar VS2008. Pero lo recomendable es echarle un ojo al log de instalación; aquí y aquí os dejo dos ejemplos de como se hace y se soluciona el problema.

Con estos dos errores me he encontrado alguna vez, pero buscando un poco en la red siempre se encuentra la solución.

Donde conseguir más información

Ahora que tenemos el entorno instalado voy a dejar unos enlaces donde conseguir información sobre .NET y preguntar dudas:

Programa Desarrollador 5 Estrellas aquí podrás aprender desde cero las partes más relevantes de la tecnología .NET, con test para que puedas medir tus conocimientos.

Foros, tres son mis preferidos el de los dotnetclubs, los de msdn y los del guille.

No podían faltar cursos específicos sobre diferentes tecnologías como winforms, asp.net, dispositivos móviles, etc. puedes encontrar bastantes en desarrollaconmsdn.com.

Y para terminar un par de comunidades donde leer noticias y artículos sobre tecnología y .NET, labloguera y geeks. La primera dedicada sobre todo a estudiantes y la segunda dedicada más al mundo profesional.

Por ahora esto es todo, ¡nos vemos! :D

Saludetes Cool

Bueno pues WPF es básicamente el sustituto de Windows Forms en un futuro una nueva herramienta para crear aplicaciones con una experiencia rica de usuario. Una nueva tecnología que nos permite desarrollar aplicaciones de escritorio aprovechando mucho más los recursos gráficos de los últimos sistemas windows.

Sobre todo lo más importante es que se pueden crear aplicaciones más usables (siempre que tengamos un experto en usabilidad) y más vistosas (solo si dejamos que el diseñador haga los gráficos y no nosotros).

Una de las cosas que más se resalta en las charlas de WPF es la separación entre la parte de la interfaz y la del código de la aplicación. Por lo que el desarrollador simplemente tiene que ir añadiendo su código sin tener que tocar nada de la interfaz y el diseñador lo mismo pero en su terreno. Las herramientas que ambos usan son, por el lado del desarrollador Visual Studio y por el lado del diseñador Expression Blend.

image image

 

Anteriormente la forma de comunicación entre ellos era una imagen que creaba el diseñador de como debía más o menos aparecer la interfaz del programa y el desarrollador intentaba llevarla a cabo con algún lenguaje.

image

Ahora el diseñador cuando crea una interfaz, es esa la que aparecerá finalmente sin adaptaciones de ningún tipo.

image

Para que desarrollador y diseñador puedan trabajar en un mismo proyecto con estas herramientas tiene que existir un nexo de unión, este es XAML un lenguaje al estilo de XML y que es entendido por Visual Studio y Blend.

Bueno, creo que con esta mini introducción ya vale, necesitaba contar un poco como iba para poder pasar a ver los tipos de aplicaciones y como se crean que será el tema de mi próximo post. De momento os dejo enlaces a aplicaciones reales hechas con WPF.

http://www.turningthepages.com

RoxioCentral

NoteScraps

Otto Store

 

Saludetes

Todos los primeros de año la gente hace promesas sobre lo que espera hacer a lo largo de ese año. Pues bien, una de las cosas que quiero hacer durante los próximos 12 meses es aprender todo lo posible de Windows Presentation Foundation (entre otras cosas claro :D).

Como no quiero esperar hasta enero para empezar, voy a comenzar ya mismo. Para ello escribiré un post semanal dedicado a este tema, se que a alguno le parecerá poco, pero dado mi ritmo de posteo durante los últimos meses creo que es bastante aceptable, además si falta el post alguna semana sois libres de spamearme en el correo :S

Pues nada, dentro de poco subiré el primer post. Creo que no hace falta decir que se aceptan consejos, ideas y sobre todo correcciones.

SaludetesCool

Desde hace algún tiempo me interesan bastante las nuevas formas de interacción hombre - máquina, y me gusta conocer como se va avanzando en todos los aspectos, no solo facilitar la interfaces más simples e intuitivas sino también el modo en como podemos manejarlas.

Pues bien hoy me he encontrado con algo que no esperaba ver por lo menos hasta dentro de un tiempo. Al final va a ser verdad eso de que el límite está en nuestra imaginación.


g-speak overview 1828121108 from john underkoffler on Vimeo.

 

Saludetes Cool

0 comentarios
Archivado en: ,

Pues ya tenemos en la calle la versión 3.0 de XNA y con bastantes cositas nuevas.

image

Vaya tela! como pasa el tiempo, XNA es el primer producto (y espero que no sea el último) que empecé a probar desde que era muy pequeñito en su versión beta y poco a poco se nos va haciendo mayor y facilitándonos las cosas.

En esta ocasión las nuevas características tienen mucho que ver con la comunidad de desarrolladores que se está formando en torno a la XBOX en XBOX Live Community Games. Como por ejemplo, un modo se ha añadido un modo Trial, que permite al desarrollador activarlo para que la gente antes de comprarlo pruebe si le gusta o no.

Se ha añadido a las características del modo multijugador la posibilidad de invitar a otros jugadores a participar en el juego que más nos guste.

Además soporta C# 3.0, LINQ y Visual Studio 2008.

Bueno ahora solo queda que nos pongamos a hacer cosillas con XNA. No os olvidéis de que no tenemos que pasar a mano todas nuestras demos hechas en la versión 2.0, sino que simplemente con abrir el proyecto desde visual estudio nos hace un backup de la solución y la posterior conversión del proyecto a 3.0.

Os dejo aquí los enlaces:

Saludetes

0 comentarios
Archivado en: ,

Uno de los elementos necesarios en la construcción de videojuegos son los menús de opciones que permiten al jugador iniciar la partida, configurar las opciones del juego, consultar las estadísticas, etc. Es a esta tarea en particular a la que nos vamos a dedicar con el siguiente tutorial.

Como vamos a ver la construcción del menú lo vamos a hacer encapsulándolo dentro de un componente de XNA, de tal manera que no solo veremos cómo está construido por dentro sino que también podremos disponer de un menú en alguno de nuestros proximos proyectos muy fácilmente.

Bien, empecemos por el principio que es ¿cómo pensamos hacer el menú?, bueno pues la idea es la siguiente, vamos a diseñar un objeto con las siguientes características:

· Número de elementos que tiene el menú.

· El elemento que está seleccionado.

· Color del elemento seleccionado y deseleccionado.

· Posición en la que se sitúa el menú en pantalla.

· Separación entre los ítems del menú.

· El tipo de fuente con el que vamos a escribir.

· Un listado con los nombres de cada ítem del menú.

Os habréis dado cuenta de que este menú no carga ninguna imagen que tengamos en memoria sino que cada ítem del menú se escribe con el tipo de fuente indicado. En un futuro es posible que se haga necesario cargar imágenes en el menú por lo que habría que añadir algún método más a nuestro componente.

Lo primero que tenemos que hacer es abrir Visual C# Express y crear un nuevo proyecto:

image

Elegimos como tipo de proyecto Windows Game 2.0 y damos un nombre al proyecto, luego pulsamos en Aceptar.

Para construir un Game Component tenemos que agregar un nuevo elemento de este tipo a nuestra solución por lo que pulsaremos con el botón derecho del ratón sobre el icono del proyecto y pulsaremos en Agregar -> Nuevo elemento.

image

Pulsamos sobre el elemento Game Component y le damos un nombre más concreto como por ejemplo “menuComponent”.

image

Si pulsamos en Agregar lo que nos aparece es una plantilla del tipo Game Component que como podéis ver hereda de Microsoft.Xna.Framework.GameComponent , como nosotros necesitamos que este componente pueda ser dibujado en pantalla tenemos que cambiar la herencia de GameComponent a DrawableGameComponent.

Ahora lo que vamos a hacer es declararnos las variables necesarias en base a las características que he comentado anteriormente para el menú. Tendríamos las siguientes:

        private int number_elements;
        private int element_active = 0;
        private string[] elements;
        private Color selected_color;
        private Color unselected_color;
        private Vector2 free_position=new Vector2(0,0);
        private SpriteFont font;
        private int separation;
        private anchor position;

Hay dos variables parecidas, free_position y position , la primera indica una posición al menú que indicamos nosotros mismos en el constructor y la segunda es una enumeración de valores que utilizaremos para colocar el menú en posiciones predefinidas de la pantalla y no tener que indicar la coordenada.

image

Estas serían las posiciones a las que nos referiremos si utilizamos position al instanciar el menú. Y el código que tenemos que escribir para tener esto es el que sigue:

        public enum anchor
        {
            top_left = 1,
            top_center = 2,
            top_right = 3,

            half_left = 4,
            half_center = 5,
            half_right = 6,

            bottom_left = 7,
            bottom_center = 8,
            bottom_right = 9,
            
        };

A continuación vamos a escribir el código de los constructores que necesitamos, uno tendrá en cuenta la posición que nosotros le indicamos y el otro la posición que indicamos mediante la enumeración.

        public menuComponent(Game game, int Num_elements, Color selected_c, Color unselected_c, SpriteFont _font, int _separation, anchor _position)
            : base(game)
        {
            number_elements = Num_elements;
            element_active = 0;
            elements = new string[number_elements];
            selected_color = selected_c;
            unselected_color = unselected_c;
            font = _font;
            separation = _separation;
            position = _position;
        }

 

        public menuComponent(Game game, int Num_elements, Color selected_c, Color unselected_c, Vector2 _free_position, SpriteFont _font, int _separation)
            : base(game)
        {
            number_elements = Num_elements;
            element_active = 0;
            elements = new string[number_elements];
            selected_color = selected_c;
            unselected_color = unselected_c;
            free_position = _free_position;
            font = _font;
            separation = _separation;
        }

En este momento tenemos un objeto menú que esta vacio, es decir, no tiene ningún ítem que podamos utilizar por lo que vamos a implementar un método que nos permita hacer esto mismo.

        public void AddElement(int element_number,string element_name)
        {
            if ((element_number > -1)&&(element_number < number_elements))
            {
                elements[element_number] = element_name;
            }
        }

Bastante sencillo, le decimos el lugar que va a ocupar y el nombre que tenemos que mostrar.

Ahora que ya podemos indicar las características y los ítems del menú, necesitamos dibujarlo en la pantalla y además distinguir el ítem activo de los demás.

        public void Draw(SpriteBatch spriteBatch)
        {
            spriteBatch.Begin();

            for (int i = 0; i < number_elements; i++)
            {
                if (element_active == i)
                {
                    spriteBatch.DrawString(font, elements[ i ].ToString(), new Vector2(free_position.X, free_position.Y + (separation * i)), selected_color);
                }
                else
                {
                    spriteBatch.DrawString(font, elements[ i ].ToString(), new Vector2(free_position.X, free_position.Y + (separation * i)), unselected_color);
                }
            }

            spriteBatch.End();
        }

Con el método Draw dibujamos el menú teniendo en cuenta el ítem que está activo, cuando nos encontramos con el utilizamos el color indicado en el constructor del menú para distinguirlo de los demás.

Vamos a ver cómo va nuestro trabajo, para ello nos colocamos en la clase Game.cs, donde vamos a instanciar e inicializar nuestro componente.

Nos declaramos al inicio de la clase un objeto de tipo menuComponent y lo inicializamos en el método Initialize.

    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        menuComponent menu_principal;

Y en el método Initialize construimos el objeto:

       protected override void Initialize()
        {
            menu_principal = new menuComponent(this, 5, Color.Yellow, Color.Red, new Vector2(300, 50), Content.Load<SpriteFont>("font"), 40);
            menu_principal.AddElement(0, "New Game");
            menu_principal.AddElement(1, "Load Game");
            menu_principal.AddElement(2, "Options");
            menu_principal.AddElement(3, "High Scores");
            menu_principal.AddElement(4, "Exit");

            base.Initialize();
        }

Ahora vamos al método Draw de esta clase y cambiamos el color de fondo para que se muestre mejor en la pantalla, e indicamos al objeto menú_principal que llame a su método Draw.

        protected override void Draw(GameTime gameTime)
        {
            graphics.GraphicsDevice.Clear(Color.Black);

            menu_principal.Draw(spriteBatch);

            base.Draw(gameTime);
        }

Por último agregamos un nuevo recurso a la carpeta Content de nuestro proyecto, pulsamos con el botón derecho en Agregar -> Nuevo elemento.

image image

El recurso será de tipo Sprite Font, renombramos a font y pulsamos en Agregar, tendremos que tener dentro de Content un archivo Font.spritefont.

Si pulsamos sobre él, veremos un archivo XML en el que tenemos que indicar el tipo de letra y el tamaño de la misma, esto hacedlo al gusto de cada uno.

clip_image016[1]

Ahora podemos pulsar F5 y ver el resultado de lo que vamos haciendo.

image

De momento no hace nada, por defecto muestra como activo el primer elemento, pero tenemos que agregarle los métodos necesarios para que responda a las teclas Up y Down con las que nos podremos mover por el menú.

Volvemos entonces a la clase de nuestro componente menuComponent.cs.

Lo primero que vamos a hacer es implementar los métodos para movernos entre los ítems:

        private void next_item()
        {
            if (element_active < number_elements - 1)
            {
                element_active++;
            }
            else
            {
                element_active = 0;
            }
        }

 

       private void previus_item()
        {
            if (element_active > 0)
            {
                element_active--;
            }
            else
            {
                element_active = number_elements - 1;
            }
        }

Sobre estos métodos creo que hay poco que comentar, lo único es decir que son privados porque los manejo desde otro método que si es público y que se encarga de controlar el estado del teclado.

Es el siguiente:

public void Press_keys(KeyboardState keys)
        {
            if (keys.IsKeyDown(Keys.Up) && key_Up_press)
            {
                this.previus_item();
                key_Up_press = false;
            }
            else
            {
                if (keys.IsKeyUp(Keys.Up))
                {
                    key_Up_press = true;
                }
            }

            if (keys.IsKeyDown(Keys.Down) && key_Down_press)
            {
                this.next_item();
                key_Down_press = false;
            }
            else
            {
                if (keys.IsKeyUp(Keys.Down))
                {
                    key_Down_press = true;
                }
            }
        }

Vale, he añadido dos variables más a la clase, así que vosotros también tenéis que hacer lo mismo:

        private Boolean key_Up_press;
        private Boolean key_Down_press;

Son dos variables booleanas que nos permiten saber que tecla es la que se presiono anteriormente, de esta manera como podéis ver en el método nos movemos arriba o abajo fácilmente.

Para usar el método Press_keys vamos al método Update de la clase principal y lo llamamos de la siguiente manera:

menu_principal.Press_keys(Keyboard.GetState());

Ahora si pulsáis F5 veréis que podéis ir arriba y abajo por el menú, pero ¿Cómo sabemos en qué opción del menú estamos? Bueno pues simplemente tenemos que devolver el valor del elemento activo desde el componente y según ese valor realizar la acción que más nos convenga.

        public int Element_active()
        {
            return element_active + 1;
        }

Por ejemplo para salir del programa:

if (Keyboard.GetState().IsKeyDown(Keys.Enter) && menu_principal.Element_active() == 5) this.Exit();

Lo que hago es comprobar que se pulsa la tecla Enter y ver cuál es la opción activa, si nos devuelve en este caso concreto un 5 es que estamos en la opción de salir por lo que terminamos la ejecución del programa.

Ahora solo queda añadir un método que coloque automáticamente el menú en una parte de la pantalla según el valor que tome position. El código necesario es el siguiente:

        public void position_screen(anchor a)
        {
            position = a;

            switch (position)
            {
                case anchor.top_left:
                    free_position = new Vector2(0, 0);
                    break;
                case anchor.top_center:
                    free_position = new Vector2((Game.Window.ClientBounds.Width / 2) - (size_menu().X / 2), 0);
                    break;
                case anchor.top_right:
                    free_position = new Vector2(Game.Window.ClientBounds.Width - size_menu().X, 0);
                    break;
                case anchor.half_left:
                    free_position = new Vector2(0, (Game.Window.ClientBounds.Height / 2) - size_menu().Y);
                    break;
                case anchor.half_center:
                    free_position = new Vector2((Game.Window.ClientBounds.Width / 2) - (size_menu().X / 2), (Game.Window.ClientBounds.Height / 2) - size_menu().Y);
                    break;
                case anchor.half_right:
                    free_position = new Vector2(Game.Window.ClientBounds.Width - size_menu().X, (Game.Window.ClientBounds.Height / 2) - size_menu().Y);
                    break;
                case anchor.bottom_left:
                    free_position = new Vector2(0, Game.Window.ClientBounds.Height - size_menu().Y - 80);
                    break;
                case anchor.bottom_center:
                    free_position = new Vector2((Game.Window.ClientBounds.Width / 2) - (size_menu().X / 2), Game.Window.ClientBounds.Height - size_menu().Y - 80);
                    break;
                case anchor.bottom_right:
                    free_position = new Vector2(Game.Window.ClientBounds.Width - size_menu().X, Game.Window.ClientBounds.Height - size_menu().Y - 80);
                    break;
                default:
                    break;
            }
        }        private Vector2 size_menu()
        {
            float width = 0, high = 0;

            for (int i = 0; i < number_elements; i++)
            {
                if (font.MeasureString(elements[ i ].ToString()).X > width) width = font.MeasureString(elements[ i ]).X;
                if (font.MeasureString(elements[ i ].ToString()).Y > high) high = font.MeasureString(elements[ i ]).Y;
            }

            high = high * (number_elements / 2);

            return new Vector2(width, high);

        }

El método size_menu lo he utilizado para obtener las dimensiones del menú y poder colocarlo correctamente en la pantalla con position_screen.

Para ver mejor como funcionan estos métodos podemos agregar al inicio del método Update las siguientes líneas:

            if (Keyboard.GetState().IsKeyDown(Keys.Q)) menu_principal.position_screen(menuComponent.anchor.top_left);
            if (Keyboard.GetState().IsKeyDown(Keys.W)) menu_principal.position_screen(menuComponent.anchor.top_center);
            if (Keyboard.GetState().IsKeyDown(Keys.E)) menu_principal.position_screen(menuComponent.anchor.top_right);

            if (Keyboard.GetState().IsKeyDown(Keys.A)) menu_principal.position_screen(menuComponent.anchor.half_left);
            if (Keyboard.GetState().IsKeyDown(Keys.S)) menu_principal.position_screen(menuComponent.anchor.half_center);
            if (Keyboard.GetState().IsKeyDown(Keys.D)) menu_principal.position_screen(menuComponent.anchor.half_right);

            if (Keyboard.GetState().IsKeyDown(Keys.Z)) menu_principal.position_screen(menuComponent.anchor.bottom_left);
            if (Keyboard.GetState().IsKeyDown(Keys.X)) menu_principal.position_screen(menuComponent.anchor.bottom_center);
            if (Keyboard.GetState().IsKeyDown(Keys.C)) menu_principal.position_screen(menuComponent.anchor.bottom_right);

Como comprobareis según pulse Q,W,E,A,S,D,Z,X ó C, el menú se posicionará automáticamente en una parte de la pantalla.

image

De todas formas podéis ver todo el código en el proyecto de ejemplo, cualquier cuestión, petición o mejora sobre el componente podéis enviármela a mi correo e iré actualizándolo para que tenga más y mejores funciones.

La dirección del proyecto y el tutorial en pdf lo podeis encontrar en www.codeplex.com/XNACommunity en un zip en su correspondiente sección.

 Saludetes Cool

0 comentarios
Archivado en:

"Paseando" por la red de vez en cuando te encuentras con algún tipo de software que aunque no se convierte en vital, si puede llegar a ser interesante en determinadas ocasiones.

Es el caso de las dos herramientas con las que me he encontrado en el sitio www.officelabs.com, que para quien no conozca este lugar es de esos rincones chulos que se han puesto de moda en los últimos años entre las grandes empresas informáticas. En estas webs colocan implementaciones de ideas o prototipos para ver que tal resultan entre la gente, unas terminan avanzando como espero que sea el caso de PptPlex y otras se quedan por el camino.

 

PptPlex, una forma diferente de hacer presentaciones

Como os podréis imaginar este software tiene mucho que ver con PowerPoint, se trata de un plugin que enriquece en buena manera nuestras presentaciones, permitiéndonos hacer zoom de una manera sencilla sobre la pantalla, deslizarnos de una diapositiva a otra y como podéis ver en el vídeo que adjunto agrupar dentro de una diapositiva índice todas las demás de forma que la presentación queda más vistosa.

Ver video

Como siempre en este tipo de cosas no tiene garantía de ningún tipo, ni saben si lo van a traducir y para los que hacéis Webcasts este tipo de presentaciones no funcionan con Microsoft Office Live Meeting. Aun así me parece una utilidad altamente recomendable.

La web de descarga y consulta: pptPlex

 

Microsoft Speed Launch o como tener tus programas más a mano

Bueno, este programa no es mas que un lanzador de aplicaciones pero me ha gustado mucho la forma en la que podemos agregar nuevos accesos a nuestras aplicaciones preferidas.

La forma de activar el lanzador es mediante la combinación de teclas Windows + C, nos aparecerá esta ventana:

image

en ella podemos ver que en la parte inferior aparecen cinco botones. Aquí es donde se irán colocando las cinco aplicaciones más usadas.

¿Como agregamos aplicaciones a este lanzador? es bien simple, por defecto aparece en la parte inferior derecha una diana donde tenemos que arrastrar los accesos directos. Si arrastramos un programa, aparece ya el path de destino del programa y le podemos asignar un nombre más corto para poderlo buscar con mas rapidez.

Podemos agregar todas las que queramos, pero como solo aparecen las 5 más usadas, si queremos ejecutar otra diferentes tendremos que escribir el nombre corto que le hallamos dado en el cuadro de texto y pulsar "Launch".

Lo mejor es un vídeo aclaratorio:

Ver video

La web de descarga y consulta: speed Launch

Bueno, por hoy nada más.

SaludetesCool

0 comentarios
Archivado en:

La verdad es que la PartyQuijote de 2008 en líneas generales ha sido muy divertida, como siempre hay cosas que se podrían mejorar pero este es un encuentro con solo 3 ediciones de antigüedad y en donde existe un presupuesto ajustado, además de que la entrada es super barata, solo 30 euros.

Como ya comente en el post anterior el primer día lo dedique a asistir el lanzamiento de Héroes que organizaba CLMNET dentro de las actividades de la party y a comenzar con las actividades que tenía también el club como eran el taller de XNA y la batalla de robots ("Optimus Prime VS Megatron") al día siguiente.HPIM0961

El viernes 18 dediqué el día a la construcción de un robot con microcontrolador, prácticamente usamos todo el tiempo del que disponíamos ese día a la soldadura y montaje de las piezas. Al final como quedaban cosas por montar tuvimos que utilizar tiempo libre y tiempo del día siguiente reservado a la programación del robot para terminarlo.

 

También nos lo pasamos fenomenal con la lucha de los Lego MindStorm. Básicamente había que darles instrucciones por voz a través del pc, utilizamos un programita ( en .NET por supuesto)muy básico que utiliza el speech de windows y que envía los comandos por Bluetooth al robot.

HPIM0972HPIM0973 

HPIM0975HPIM0976

HPIM0977 HPIM0978

El premio que daba la organización a este concurso era un LEGO TECHNIC.

Otra cosa que estuvo interesante fue la competición Windosero VS Linuxero, la cual gano la persona que instalo GNU/Linux. Digo que estuvo interesante porque en un principio iban bastante ajustados, incluso en la instalación parecía que Windows llevaba la delantera y al final el ganador fue Linux.

Esta competición en la practica no demuestra nada, las instalaciones de ambos sistemas operativos están muy conseguidas y prácticamente el que instala el sistema no se tiene que preocupar más que de en que partición lo instala. Además hay una gran cantidad de software que esta portado a ambas plataformas o que es muy parecido y consultando un momento en algún buscador enseguida lo encuentras. Por lo que la complicación es bien poca.

Por otro lado el concurso se hizo con un Windows XP y la última versión de Ubuntu, estamos comparando dos sistemas que se llevan 7 años, lo normal sería comparar un Vista o Windows Server 2008 con la última Ubuntu o un linux de hace 7 años con XP.

Ya para terminar habría que saber que conocimientos técnicos tienen ambos contendientes que creo que también influye por lo que no deberíamos fijarnos en quien termina antes sino quien optimiza mejor el tiempo en la instalación, la facilidades que da el sistema, etc. Así que lo dicho, para pasar el rato está bien pero no creo que resulte muy productivo para nadie al fin y al cabo luego cada uno ( por lo menos en mi caso) utiliza lo que más conoce o se adapta mejor a sus necesidades.

Por la noche me dedique a dar una vuelta por los ordenadores de la gente que siempre hay cosas de lo más curioso:

HPIM0980

Esta foto gano el premio a la foto más friki de la party luego os enseño el premio que por cierto gano mi hermano. El de la foto es un coleguilla de nuestro clan que estaba todo el día añadiéndole cosas a la web de la party y no paraba en ningún momento. Incluso como podéis ver la gente le llevaba comida.

 

HPIM0981

 

 

Esto si es productivo, una máquina de palomitas portátil Big Smile.

 

 

 

 

 

Por supuesto algunos modelos de modding que me gustaron:

 HPIM0986 HPIM0987

 HPIM0984

El sábado la verdad es que el cansancio ya se empezaba a notar de todas formas me dio tiempo de asistir un rato al taller de robotica para terminar de montar el robot y ver como se programaba el pic, menos mal que era en C. También me dedique a jugar, jugar y jugar, sobre todo a la Wii y a completar la colección de series de mi infancia Big Smile. Por la noche dio tiempo a tomarse unas cervezas y a socializar tipo Tuenti o Facebook pero en persona que mola más.

Al día siguiente ya se acababa todo pero a algunos se les ocurrió inventarse algo llamado "infartadas", os dejo un video que creo es autoexplicativo, menos mal que no me pillaron:

";" alt="">

y vi un ratejo la granja de microbots:

HPIM1032 HPIM1034

HPIM1030

Bueno dejo por aquí algunos enlaces interesantes:

Descripción y vídeos de la granja de microbots

Opinión de uno de los coordinadores

Cámara IP fija PQ 2008

Por cierto el premio que se llevo mi "brother" y desde el que se ha escrito este post es un Asus Eee PC

HPIM1051 image

¡¡ A que mola !! Big Smile

 

SaludetesCool

2 comentarios
Archivado en:

image Hace ahora justo un mes desde mi último post y ya va siendo hora de volver a la actividad del blog. El último post lo escribía desde la PartyQuijote de Albacete, así que haré un artículo recopilatorio de todo lo que paso allí con fotos, enlaces y cosas así como las ppts de la charla de xna o el concurso de lego mindstorm para dejar de alguna forma el tema cerrado.

De manera que una vez pagada mi deuda volveré con algunas ideas nuevas que me van rondando para ir completando durante este nuevo curso el blog, a ver si este año puedo ser mas inconsciente constante. Big Smile

Nos leemos en breve, saludetes Cool

Hola a todos, estoy escribiendo desde uno de los mejores sitios en los que se puede estar en verano y no estoy hablando de la playa (aunque tampoco es mal sitio), es una party informática, ya sabéis estos sitios suelen tener todo lo que uno desea tener a mano: comida, bebida fresquita, aire acondicionado, videojuegos, consolas, ordenadores, un pedazo de caño para salir a internet (1 Giga ), muchos teras compartidos y ¿mujeres?, bueno, no se puede tener todo lo que uno quiere Sad.

Aun así el primer día creo que ha salido bastante bien, después de recorrerme 120 Km para llegar al lugar, cargar y descargar cajas, y cosejas varias, he conseguido asistir a algunas de las charlas del evento Heroes IT 2008 que hoy celebraba CLMNET como la primera actividad de la party.

En el evento teníamos a 4 pedazo de cracks, a saber: David Salgado, Miguel López, Miguel Jiménez y Miguel Egea las charlas que podían ser seguidas por la red trataban sobre diseño web, framework 3.5, experiencia de usuario y la próxima versión de SQLServer.

 

HPIM0926 HPIM0927 HPIM0928 HPIM0931   HPIM0934 HPIM0937 HPIM0938 HPIM0940

 

Luego, todos a comer que era hora y tras una breve sobremesa nos hemos subido a dar una vuelta en un aparatejo muy chulo que cuesta unos 6500 euros (buff, cualquiera lo rompe).

 HPIM0941 HPIM0942

 

Luego a eso de las 7 de la tarde teníamos la primera jornada de un pequeño taller de videojuegos en XNA, en el que salvando el tema del sonido (casi me dejo la voz por no tener micrófono) pero parece que la gente ha salido bastante contenta Big Smile.

 

DSC00130 DSC00132

Después de eso a cenar y compartir algunas cosillas con la gentecilla Big Smile

 

HPIM0950 HPIM0943 HPIM0953

Bueno pues mañana un poco más.

 

Saludetes Cool

Bueno antes de nada lo primero que quiero decir es:

¡¡QUIERO UNOOOOOOOOOOOOO!!

Después de ver el vídeo seguro que vosotros también quereis uno Big Smile.

Este es otro prototipo de pantallas multitactil en las que está investigando Microsoft. Es la misma idea que Surface pero en la pared y menos avanzado (por lo menos por lo que he visto en el video).

Surface se valía de las cámaras que contiene la mesa para detectar las posiciones y además interactuaba con objetos como móviles o PDAs.

TouchWall es un software llamado Plex que va sobre Windows Vista y detecta los movimientos mediante una serie de láseres y una cámara de infrarrojos.

A ver cuando dejan de ponernos los dientes largos Big Smile, bueno a lo mejor al final me tengo que hacer uno yo mismo Stick out tongue

Saludetes Cool

Más envíos Página siguiente >