Lilypie Primer PicLilypie Primer Ticker

jueves, 19 de julio de 2007

La Librería de imágenes de Visual Studio 2005

Visual Studio incorpora una librería de gráficos, que incluye Bitmaps, Iconos y Animaciones que pueden darles a nuestras aplicaciones una apariencia más profesional e integrada con el Sistema Operativo.

Esta librería se instala junto a VS2005, pero se encuentra muy bien escondida en un oscuro directorio y comprimida en formato zip.

La librería en cuestión se instala por defecto en \Program Files \Microsoft Visual Studio 8\Common7\VS2005ImageLibrary\VS2005ImageLibrary.zip

Al descomprimir este archivo nos encontraremos con 3 carpetas:

Animations. Contiene películas en formato avi y gifs animados

Bitmaps. Contiene bitmaps que son utilizados en menús, toolbars, diálogos, TreeViews, ListViews, botones, etc. Los bitmaps vienen en 16 colores y colores de 24 y 32 bits.

Icons. Muchos iconos típicos de WinXP y Win9x

En cada carpeta se puede encontrar un archivo html con información de las imágenes. A continuación unos screenshots.



martes, 17 de julio de 2007

Ejecutar un instalador .msi que requiere .Net Framework 1.1 bajo .Net Framework 2.0

Si tenemos un archivo de Windows Installer (archivo .msi) que requiere el .Net Framework 1.1 pero en nuestro equipo solo tenemos instalado el .Net Framework 2.0, la aplicación se rehúsa a instalarse y simplemente obtenemos un mensaje como este:

“This setup requires the .NET Framework versión 1.1.4322. Please install the .NET Framework and blah blah blah…”

Una solución sería descargar e instalar el .Net Framework 1.1 como lo exige nuestra aplicación, con la consiguiente pérdida de tiempo y espacio en nuestro disco. Afortunadamente existe otra solución más directa: Modificar el archivo .msi

Ocurre que los archivos de instalación tienen instrucciones para verificar que se cumplan ciertas condiciones antes de ejecutarse, entonces la solución es quitar esas instrucciones con un editor.

Existe una herramienta de Microsoft llamada Orca que sirve para editar los archivos de instalación (.msi, .msm, .psp, y .msp). Esta herramienta está incluida en el Windows SDK, que puede ser descargado libremente. Se puede encontrar más información sobre la herramienta, así como el sitio de descarga aqui.

Una vez instalada la herramienta, abrimos el archivo .msi que queremos editar y buscamos la tabla Custom Action en el panel de la izquierda.


Entonces ubicamos las acciones DIRCA_CheckFx y VSDCA_VsdLaunchConditions y las eliminamos.

Nada más, guardamos el archivo y ya debería funcionar sin mayores protestas.

Ojalá les sea útil.

lunes, 16 de julio de 2007

Un ComboBox que muestra los Fonts instalados en el equipo

En este post compartiré con ustedes una sencilla forma de implementar un ComboBox (o un ListBox) que muestra los tipos de letra que tenemos instalados en el equipo, asi:

Vamos directo al código. Primero necesitamos crear en nuestro Form un campo privado que almacenará los tipos de letra instalados en el equipo y servirá como DataSource de nuestro ComboBox.

private InstalledFontCollection installedFonts = new InstalledFontCollection();

A continuación debemos configurar las Propiedades DataSource y DisplayMember del ComboBox, haremos esto en el constructor del Form, asi:

private void Form1_Load(object sender, EventArgs e)
{
comboBox1.DataSource = installedFonts.Families;
comboBox1.DisplayMember =
"Name";
comboBox1.DrawMode =
DrawMode.OwnerDrawFixed;
}

También hemos fijado la Propiedad DrawMode a OwnerDrawFixed, algo que también podríamos haber hecho usando el diseñador gráfico.

Finalmente la verdadera acción tiene lugar en el evento DrawItem del Combo, que implementamos así:

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
FontFamily family = installedFonts.Families[e.Index];
FontStyle style = FontStyle.Regular;
if (!family.IsStyleAvailable(style))
style = FontStyle.Bold;
if (!family.IsStyleAvailable(style))
style = FontStyle.Italic;
Font fnt = new Font(family, 10, style);
Brush brush;
if (e.State == DrawItemState.Selected)
{
brush = new SolidBrush(Color.White);
}
else
{
brush = new SolidBrush(comboBox1.ForeColor);
}


e.DrawBackground();

e.Graphics.DrawString(family.GetName(0),
fnt, brush, e.Bounds.Location);

}

Quizás las líneas en que vamos modificando la variable style merezcan una explicación. Ocurre que no todos los Fonts soportan todos los estilos, así que si no nos aseguramos de que el Font que vamos a utilizar soporte un determinado estilo terminaremos obteniendo una linda Excepción.

Eso es todo, ya tenemos un ComboBox que muestra como lucen nuestras fuentes, haciendo que nuestras aplicaciones sean un poquito más amigables.