Explorador de Formulario
[usando la clase graphics y la clase Region]

Fecha: 06/Jun/2005 (05/06/2005)
Autor: A. Percy Reyes Paredes [email protected]

¡¡ Los peruanos SÍ podemos !!


Antes de dibujar líneas y formas, representar texto o mostrar y manipular imágenes con GDI+, es preciso crear un objeto Graphics. El objeto Graphics representa una superficie de dibujo de GDI+, y es el objeto que se usa para crear imágenes gráficas.

Para trabajar con gráficos existen los dos pasos siguientes:

  1. Crear un objeto Graphics.
  2. Usar el objeto Graphics para dibujar líneas y formas, representar texto o mostrar y manipular imágenes.

Crear un objeto Graphics

El objeto Graphics se puede crear de diversas formas:

PaintEventArgs en el controlador de eventos Paint

Cuando se programa el controlador de eventos Paint para controles, se proporciona un objeto Graphics como uno de los argumentos PaintEventArgs.

Para obtener una referencia a un objeto Graphics a partir de PaintEventArgs en el evento Paint

  1. Declare el objeto Graphics.
  2. Asigne la variable que hará referencia al objeto Graphics y que se pasará como parte de PaintEventArgs.
  3. Inserte código para dibujar en el formulario o control.

El ejemplo siguiente muestra cómo hacer referencia a un objeto Graphics a partir de PaintEventArgs en el evento Paint.

' Visual Basic
Private Sub Form1_Paint(sender As Object, pe As PaintEventArgs) Handles _
    MyBase.Paint
    ' Declares the Graphics object and sets it to the Graphics object
    ' supplied in the PaintEventArgs.
    Dim g As Graphics = pe.Graphics
    ' Insert code to paint the form here.
End Sub
// C#
private void Form1_Paint(object sender,
System.Windows.Forms.PaintEventArgs pe)
{
    // Declares the Graphics object and sets it to the Graphics object
    // supplied in the PaintEventArgs.
    Graphics g = pe.Graphics;
    // Insert code to paint the form here.
}

// C++
private:
System::Void Form1_Paint(System::Object *  sender,
System::Windows::Forms::PaintEventArgs *  pe)
{
    // Declares the Graphics object and sets it to the Graphics object
    // supplied in the PaintEventArgs.
    Graphics * g = pe->Graphics;
    // Insert code to paint the form here.
}

CreateGraphics (Método)

Asimismo, se puede utilizar el método CreateGraphics de un control o formulario para obtener una referencia a un objeto Graphics que represente la superficie de dibujo de dicho control o formulario.

Para crear un objeto Graphics con el método CreateGraphics

Crear un objeto Graphics a partir de un objeto Image

Además, se puede crear un objeto Graphics a partir de cualquier objeto que se derive de la clase Image.

Para crear un objeto Graphics a partir de un objeto Image

El ejemplo siguiente muestra cómo usar un objeto Bitmap:

' Visual Basic
Dim myBitmap as New Bitmap("C:\Documents and Settings\Joe\Pics\myPic.bmp")
Dim g as Graphics = Graphics.FromImage(myBitmap)
// C#
Bitmap myBitmap = new Bitmap(@"C:\Documents and "
Settings\Joe\Pics\myPic.bmp");"
Graphics g = Graphics.FromImage(myBitmap);
// C++
Bitmap * myBitmap = new
Bitmap(S"D:\\Documents and Settings\\Joe\\Pics\\myPic.bmp");
Graphics * g = Graphics::FromImage(myBitmap);
Nota   Puede crear objetos Graphics a partir de archivos .bmp no indizados, como archivos .bmp de 16 bits, 24 bits y 32 bits. Cada píxel de archivos .bmp no indizados alberga un color, a diferencia de los píxeles de archivos .bmp indizados, que albergan un índice que hace referencia a una tabla de colores.

Dibujar y manipular formas e imágenes

Una vez creado el objeto Graphics, éste se puede usar para dibujar líneas y formas, representar texto o mostrar y manipular imágenes. Los objetos principales que se usan con el objeto Graphics son:

Referencias

Para obtener más información, con respecto a la clase Graphics, le invito a ver lo siguiente: Todo acerca del objeto Grapics

Vea también: GUI+: Interfaz Avanzado de Diseño de Gráficos

Ejemplo:

Lo siguiente viene a constituir un sencillo ejemplo (algo que se me ocurrió de pronto) de cómo puede usarse un objeto Graphics y la clase Region. Se trata de desarrollar un simple explorador de formulario, dónde podamos comprobar que conforme recorre el mouse sobre el formulario se irá visualizando todo lo que se pueda encontrar sobre este. Si eres listo podrás darte cuenta que con lo aprendido pudes programar para obtener formularios con una forma irregular, como por ejemplo formularios que tengan la forma de una elipse o un círculo, o cualquier figura que se te ocurra. Espero que aproveches el código y sigas investigando al respecto, debido a que lo aportado es un pequeño extracto de GUI+.

Nota: Para prevenir comentarios indeseados, debo advertirles que la parte teótrica para este artículo (por esta vez) fue extraída de la ayuda de Microsoft .net, es decir de MSDN, pero el ejemplo es original, y eso vale, verdad...??).

Lo que se visualizará mediante el explorador será lo siguiente:

A continuación sigue código en Visual Basic .NET:

Imports System.Drawing.Drawing2D
Public Class Form1
    Inherits System.Windows.Forms.Form

    Shared CoordX As Integer = 0
    Shared CoordY As Integer = 0
    Shared Activar As Boolean = False
    'el siguiente procedimiento sirve simular un Explorador...
    Public Sub MiExploradorNet(ByVal Xinicial As Integer, ByVal _
        Yinicial As Integer, ByVal Width As Integer, ByVal Height As Integer)
        'GraphicsPath nos servirà para representar 
        'una serie de líneas y curvas conectadas
        Dim oGraphicsPath As GraphicsPath = New GraphicsPath
        Dim oGraphics As Graphics 'creamos el lienzo...
        'creamos una region la cual describirá el interior de
        ' una forma gráfica formada por rectángulos y rutas
        Dim oRegion As Region 'definimos nuestra region
        'establecemos el color del formulario igual al color Green 
        Me.BackColor = Color.Yellow
        'definimos la zona que nos servira como area para nuestra Explorador...
        Dim r As New Rectangle(Xinicial, Yinicial, Width, Height)
        'con esto creamos la forma del explorador...
        oGraphicsPath.AddEllipse(r)
        'ahora le damos como argumento oGraphicsPath la cual _
        'contiene el Explorador .net
        oRegion = New Region(oGraphicsPath)
        'ahora sera usada en nuestro formulario...
        Me.Region = oRegion
    End Sub
    'este procedimiento nos permite desactivar la ExploradorNet...
    Public Sub DesactivarExplorador()
        'GraphicsPath nos servirà para representar 
        'una serie de líneas y curvas conectadas
        Dim oGraphicsPath As GraphicsPath = New GraphicsPath
        Dim oGraphics As Graphics 'definimos el lienzo...
        'establecemos el color del formulario igual al color peru (mi país natal) 
        Me.BackColor = Color.Peru
        'establecemos el area que será agregada a nuestro graphics...
        Dim Area As New Rectangle(Screen.PrimaryScreen.WorkingArea.X, _
        Screen.PrimaryScreen.WorkingArea.Y, Me.Width, Me.Height)
        'ahora procedemos agregarla...
        oGraphicsPath.AddRectangle(Area)
        'creamos una region la cual describirá el interior de
        ' una forma gráfica formada por rectángulos y rutas
        Dim oRegion As Region
        'ahora le damos como argumento oGraphicsPath
        oRegion = New Region(oGraphicsPath)
        'finalmente esta region serà nuestro formulario...
        Me.Region = oRegion
    End Sub


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e _
        As System.EventArgs) Handles MyBase.Load
        Me.BackColor = Color.Peru
    End Sub

    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e _
        As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        'averiguamos si esamos habilitados para usar  la Explorador .net...
        If Activar = True Then
            'capturamos las coordenadas...
            CoordX = e.X
            CoordY = e.Y
            'usamos la Explorador..
            MiExploradorNet(CoordX - 100, CoordY - 100, 200, 200)
            'Visualizamos las coordenada en la que se encuentra el explorador...
            Dim TextCoordenadas As String = "(" & e.X & ", " & e.Y & ")"
            'dibujamos las coordenadas...dándole el formato deseado.
            Me.CreateGraphics.DrawString(TextCoordenadas, New Font("Arial", 12, _
            FontStyle.Bold), Brushes.Blue, e.X, e.Y)
        End If
    End Sub

    Private Sub BtnExplorador_Click(ByVal sender As System.Object, ByVal e _
        As System.EventArgs) Handles BtnExplorador.Click
        'averiguamos si esta desactivada  la posibilidad de usar la  ExploradorNet...
        If Me.BtnExplorador.Text = "Activar Explorador" Then
            ' al estar desactivada podemos activar la opcion para usarla..
            Activar = True
            Me.BtnExplorador.Text = "Desactivar Explorador"
        ElseIf Me.BtnExplorador.Text = "Desactivar Explorador" Then
            '...ahora..  al estar activada podemos desactivar la opcion para  no usarla..
            Activar = False
            Me.BtnExplorador.Text = "Activar Explorador"
            'ahora...recuperamos nuestro formulario original....(aunque no tan cierto ehhh!!!!)
            Me.DesactivarExplorador()
        End If
    End Sub
End Class

No olvides de darme tu voto en PanoramaBox, de esta manera seguiré compartiendo contigo lo que voy aprendiendo. Gracias.


Espacios de nombres usados en el código de este artículo:

System.Drawing.Drawing2D


Arbis Percy Reyes Paredes es peruano, tiene 21 años y se dedica a la construcción de software de manera profesional, joven desarrollador de aplicaciones Web y Servicios Web XML en VB .NET y C# .NET con bases de datos SQL Server 2000, aplicaciones basadas en Windows con VB .NET y C# .NET, VB 6.0, y controles y bibliotecas ActiveX; actualmente estudia en la Universidad Nacional de Trujillo, la carrera de Ingeniería de Sistemas. Le encanta el desarrollo de aplicaciones para dispositivos móviles y se está especializando en programación gráfica y programación avanzada de Videojuegos.

ir al índice

Fichero con el código de ejemplo: Percynet_ExploradorFormNet.zip - Tamaño 11 KB