Regiones GDI+ en VB .NET

Capturar la ventana completa del formulario con o sin decoración (área cliente) o una región que se corresponde con un control PictureBox usando GDI+ mediante objetos Graphics de origen y destino y la función BitBlt que combina 2 mapas de bits en uno solo, en Visual Studio 2017

En un artículo anterior se mostraba cómo aplicar un recorte circular a la imagen de un control PictureBox para que la imagen se vea redondeada. He ampliado el ejercicio continuando con GDI (Graphics Device Interface). GDI es es uno de los tres componentes de la interfaz de usuario de Microsoft Windows. Trabaja junto con el núcleo y la API de Windows.

Este ejercicio añade la funcionalidad de captura de pantalla usando métodos de las clases de GDI+ explicando cómo hacer para capturar la ventana de la aplicación completa (con bordes, barras de herramientas, de menús y de scroll, etc,), la ventana sin decoración (lo que se llama área cliente del formulario) o una región específica de la ventana, la del control PictureBox de imagen redondeada, y guardar los resultados como imagen JPG en el directorio del ensamblado. Estas imágenes JPG se muestran en un formulario nuevo.

Continuar leyendo “Regiones GDI+ en VB .NET”

Formularios con forma en VB .NET

Aplicar regiones a un formulario usando objetos GraphicsPath.AddLine y GraphicsPath.AddEllipse para recortar el área del formulario y cambiar la forma de la ventana, en Visual Studio 2017 con VB

Utilizando objetos de la clase GraphicsPath y aplicando regiones de recorte es sencillo modificar la forma de la ventana de un formulario. Podemos darle prácticamente cualquier aspecto pero, por sencillez del código, en este ejercicio nos restringiremos a 3 formas, círculo, rombo y polígono, usando regiones de recorte con el aspecto deseado.

GraphicsPath del espacio de nombres System.Drawing.Drawing2D representa una serie de líneas y curvas conectadas. La base del ejercicio es:

  • ventana redondeada: en el evento Paint de un PictureBox o del formulario se dibuja sobre GraphicsPath una región de recorte de forma circular con el método AddEllipse y se convierte en la región visible del formulario
  • ventana romboidal y poligonal: en el evento Load del formulario se van añadiendo líneas definidas por su punto x.y de inicio y de final con coordenadas absolutas calculadas respecto a la ventana visible del formulario. Cada segmento de línea se añade con GraphicsPath.AddLine(Int32, Int32, Int32, Int32) a la figura actual.
Continuar leyendo “Formularios con forma en VB .NET”

Listado recursivo en VB. NET

Listar de forma recursiva todos los archivos de un directorio y de los subdirectorios que contiene, informando del tiempo requerido para la tarea, con botones para ordenar la lista de forma ascendente o descendente, en Visual Studio 2017 con VB

Damián Castroviejo tiene un ejercicio titulado “How to use a recursive function to read a directory structure and save it to XML” cuyo código consigue listar adecuadamente de forma recursiva los archivos de un directorio y de sus subdirectorios y guardar la estructura de archivos y carpetas en un archivo XML. Aplicando la función recursiva propuesta por Damián Castroviejo, en este ejercicio se rellena un control ListBox con todos los archivos existentes en una carpeta determinada.

Continuar leyendo “Listado recursivo en VB. NET”

Captura de pantalla en C# .NET

Capturar la pantalla o la ventana activa usando la clase SendKeys sin recurrir a librerías externas en Visual Studio 2017 con C#

En este ejercicio se propone una manera relativamente sencilla para capturar tanto la pantalla completa como la ventana activa, copiarla al portapapeles y almacenarla en disco como JPG. Es la versión hecha en C# del ejercicio anterior hecho en Visual Basic. El proceso para hacer la captura es el siguiente:

Continuar leyendo “Captura de pantalla en C# .NET”

Captura de pantalla en VB .NET

Capturar la pantalla o la ventana activa usando la clase SendKeys sin recurrir a librerías externas en Visual Studio 2017 con VB

En este ejercicio se propone una manera relativamente sencilla para capturar tanto la pantalla completa como la ventana activa, copiarla al portapapeles y almacenarla en disco como JPG. Este ejercicio constituye un ejemplo más de que es posible realizar con Visual Basic .NET aplicaciones relativamente complejas y utilizables como ésta aunque el programador no tenga un nivel avanzado. El proceso para hacer la captura es el siguiente:

  • se minimiza la aplicación para que no salga en la captura con el ítem Minimized de la enumeración FormWindowState
  • el proceso queda suspendido durante 500 milisegundos con el método Sleep de la clase Thread
  • la pulsación de teclas es enviada con el método SendWait de la clase SendKeys para obtener la captura en ese intervalo
  • las teclas que se envían son las que se utilizan en Windows para hacer estas capturas
  • desde el portapapeles se obtiene un objeto Bitmap que permite guardar la imagen en disco y mostrarla en el PictureBox
Continuar leyendo “Captura de pantalla en VB .NET”

Borrar temporales en VB .NET

Ejercicio que obtiene las variables de entorno TEMP y APPDATA, lee y escribe en un archivo de texto para llevar la cuenta de archivos borrados e inicia un nuevo hilo o hebra (thread) para reiniciar el formulario, en Visual Studio 2017 con VB

En este ejercicio se propone una aplicación que borra los archivos temporales de Windows y la carpeta que los contiene, leyendo la variable de entorno TEMP definida para el usuario de la sesión actual. Además, se muestra al usuario información sobre:

  1. número de archivos encontrados en la ejecución actual dentro de la carpeta que corresponda a la variable de entorno %TEMP%
  2. número de archivos borrados en la ejecución actual (sólo se borran los archivos que no estén en uso)
  3. número total acumulado de archivos borrados por el programa desde su primera ejecución leyendo este dato desde un archivo de texto colocado en la carpeta que corresponda a la variable de entorno %APPDATA%.
Continuar leyendo “Borrar temporales en VB .NET”

Quitar el botón cerrar en C# .NET

Deshabilitar el botón cerrar de la barra de título de la ventana usando procedimientos externos a .NET existentes en librerías del sistema (Platform Invoque) en Visual Studio 2017 con C#

Un programador desea que una aplicación arranque sin que pueda ser terminada por el usuario pulsando el botón Cerrar de la Barra de título del formulario (el aspa o la equis de la esquina derecha) ni mediante la pulsación de las teclas ALT+F4. El código en C# que se presenta en este artículo desactiva ese botón y el efecto de las teclas ALT+F4.

Continuar leyendo “Quitar el botón cerrar en C# .NET”

Hilos separados en VB. NET

Arrancar 2 formularios diferentes pero cada uno de ellos en su propio hilo utilizando clases de System.Threading que permiten la programación multiproceso en Visual Studio 2017

Es frecuente tener una aplicación con 2 formularios en la que desde el primero en aparecer iniciamos el otro y, al cerrar el primer formulario, se cierra el segundo automáticamente. Pero en ocasiones puede interesarnos que el cierre del primer formulario no conlleve el cierre del segundo, es decir, que ambos formularios sean verdaderamente independientes y que ambos se inicien a la vez (al arrancar la aplicación).

El comportamiento por defecto en las aplicaciones de Visual Basic .NET es el comentado en primer lugar, se debe a que ambos formularios se ejecutan en el mismo hilo del proceso principal iniciado por el formulario 1 por lo que, al cerrarlo, terminamos ese hilo y todo lo que en él sucede incluido el segundo formulario.

Continuar leyendo “Hilos separados en VB. NET”

Autocompletar texto en VB. NET

ComboBox con función de autocompletado al ir escribiendo caracteres en un cuadro de texto, con el ComboBox oculto en el formulario, en Visual Basic .NET

Resumen del ejercicio: a medida que se van escribiendo letras en un cuadro de texto, otro cuadro de texto va mostrando la primera coincidencia de una lista de palabras de un control Combobox oculto en el formulario (similar a la función Intellisense). Las lista de palabras existentes en la colección se muestran en un control RichTextBox para facilitar la interacción con el usuario.

Código en Visual Basic .NET

Utilizamos 2 controles TextBox, en uno escribimos las letras de la palabra buscada y el otro va mostrando la primera coincidencia. La lista de palabras en las que buscaremos coincidencias están almacenadas en un control ComboBox oculto ya que no necesito mostrarlo, solamente utilizar su funcionalidad.

Continuar leyendo “Autocompletar texto en VB. NET”

PictureBox redondo en VB .NET

PictureBox sobre el que se dibuja una región de recorte de forma circular con el método GraphicsPath.AddEllipse para obtener una imagen redonda, en VB .NET

Tienes una versión más compleja de este ejercicio aquí.

Clase GraphicsPath

La clase GraphicsPath del espacio de nombres System.Drawing.Drawing2D tiene objetos que representan figuras (líneas y curvas conectadas). Las aplicaciones usan estas secuencias de datos con líneas y curvas (path) para dibujar los bordes o rellenar el interior de las figuras y crear zonas de recorte. El motor gráfico mantiene las coordenadas de las figuras geométricas en objetos path que pueden estar formados a su vez por otras figuras (subpath).

Continuar leyendo “PictureBox redondo en VB .NET”