viernes, 27 de septiembre de 2013

Practica 1 --> Dibujando Rectángulo usando Canvas <--

Hola a todos, ahora vamos a realizar nuestra primera practica que realizamos el primer día de clases en C++ utilizando Builder. 

Empezamos realizando formas básicas como un rectángulo que podemos rellenar de color, cambiar el estilo de contorno de su linea y dibujar un rectángulo sin color de relleno. También vamos a usar los eventos del "mouse" para dibujar el rectángulo.

Iniciamos creando nuestro proyecto, agregando a la forma los siguientes componentes:
4 Buttons 
1 BitBtn
1 GroupBox
3 Labels
3 Edits
3 UpDowns

A los tres UpDowns en sus propiedades les cambiamos en "max" a 255 y "min" a 0 y por cada UpDown 
lo asociamos con un solo Edit cambiando su propiedad "associate" de la siguiente manera: 
al UpDown1 lo asociamos con Edtit1,
al UpDown2 lo asociamos con Edtit2 y
al UpDown3 lo asociamos con Edtit3.

En el Visual C# existe el numericUpDown pero como estamos trabajando con el de C++ Builder no existe este componente, es por eso que tuvimos que realizar de esta forma asociando los UpDowns con los Edits.

Para el BitBtn puedes colocar una imagen desde la propiedad Glyph que sea pequeña (25x25 ó 30x30) de tipo bmp.

Nos tiene que quedar la forma de la siguiente manera:




Ahora codificaremos el botón que dibujara un rectángulo color azul con borde de color rojo:

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  //RECTÁNGULO PREDEFINIDO
  this->Repaint( );
  HPEN hpen, hpenOld;
  HBRUSH hbrush, hbrushOld;
  // this de la forma
  HDC hdc = this->Canvas->Handle;
  // Pluma con color rojo para el borde
  hpen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
  // Brocha con color azul para el interior
  hbrush = CreateSolidBrush(RGB(0, 0, 255));
  // Seleccione la nueva pluma y la brocha para dibujar un rectángulo
  hpenOld = SelectObject(hdc, hpen);
  hbrushOld = SelectObject(hdc, hbrush);
  Rectangle(hdc, 100,100, 400,250);
  // Despues de utilizar sus objetos, borrelos y restaure los originales
  SelectObject(hdc, hpenOld);
  DeleteObject(hpen);
  SelectObject(hdc, hbrushOld);
  DeleteObject(hbrush);
}
//---------------------------------------------------------------------------
Así se vera si damos clic al botón



Agregamos el siguiente botón para dibujar el rectángulo aplicando los colores del RGB, tenemos Rojo, Verde y Azul y cambiamos el borde por el tipo PS_DASH

//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  // Rectangulo aplicando los parametros de los colores Rojo, Verde y Azul
  this->Repaint( );
  HPEN hpen, hpenOld;
  HBRUSH hbrush, hbrushOld;
  // this de la forma
  HDC hdc = this->Canvas->Handle;
  // Pluma con color rojo para el borde
  hpen = CreatePen( PS_DASH, 1, RGB( Edit1->Text.ToInt( ),Edit2->Text.ToInt( ), Edit3->Text.ToInt( ) ) );

  // Brocha con color azul para el interior
  hbrush = CreateSolidBrush( RGB( Edit1->Text.ToInt( ),Edit2->Text.ToInt( ), Edit3->Text.ToInt( ) ) );

  // Seleccione la nueva pluma y la brocha para dibujar un rectangulo
  hpenOld = SelectObject( hdc, hpen );
  hbrushOld = SelectObject( hdc, hbrush );
  Rectangle(hdc, 100, 100, 400,250);
  // Despues de utilizar sus objetos, borrelos y restaure los originales
  SelectObject(hdc, hpenOld);
  DeleteObject(hpen);
  SelectObject(hdc, hbrushOld);
  DeleteObject(hbrush);
}
//---------------------------------------------------------------------------
Nos quedara el rectángulo de ese color con los parámetros 90 para rojo, 160 para verde, 200 para el azul y el borde lo cambia como se muestra en la imagen.


Realizamos el siguiente botón para realizar un rectángulo con colores aleatorios y borde PS DASH:
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
  //RECTANGULO DE COLORES ALEATORIOS
  this->Repaint( );
  HPEN hpen, hpenOld;
  HBRUSH hbrush, hbrushOld;
  // this de la forma
  HDC hdc = this->Canvas->Handle;
  // Pluma con color rojo para el borde
  //hpen = CreatePen( PS_DASH, 1, RGB( Edit1->Text.ToIntDef(255),Edit2->Text.ToIntDef(255),Edit3->Text.ToIntDef(255)));

  randomize();
  hpen = CreatePen( PS_DASH, 1, RGB( random( 256 ), random( 256 ), random ( 256 ) ) );

  // Brocha con color azul para el interior
  //hbrush = CreateSolidBrush(RGB(0, 0, 255));

  hbrush = CreateSolidBrush( RGB( random( 256 ), random( 256 ), random ( 256 ) ) );

  // Seleccione la nueva pluma y la brocha para dibujar un rectangulo
  hpenOld = SelectObject(hdc, hpen);
  hbrushOld = SelectObject(hdc, hbrush);
  Rectangle(hdc, 100,100, 400,250);
  // Despues de utilizar sus objetos, borrelos y restaure los originales
  SelectObject(hdc, hpenOld);
  DeleteObject(hpen);
  SelectObject(hdc, hbrushOld);
  DeleteObject(hbrush);
}
//---------------------------------------------------------------------------



Continuamos con los siguientes botones de Trect y Rect son sencillos y hacen lo mismo pero de diferente manera el rectángulo
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
  this->Repaint( );
  // Rectangulo con Trect
  TRect Recto2(250, 140, 425, 200);
  HDC hDC = Canvas->Handle;
  DrawEdge(hDC, &Recto2, BDR_RAISEDOUTER | BDR_SUNKENINNER, BF_RECT);

}
//---------------------------------------------------------------------------
Así nos queda con el botón Trec


Agregamos el botón Rect

//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
  this->Repaint( );
  // Rectangulo con Rect
  RECT Recto;
  Recto.left = 100;
  Recto.top = 80;
  Recto.right = 200;
  Recto.bottom = 150;
  //Aqui utilizamos directamente el Canvas
  Canvas->Rectangle(Recto);
}
//---------------------------------------------------------------------------
Así realiza el rectángulo, le colocamos diferentes parámetros solo para que se viera la diferencia en posición del rectángulo


Para dibujar el rectángulo con los eventos mouse este es el siguiente código:
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
        // Rectangulo hecho con los eventos OnMouseDown
        this->Repaint( );
        xini = X;
        yini = Y;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
        // Rectangulo hecho con los eventos OnMouseUp
        this->Repaint( );
        xfin = X;
        yfin = Y;
        //this->Repaint( );
        this->Canvas->Rectangle( xini,yini,xfin,yfin );
}
//---------------------------------------------------------------------------

Y por ahora eso es todo, más adelante seguiré publicando las demás practicas poco a poco.
Que tengan un buen día, y un excelente fin de semana n_n 

Alumna: Ilse Castro
Materia: Graficación
Catedrático: Ing. Martin Oswaldo Valdes
Instituto Tecnológico De La Laguna




viernes, 6 de septiembre de 2013

Una introducción a C++ Builder

Durante la carrera de Sistemas Computacionales nos importen muchas materias de programación en diferentes lenguajes empezando con C#, después Java y etc. En este curso iniciamos con C++ Builder que es algo nuevo para mi, lo usamos para la materia de Graficación y estoy empezando a familiarizarme con todas las herramientas que ofrece este programa y ademas que es entretenido ver como puedes hacer algo tan simple que se vea algo muy llamativo. 

El objetivo de este blog es para transmitir todo lo que se importe en el curso. Más adelante se publicaran todos los ejercicios que se han visto hasta la fecha. =)
Que tengan un buen dia.