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