Bueno primero tendremos que modificar la forma que teníamos y al final tenemos que tener una forma con los siguientes componentes:
-5 botones
-3 Edit (conocidos en C# como textBox)
-2 UpDown los cuales tendremos que asociar con 2 de los edit a través de su propiedad "Associate"
-7 TrackBar
-1 ComboBox
-6 Labels
Acomodamos los componentes de la siguiente manera:
Los botones realizan las mismas acciones que explicamos en la aplicación pasada, ahora la novedad de esta aplicación es que podemos manejar a nuestro gusto el tamaño de el rectángulo que deseamos dibujar, así como el color y estilo de la brocha (relleno) y el color y estilo del contorno (pluma).
El ancho y alto los manejamos con los Edit asociados con los UpDown, el color de relleno los cambiamos con los TrackBar de la parte superior combinando los 3 colores primarios (el famoso RGB), el ComboBox lo utilizamos para cambiar el estilo de pluma del contorno y los 3 TrackBar restantes los dejamos para manejar el color del contorno. Finalmente agregamos otro botón solo para cerrar la aplicación. El código es el siguiente:
int red=0, green=0, blue=0, largo=0, ancho=0, pred=255, pgreen=0, pblue=0, top=50, left=70;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int ps = ComboBox1->ItemIndex;
HPEN hpen, hpenOld;
HBRUSH hbrush, hbrushOld;
HDC hdc = this->Canvas->Handle;
hpen = CreatePen(ps, TrackBar4->Position, RGB(pred, pgreen, pblue));
hbrush = CreateSolidBrush(RGB(red, green, blue));
hpenOld = SelectObject(hdc, hpen);
hbrushOld = SelectObject(hdc, hbrush);
Rectangle(hdc, top,left, Edit1->Text.ToInt()+top,Edit2->Text.ToInt()+left);
SelectObject(hdc, hpenOld);
DeleteObject(hpen);
SelectObject(hdc, hbrushOld);
DeleteObject(hbrush);
largo = Edit1->Text.ToInt();
ancho = Edit2->Text.ToInt();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
red = this->TrackBar1->Position;
Button1Click(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar2Change(TObject *Sender)
{
green = this -> TrackBar2 -> Position;
Button1Click(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar3Change(TObject *Sender)
{
blue = this -> TrackBar3 -> Position;
Button1Click(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::UpDown2Click(TObject *Sender, TUDBtnType Button)
{
UpDown1Click(Sender, Button);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar4Change(TObject *Sender)
{
UpDown1Click(Sender, 0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
TRect Recto2(125, 140, 300, 200);
HDC hDC = Canvas->Handle;
DrawEdge(hDC, &Recto2, BDR_RAISEDOUTER | BDR_SUNKENINNER, BF_RECT);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
RECT Recto;
Recto.left = 70;
Recto.top = 80;
Recto.right = 370;
Recto.bottom = 330;
//Aqui utilizamos directamente el Canvas
Canvas->Rectangle(Recto);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
TRect Recto(top,left, Edit1->Text.ToInt()+top,Edit2->Text.ToInt()+left);
HDC hDC = Canvas->Handle;
DrawEdge(hDC, &Recto, BDR_RAISEDOUTER | BDR_SUNKENINNER, BF_RECT);
SetTextColor(hDC,RGB(red,green,blue));
//char *cad="hola";
char *cad=new char[Edit3->Text.Length()];
strcpy(cad, Edit3->Text.c_str());
DrawText(hDC,cad,strlen(cad),&Recto,DT_CENTER); //DT_RIGHT);//DT_LEFT;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
Button1Click(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::UpDown1Click(TObject *Sender, TUDBtnType Button)
{
int ps = ComboBox1->ItemIndex;
HPEN hpen, hpenOld;
HBRUSH hbrush, hbrushOld;
HDC hdc = Canvas->Handle;
hpen = CreatePen(ps, TrackBar4->Max, Form1->Color);
hbrush = CreateSolidBrush(Form1->Color);
hpenOld = SelectObject(hdc, hpen);
hbrushOld = SelectObject(hdc, hbrush);
Rectangle(hdc, top, left, largo + top, ancho + left);
SelectObject(hdc, hpenOld);
DeleteObject(hpen);
SelectObject(hdc, hbrushOld);
DeleteObject(hbrush);
Button1Click(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar5Change(TObject *Sender)
{
pred = TrackBar5->Position;
Button1Click(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar6Change(TObject *Sender)
{
pgreen = TrackBar6->Position;
Button1Click(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar7Change(TObject *Sender)
{
pblue = TrackBar7->Position;
Button1Click(Sender);
}
//---------------------------------------------------------------------------
Podemos correr ahora nuestra aplicación para probar lo hecho hasta ahora:
Podemos añadirle una función más al programa para que se vea más genial y de paso aprendemos nuevas cosas. Lo último que haremos sera que la función de dibujar se realice con el clic del ratón, y que su tamaño cambie al ser arrastrado con el cursor. Aquí tenemos el código para realiza estas acciones:
void TForm1::Borrar()
{
int ps = ComboBox1->ItemIndex;
HPEN hpen, hpenOld;
HBRUSH hbrush, hbrushOld;
HDC hdc = Canvas->Handle;
hpen = CreatePen(ps, TrackBar4->Max, Form1->Color);
hbrush = CreateSolidBrush(Form1->Color);
hpenOld = SelectObject(hdc, hpen);
hbrushOld = SelectObject(hdc, hbrush);
Rectangle(hdc, top, left, largo + top, ancho + left);
SelectObject(hdc, hpenOld);
DeleteObject(hpen);
SelectObject(hdc, hbrushOld);
DeleteObject(hbrush);
}
//------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
Borrar();
top = X;
left = Y;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if(Button==mbLeft)
{
Borrar();
Edit1->Text = X - top;
Edit2->Text = Y - left;
Button1Click(Sender);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if(Shift.Contains(ssLeft))
{
FormMouseUp(Sender, mbLeft, Shift, X, Y);
}
}
//---------------------------------------------------------------------------
Ahora compilamos de nuevo y corremos la aplicación, probamos la nueva función añadida.
Bueno amigos eso fue todo por esta ocasión, nos vemos en la siguiente para seguir realizando aplicaciones gráficas en C++ Builder y seguir aprendiendo. Hasta la próxima!
No hay comentarios:
Publicar un comentario