JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Cómo cambiar la resolución de la pantalla mediante código

Obtener la resolución actual de la pantalla es algo inmediato si utilizamos el objeto System.screen, ya que su propiedad Bounds nos indica este dato en sus propiedades Width y Height: screen.Bounds.Widthscreen.Bounds.Height Realmente sencillo. Lo que ya es harina de otro costal es hacer que mediante código se cambie la resolución actual de la pantalla. La plataforma .NET no ofrece soporte para esta operación desde ninguna de sus clases pero, como siempre, la API de Windows viene a nuestro rescate. Se trata de un viejo truco de los tiempos de Visual Basic. Necesitamos utilizar las dos funciones siguientes de la biblioteca User32.dll: · EnumDisplaySettings: Ofrece toda la información necesaria sobre las pantallas disponibles en el sistema (puede haber más de una, claro, yo de hecho trabajo con una tarjeta dual que tiene dos monitores enchufados). Su definición es la siguiente (copiada de MSDN): BOOL EnumDisplaySettings( LPCTSTR lpszDeviceName, // display device DWORD iMode... [Más]

Cómo crear una ventana que ocupe toda la pantalla

Bueno, parece una pregunta tonta, pero no lo es tanto si queremos que además de ocupar el área disponible del escritorio también cubra la barra de tareas y las bandas del escritorio que hubiese establecidas. Para que una ventana Windows Forms ocupe toda la pantalla incluyendo la barra de tareas hay que darle el tamaño adecuado y además asegurarnos de que no está maximizada. El siguiente código ilustra lo que se necesita para instanciar un formulario así: MiForm frm = new MiForm();frm.FormBorderStyle = FormBorderStyle.FixedSingle;Rectangle formrect = Screen.GetBounds(frm);frm.Location = formrect.Location;frm.Size = formrect.Size;frm.WindowState = FormWindowState.Normal;Application.Run(frm); Esto es, por ejemplo, lo que hacen las pantallas de los programas de instalación. ¿Has probado a maximizar la ventana de fondo (azul normalmente) de un programa de instalación? Pues al hacerlo de repente ya no es capaz de cubrir la barra de tareas. Es conveniente a este tipo de ventanas quitarle... [Más]

Siguiendo con las consultas peliagudas...

Otra consulta que puede resultar de interés es aquella que nos permite identificar dentro de los registros de una tabla cuáles son los que están duplicados y así poder, por ejemplo, eliminarlos o cambiarlos. ¿Alguna idea de cómo conseguir esto?.... Piénsalo un poco más... ;-) Solución: SELECT nombre_campo, COUNT(*) FROM Nombre_Tabla GROUP BY Nombre_Campo HAVING COUNT(*) > 1 Esta vale para cualquier gestor de datos y permite obtener los resultados agrupados por el campo que queramos para localizarlos más fácil.

Consulta para escoger aleatoriamente registros de una tabla

El otro día seme planteó el siguiente problema: ¿cómo puedo hacer para obtener con una consulta SQL un número 'N' de registros elegidos aleatoriamente dentro de una tabla con miles de registros? En SQL Server hay, por lo menos, dos formas de hacerlo. - Consulta 1: la complicada SELECT TOP N * FROM Nombre_Tabla ORDER BY RAND( (@@IDLE % IDENTITYCOL ) + DATEPART( ms , CURRENT_TIMESTAMP )  + IDENTITYCOL) De este modo se devuelven N identificadores de la tabla elegidos aleatoriamente. Lo que hace es coger un valor aleatorio en cada "vuelta" para un valor autonumérico que actúa como clave primaria de la tabla. Esto no es problema casi nunca ya que la mayor parte de las tablas suelen poseer un campo de este tipo. Sin embargo... - Consulta 2: más sencilla y genérica SELECT TOP N * FROM Nombre_Tabla ORDER BY NewID() Este método como se ve no presupone nada y sirve incluso para tablas sin clave primaria y para consultas cruzadas con otras tablas. Interesante ¿verdad?

Disponible ya el Service Pack 3 de WSE 2.0

Web Services Enhancements 2.0 (WSE 2.0) es el paquete para .NET que permite crear servicios Web avanzados siguiendo las propuestas para estándares en seguridad, enrutado, etc... que marca el W3C. WSE es casi indispensable para la creación de aplicaicones empresariales serias que se basen en Servicios Web. Puedes encontrar una introducción aquí. Microsoft acaba de liberar el Service Pack 3.0 para WSE 2.0. Este parche trae algunas correciones relativas al uso de certificados digitales X.509 y testigos de autenticación, y cambia la forma de trabajar de algunas características. Puedes leer todos los cambios aquí. El paquete así como su documentación y distribuíbles se pueden obtener gratuitamente desde la dirección http://msdn.microsoft.com/webservices/building/wse/.

Algunas sutilezas sobre paso de parámetros por referencia y por valor en C#

Cuando se pasa una clase como parámetro a cualquier método de C# ésta se pasa siempre por refencia. Y a continuación paso a explicar esta "obviedad"... Las clases son tipos por referencia por lo que cuando se pasan como parámetro a un método, cualquier cambio que se realice sobre ellas desde dentro del método (asignar una propiedad o cualquier otra cosa que cambie su estado), se conserva al terminar la llamada al método. Sin embargo existe una palabra clave en el lenguaje llamada ref que sirve para pasar parámetros por referencia. ¿cuál es su objeto entonces si las clases se pasan por referencia siempre? Su objeto es pasar por referencia los llamados "tipos por valor". Tipos por valor son las estructuras y los tipos básicos (int, bool, etc...). Éstos, salvo que se indique explícitamente, siempre se pasan por valor, es decir, se pasa una copia de los mismos a la pila para su procesamiento. Consideremos el siguiente ejemplo: class Persona{    public string Nombre = "Original";} .... [Más]

J-Integra for .NET: el puente entre dos mundos

La empresa Intrinsyc, especialista en soluciones de interoperabilidad, ha presentado la nueva versión de su producto J-Integra for .NET. J-Integra for .NET Se trata de una tecnología que permite tender puentes entre los desarrollos de nuestra empresa escritos en Java y los realizados con .NET. Al contrario que otros productos de esta índole, no se limita a habilitar las comunicaciones entre aplicaciones basadas en estas tecnologías (cosa relativamente fácil de conseguir hoy en día gracias a los Servicios Web), sino que realmente permite reutilizar los componentes de ambas indistintamente. Así nuestras bibliotecas escritas en Java se pueden utilizar directamente desde código escrito para la plataforma .NET (C#, VB.NET, etc...) como si fueran componentes nativos para esta tecnología e incluso desde Visual Studio. Al revés la afirmación es también cierta ya que permite usar cualquier componente .NET desde código Java como si se tratase de componentes nativos de este lenguaje ... [Más]

Encuesta informal

A ver... Aprovecho la ocasión y como sé que, lógicamente, casi todos los que visitais este blog estáis interesados en la programación, los sistemas y las tecnologías de Microsoft en general, me gustaría que me ayudáseis con un tema que tengo entre manos. Te agradecería mucho que me dejases un comentario en este post indicándo cuáles de los siguientes temas consideras lo suficientemente interesantes como para apuntarse a un curso. Siempre pensando en personas que están en empresas y necesitan mejorar sus conocimientos y técnicas: Iniciación a ciertos temas de programación de .NET (por ejemplo: ASP.NET, ADO.NET, la plataforma .NET...) Cuestiones avanzadas y puntuales de programación (por ejemplo: .NET Remoting, Web Services Enhancements 2.0, Enterprise Services...) Programación en lenguajes anteriores (ej: ASP 3.0, Visual Basic...) Programación para la Web sin estar atada a plataformas concretas (ej: HTML, JavaScript...) Programación con ASP.NET 2.0 y Visual Studio 2005. Escrit... [Más]