Hola amigos!!! Espero que estén de lo mejor y pues es hora de continuar con más aplicaciones de graficación en C++ Builder. Creo que aun recuerdan la aplicación que realizamos la ocasión pasada en la cual escribiamos una cadena de texto en la forma. Bueno pues ahora trabajaremos con esa misma aplicación como base y la modificaremos de manera que el texto gire en su propio eje en el sentido de las manecillas del reloj y en sentido contrario, además de poder girarlo en el ángulo que nosotros deseemos.
Para comenzar con la aplicación debemos modificar la forma de manera que debemos de tener los siguientes componentes:
-2 botones (los mismos que teníamos en la aplicación pasada)
-1 label
-1 TrackBar (con valor mínimo de 0 y máximo de 255)
-2 timers
Los componentes pueden acomodarlos con el diseño que quieran, en este caso yo los acomodé de la siguiente manera:
Ahora empezamos con la codificación de la aplicación, primeramente abrimos el archivo H del programa y declaramos las siguientes variables (ya vimos como y dónde hacerlo en aplicaciones pasadas):
private: // User declarations
int n, n2;
A continuación escribimos el código del botón para cerrar la aplicación, ya lo hemos visto antes muchas veces, y sabemos que es bastante sencillo:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
Enseguida escribimos el código del botón para mostrar texto:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//Canvas->Font->Color = clBlue;
Canvas->Font->Size = 30; //Tamaño del Font
Canvas->Font->Name = "SimSun";//"Tahoma";//"Times Roman"; //Nombre del
// Font
//Declaramos una variable LOGFONT
LOGFONT lgfont;
GetObject(Canvas->Font->Handle, sizeof(LOGFONT), &lgfont);
//Propiedades que nos permiten modificar la orientación de la salida del Texto
lgfont.lfEscapement = n*10;//0;//-900;//45*10; //Angulo *10
lgfont.lfOrientation = n2*10;//0;//-900;//45*10; //Angulo *10
lgfont.lfOutPrecision = OUT_TT_ONLY_PRECIS;
//Creamos un font logico con las caracteristicas especificadas en la
//Estructura LOGFONT
//Consultar en la ayuda LOGFONT para conocer su definición
Canvas->Font->Handle = CreateFontIndirect(&lgfont);
SetGraphicsMode(Canvas->Handle, GM_ADVANCED);
String text = "Tec. De La Laguna";
Canvas->TextOut(ClientWidth/2,ClientHeight/2, text); //Dibujamos el Texto
}
//---------------------------------------------------------------------------
Notamos que las modificaciones que tiene respecto a la aplicación pasada es que el ángulo en que está escrito el texto y la orientación ahora tienen unos valores variables, los cuales declaramos en el archivo H.
A continuación tenemos el código del TrackBar:
void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
n = TrackBar1->Position;
Refresh();
Button1Click(Sender);
}
//---------------------------------------------------------------------------
Notamos que lo único que realiza el TrackBar es cambiar el valor de la variable n asignandole el valor de la posición que tiene el TrackBar y después mandamos llamar al evento Button1Click(Sender) para mostrar de nuevo el texto pero ahora con el nuevo ángulo del texto.
Ahora escribimos el código de los 2 timers, primero el código del Timer1:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
n++;
Refresh();
Button1Click(Sender);
}
//---------------------------------------------------------------------------
Luego el código del Timer2:
void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
n--;
n2++;
Refresh();
Button1Click(Sender);
}
//---------------------------------------------------------------------------
El código de los Timers lo que hará será girar el texto en sentido de las manecillas del reloj y en el sentido contrario. Los Timers se habilitan y se deshabilitan dando clic o doble clic en la forma, para esto utilizamos el código que tenemos a continuación:
void __fastcall TForm1::FormClick(TObject *Sender)
{
Timer2->Enabled = false;
Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDblClick(TObject *Sender)
{
Timer1->Enabled = false;
Timer2->Enabled = true;
}
//---------------------------------------------------------------------------
Como podemos ver en el código al dar un clic en la forma deshabilitamos el Timer2 y habilitamos el Timer1 con lo que el texto girará en sentido contrario a las manecillas del reloj. Por el contrario si damos doble clic en la forma deshabilitamos el Timer1 y habilitamos el Timer2 con lo que el texto girará en sentido de las manecillas del reloj.
Compilamos nuestro programa y lo corremos, si hicimos todo de manera correcta nuestra aplicación se verá de la siguiente manera:
El texto podemos moverlo automáticamente desde el TrackBar o automáticamente dando clic o doble clic en la forma.
Y pues eso es todo por hoy chavos, espero que todo haya quedado claro y que hayamos aprendido algo. Nos vemos en la próxima ocasión para realizar una aplicación diferente y seguir aprendiendo cosas nuevas en C++ Builder. Hasta la próxima amigos!.
No hay comentarios:
Publicar un comentario