Tuesday, March 27, 2007

En los foros del Guille (http://foros.elguille.info)
recientemente se pregunto en dos post como se podría salvar la imagen de un
PictureBox con todo y controles añadidos. Al principio se sugirió utilizar
la clase Graphics y dibujar nosotros mismos la apariencia del control teniendo
en cuenta el tipo: Label, PictureBox, etc. El código necesario para esto se
hace muy engorroso a medida que necesitamos dibujar más y más controles (por no
mencionar el hecho de dibujar mediante Graphics un TabControl…). Aquí dejo una
manera más sencilla:




using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace Temp
{
class PictureBoxEx : PictureBox
{
public Image GetCompleteImage()
{
Bitmap bitmap = this.Image.Clone() as Bitmap;

for (int i = this.Controls.Count - 1;i>=0 ; i--)
{
this.Controls[i].DrawToBitmap(bitmap,this.Controls[i].Bounds);
}
return bitmap;
}
}
}




Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Windows.Forms
Imports System.Drawing

Namespace Temp
Class PictureBoxEx
Inherits PictureBox
Public Function GetCompleteImage() As Image
Dim bitmap As Bitmap = TryCast(Me.Image.Clone(), Bitmap)
For i As Integer = Me.Controls.Count - 1 To 0 Step -1

Me.Controls(i).DrawToBitmap(bitmap, Me.Controls(i).Bounds)
Next
Return bitmap
End Function
End Class
End Namespace



En este fragmento, creamos una
clase que extiende de PictureBox, añadiendo el método GetCompleteImage. Donde
se crea una copia de la imagen de fondo y se comienza a iterar a través de la
propiedad Controls de tipo ControlColecction. Obsérvese que se itera desde el
último elemento hasta el primero, teniendo el cuenta el Z-order (a los que han
trabajado con divs y css les debe sonar, y claro WPF ;-) ), el mismo esta
determinado por el índice del control en la colección. Posteriormente
utilizamos el método DrawToBitmap existente en la clase control, pasándole el
bitmap donde dibujaremos y el área donde se pintara  dentro del mismo.

Thursday, March 22, 2007

Exposición de la tesis!!!

El pasado viernes 16 de marzo defendi mi tesis, estas son unas de las fotos de ese día, las demás estan en http://www.flickr.com/photos/33815613@N00




Monday, March 05, 2007

He leído: GDI+ Custom Controls with Visual C# 2005



GDI+ Custom Controls with Visual C# 2005 de Iulian Serban, Dragos Brezoi, Tiberiu Radu y Adam Ward.

Hace unos dos meses (más o menos)en el foro del Guille habia un post donde se planteaba la falta de bibliografía acerca del desarrollo de Controles de Usuario. Y hace dos semanas llega a mis manos este libro que a pesar de ser muy breve es una muy buena introducción a todo el mundo de los controles personalizados, y como dice el título utilizando GDI+, lo que lo hace aun más interesante. Lo que mas eche en falta es la brevedad del capitulo 11 el cual trata del Soporte en Tiempo de Diseño de los Controles, lo que nos permite hacer un desarrollo más visual e intuitivo (quienes han usado visto el xceed grid, estan en presencia de uno de los soportes en tiempos de diseño más ....). Como ultimo ejemplo esta la implementación de todo lo aprendido en un control de Pie3D (eso suena familiar jajaj), con muchos añadidos. Bueno si tienen oportunidad echenle un ojo y bajense los codigos del mismo que hay un ejemplo en el que una linea se hecha en falta (sigue estando bueno el libro), yo mientras me termino dotNet Components.