miércoles, 29 de diciembre de 2010

Crear un componente (control) Font ComboBox personalizado

Para este post me apoyo en la documentación oficial de CSharp correspondiente a la creación de componentes y controles personalizados.

Lo primero que haremos sera agregar una nueva clase a nuestro proyecto en CSharp con el nombre FontComboBox y heredamos de la clase ComboBox lo siguiente por hacer es rellenar el control con el listado de fuentes del sistema.

Código

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.ComponentModel;

namespace CustomControl
{
internal class FontComboBox : ComboBox
{

Pen p = new Pen(Color.Black);
StringFormat sf = new StringFormat();
Font f = new Font("Arial", 8);

internal FontComboBox()
{
this.DrawMode = DrawMode.OwnerDrawFixed;
sf.Trimming = StringTrimming.None;
sf.FormatFlags = StringFormatFlags.NoWrap;
if (LicenseManager.UsageMode != LicenseUsageMode.Designtime)
ListFonts();
this.DropDownHeight = 300;
this.Font = new Font(this.Font.Name, 12);
this.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
this.AutoCompleteSource = AutoCompleteSource.ListItems;
this.MaxDropDownItems = 20;
}

protected override void OnDrawItem(DrawItemEventArgs e)
{
base.OnDrawItem(e);

try
{
FontFamily ff = new FontFamily(this.Items[e.Index].ToString());

if (ff.IsStyleAvailable(FontStyle.Regular) == true)
{
f = new Font(this.Items[e.Index].ToString(), this.Font.Size, FontStyle.Regular);
}
else if (ff.IsStyleAvailable(FontStyle.Italic) == true)
{
f = new Font(this.Items[e.Index].ToString(), this.Font.Size, FontStyle.Italic);
}
else if (ff.IsStyleAvailable(FontStyle.Bold) == true)
{
f = new Font(this.Items[e.Index].ToString(), this.Font.Size, FontStyle.Bold);
}
else
{
f = new Font("Microsoft Sans Serif", this.Font.Size, FontStyle.Regular);
}
}
catch (Exception)
{
f = new Font(this.Items[e.Index].ToString(), this.Font.Size, FontStyle.Bold);
}
p = new Pen(this.ForeColor);

e.DrawBackground();

e.Graphics.DrawString(this.Items[e.Index].ToString(), f, p.Brush, e.Bounds);

if (e.State == DrawItemState.Focus)
e.DrawFocusRectangle();

//Liberamos la memoria
p.Dispose();
f.Dispose();
}

private void ListFonts()
{
this.Items.Clear();
System.Drawing.Text.InstalledFontCollection ifc = new System.Drawing.Text.InstalledFontCollection();
this.BeginUpdate();
foreach (FontFamily ff in ifc.Families)
{
this.Items.Add(ff.Name);
}

this.EndUpdate();
}

}
}



He agregado el código y un par de personalizaciones visible como auto-completado.

jueves, 16 de diciembre de 2010

QT DevDay disponible

el día de hoy me dado una pasada por el portal de QT, donde me encuentro con la novedad de que y a se encuentran disponible en video la primera tanda (parte) de videos elaborados por el equipo de aprendizaje de qt en la presentaciones DevDay de este año, ademas están disponible para descarga las diapositivas utilizadas durante las exposiciones.

aqui les dejo el enlace a los detalles de esta recopilación, lo cual es algo que me parece excelente.


martes, 14 de diciembre de 2010

Convertir .p12 a .pem

ya algunos compañeros y uno que otro forero me había preguntado antes ¿Como convierto un fichero .p12 a .pem? creo esto ya seria un post para mi blog.

Un fichero .P12 contiene toda la información que compone un certiricado digital x.509 basado en PKCS #12 el cual puede ser utilizado para firmar documentos digitales, mensajes soap entre otros.

es bueno utilizar openssl para trabajar con ficheros .p12 (certificados en general), en el link podras encontrar la documentación correspondiente a openssl y su forma de uso.

luego de descargar e instalar openssl podemos convertir nuestro .P12 a .PEM asi:

openssl pkcs12 -clcerts -nokeys -in certificado.p12 -out nuevoCertificado.pem
openssl pkcs12 -nocerts -in certificado.p12 -out nuevaKey.pem

como puedes es algo claro lo que se hace verdad? ahora el proceso invertido seria asi:

openssl pkcs12 -export -out certificado.p12 -inkey ./nuevaKey.pem -in ./nuevoCertificado.pem

Tambien podemos utilizar algunas herramientas para trabajar con archivos de certificados como: QuickPar, PGP Desktop, OpenPGP, XCA.