miércoles, 8 de febrero de 2012

Efecto con Lineas


Este efecto es logrado simplemente dibujando lineas desde el centro de una forma hasta llenar la pantalla, se forman estos símbolos por la forma en la que estan dibujadas las líneas (no completamente en diagonal como sería lo ideal)








__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   // Calcular el centro del área de dibujo
   CentroX = ClientWidth / 2;
   CentroY = ClientHeight / 2;
   this->DoubleBuffered = true;
}


void __fastcall TForm1::FormPaint(TObject *Sender)
{
   int Contador = 0;

       // Líneas con trazo discontinuo
   Canvas->Pen->Style = psSolid;//psDot;//psDashDotDot;;//psDashDot;//psDash;
   Canvas->Pen->Color = clBlack;

      // 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 += 4; // 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 += 5; // Incrementar el contador
   }
}



void __fastcall TForm1::FormResize(TObject *Sender)
{
   //Si la forma se redimensiona actualizar todo
   //a sus nuevas dimensiones
   Invalidate();
}




Si queremos mover el centro en cualquier dirección con el mouse o con las flechas del teclado:


void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
        Invalidate();
        CentroX = X;
        CentroY = Y;
        FormPaint(Sender);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
        if (Shift.Contains(ssLeft))
        FormMouseDown(Sender, 0, Shift, X, Y);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
        if (Key == 37)
                FormMouseDown(Sender, 0, Shift, (CentroX - 5), CentroY);
        if (Key == 38)
                FormMouseDown(Sender, 0, Shift, (CentroX), (CentroY - 5));
        if (Key == 39)
                FormMouseDown(Sender, 0, Shift, (CentroX + 5), CentroY);
        if (Key == 40)
                FormMouseDown(Sender, 0, Shift, (CentroX), (CentroY + 5));
}


No hay comentarios:

Publicar un comentario