VB.Net Dibujar con degradado con Drawin2D

Vamos a ver como podemos darle bonitos colores a nuestros controles a través de la librería Drawin2D

En este ejemplo vamos a hacerlo con un Panel, aunque se puede utilizar con cualquier contenedor que tenga el evento Paint y se pueda poner transparente.

El resultado sería como este:



Bueno vamos al lió!


Lo primero insertamos en el formulario el Panel, y le ponemos en la propiedad BackColor en Transparente (que está en la pestaña Web)

Ahora nos vamos al código e importamos la librería:

Imports System.Drawing.Drawing2D


Ahora nos vamos al evento Paint del panel. Y ponemos esto:

Dim Brocha As LinearGradientBrush
Dim Superficie As Graphics
Dim Rectangulo As Rectangle
Dim Lapiz As Pen

Try

'Aquí igualamos la variable superficie a los argumentos del panel
Superficie = e.Graphics
'Aquí seleccionaremos el color del borde (yo lo he puesto azul oscuro)
Lapiz = New Pen(Color.Navy, 1)

'Le damos el tamaño al rectángulo, cero a la altura y cero a la izquierda y
'el tamaño usamos las propiedades del Panel

Rectangulo = New Rectangle(0, 0, Panel1.Width, Panel1.Height)
'Aquí elegimos los colores del degradado y la forma del degradado
'Aquí esta puesto ForwardDiagonal, es decir, de esquina superior a la esquina inferior
'juega con esa propiedad para ver sus efectos
Brocha = New System.Drawing.Drawing2D.LinearGradientBrush(Rectangulo, Color.White, Color.Navy, LinearGradientMode.ForwardDiagonal)

'Aquí pintamos el cuadrado y luego el borde
Superficie.FillRectangle(Brocha, Rectangulo)
Superficie.DrawRectangle(Lapiz, Rectangulo)

'Lo liberamos de la memoria
Lapiz.Dispose()
Superficie.Dispose()
Catch ex As Exception
'No hacemos nada si falla. Si hay error
End Try




Y listo ya tendríamos nuestro panel decorado!!


Tambien, puedes añadir, por ejemplo, un label al Panel y en el mismo paint del Panel añadir que te pinte el Label de otro color, pasandole las propiedades del label

Rectangulo = New Rectangle(Label1.Left, Label1.Top, Label1.Width, Label1.Height)
Brocha = New System.Drawing.Drawing2D.LinearGradientBrush(Rectangulo, Color.Yellow, Color.LimeGreen, LinearGradientMode.ForwardDiagonal)
Superficie.FillRectangle(Brocha, Rectangulo)
Superficie.DrawRectangle(Lapiz, Rectangulo)

Quedaría así:






VB.Net - Capturar pantalla

Ahora vamos a crear un jpg que contenga una captura de la pantalla.

Hemos creado una función que devuelve una imagen, usamos el SendKeys para capturar la pantalla y la extraemos del portapapeles, luego llamaremos a la funcion y el resultado lo guardaremos en una ruta del disco duro.
Mira que bonito olle!

Public Function TrincarImagen() As Image

' Tamaño de lo que queremos copiar
' En este caso el tamaño de la ventana principal
Dim fSize As Size = Screen.PrimaryScreen.Bounds.Size
' Creamos el bitmap con el área que vamos a capturar
Dim bm As New Bitmap(fSize.Width, fSize.Height)
' Un objeto Graphics a partir del bitmap
Dim gr As Graphics = Graphics.FromImage(bm)
' Copiar todo el área de la pantalla
gr.CopyFromScreen(0, 0, 0, 0, fSize)

Return bm
End Function

Ahora solo queda llamar a la funcion y guardar la imagen. Seria algo asi:


Dim Pantallazo As Image
Pantallazo = TrincarImagen()
Pantallazo.Save("RUTA\pantallazo.jpg")



Listo!

VB.Net - Exportar DataGridView a Excel

Bueno, lo primero es añadir la referencia Microsoft.Office.Interop.Excel, dependiendo del Office que tengas podrás usar la versión 11 (hasta 2003) o la 12 (2007 jiji).

Bueno en resumen, lo que hago es, crear tres variables, que una sera el programa, el libro y otra la hoja. Luego solo nos queda escribir, y te saldrá un bonito cuento :)

Aquí os dejo la función, no es nada difícil de comprender.


Function GridAExcel(ByVal ElGrid As DataGridView) As Boolean

'Creamos las variables
Dim exApp As New Microsoft.Office.Interop.Excel.Application
Dim exLibro As Microsoft.Office.Interop.Excel.Workbook
Dim exHoja As Microsoft.Office.Interop.Excel.Worksheet

Try
'Añadimos el Libro al programa, y la hoja al libro
exLibro = exApp.Workbooks.Add
exHoja = exLibro.Worksheets.Add()

' ¿Cuantas columnas y cuantas filas?
Dim NCol As Integer = ElGrid.ColumnCount
Dim NRow As Integer = ElGrid.RowCount

'Aqui recorremos todas las filas, y por cada fila todas las columnas y vamos escribiendo.
For i As Integer = 1 To NCol
exHoja.Cells.Item(1, i) = ElGrid.Columns(i - 1).Name.ToString
'exHoja.Cells.Item(1, i).HorizontalAlignment = 3
Next

For Fila As Integer = 0 To NRow - 1
For Col As Integer = 0 To NCol - 1
exHoja.Cells.Item(Fila + 2, Col + 1) = ElGrid.Rows(Fila).Cells(Col).Value
Next
Next
'Titulo en negrita, Alineado al centro y que el tamaño de la columna se
ajuste al texto
exHoja.Rows.Item(1).Font.Bold = 1
exHoja.Rows.Item(1).HorizontalAlignment = 3
exHoja.Columns.AutoFit()


'Aplicación visible
exApp.Application.Visible = True

exHoja = Nothing
exLibro = Nothing
exApp = Nothing

Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error al exportar a Excel")
'http://programaciontotal.blogspot.com
Return False
End Try

Return True

End Function



La función devuelve un True o un False, dependiendo si el resultado ha sido satisfactorio.

Si quieres también le puedes añadir un ProgressBar e ir sumándole uno al valor del Progress dentro del For.


Para llamar a la función es:

GridAExcel(nombreDeTuGrid)



Saludos