Bueno pues al igual que la ocasión pasada en la forma no tenemos ningún componente ya que solo trabajaremos sobre eventos de la forma.
Bueno pues para ésta aplicación abrimos el archivo H de la aplicación y en la parte de las declaraciones de usuario privadas declaramos 2 enteros, en mi caso los llamé "x" y "y", debe quedar de la siguiente manera:
private: // User declarations
int x, y;
Bueno pues ahora abrimos el evento OnPaint de la forma y colocamos el código que se muestra a continuación:
void __fastcall TForm1::FormPaint(TObject *Sender)
{
int CentroX, CentroY, Contador = 0;
// Líneas con trazo discontinuo
Canvas->Pen->Style = psSolid;//psDot;//psDashDotDot;;//psDashDot;//psDash;
// Calcular el centro del área de dibujo
CentroX = x;
CentroY = y;
// Recorrer toda la anchura del área de dibujo
while (Contador < ClientWidth) {
// Trazando líneas desde el centro
// hasta los bordes superior e inferior
Canvas->MoveTo(CentroX, CentroY);
Canvas->LineTo(Contador, 0);
Canvas->MoveTo(CentroX, CentroY);
Canvas->LineTo(Contador, ClientHeight);
Contador += 10; // Incrementar el contador
}
Contador = 0; // Contador de nuevo a cero
// Para recorrer la altura del área de dibujo
while (Contador < ClientHeight)
{
// Trazando líneas desde el centro
// hasta los bordes izquierdo y derecho
Canvas->MoveTo(CentroX, CentroY);
Canvas->LineTo(0, Contador);
Canvas->MoveTo(CentroX, CentroY);
Canvas->LineTo(ClientWidth, Contador);
Contador += 10; // Incrementar el contador
}
Invalidate(); //sirve para el movimiento del centro con el mouse
this->DoubleBuffered=true; //reduce el parpadeo
}
//---------------------------------------------------------------------------
Bueno pues los únicos cambios que tenemos en el código es que al momento de calcular el centro del área de dibujo, en lugar de que sean el centro del ancho y alto de la forma serán unos valores X y Y, que es donde está ubicado el cursor del mouse. Así mismo podemos notar que al final tenemos 2 lineas de código más; la primera línea sirve para refrescar la imágen cuando se mueva el cursor dentro de la forma, y la segunda línea de código nos sirve para reducir notablemente el parpadeo, ya que sin ésta se vería de la imágen parpadearía cada vez que movamos el cursor al estarse redibujando.
Ahora abrimos el evento OnResize de la forma y escribimos lo siguiente:
void __fastcall TForm1::FormResize(TObject *Sender)
{
Invalidate();
}
//---------------------------------------------------------------------------
Esto nos sirve para redimensionar las lineas trazadas en caso de que la ventana donde está ejecutándose la aplicación sea maximizada o cambiada de tamaño.
Finalmente abrimos el evento OnMouseMove y dentro del evento escribimos el código que a continuación tenemos:
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
x = X;
y = Y;
}
//---------------------------------------------------------------------------
Con este evento lo que hacemos es obtener la posición del cursor del ratón cuando se mueve por encima de la forma y le asignamos esas posiciones a los valores enteros que antes ya habiamos declarado, después esos valores entero se asignan a el centro del área de dibujo para que se muevan las lineas cada vez que se mueve el cursor.
Ahora finalmente compilamos y corremos nuestra aplicación y debe verse algo por el estilo:
Bueno amigos pues analizen el código y entiendanlo ya que es importante que sepan que es lo que se está haciendo y porqué se esta haciendo, y pues piensen en que otras modificaciones podrían hacerse a la aplicación y traten de hacerlo. Eso es todo por hoy y nos vemos la próxima ocasión para continuar con más aplicaciones en C++ Builder, hasta la próxima amigos!!!.
No hay comentarios:
Publicar un comentario