domingo, 19 de febrero de 2012

Diseño De Un ScreenSaver

Hola de nuevo chavos! Es hora de continuar con la creación de aplicaciones de graficación en C++ Builder y para esta ocasión lo que haremos será mostrar como de manera simple se puede crear un protector de pantalla en el cual se irán dibujando de manera aleatoria figuras que tendremos contenidas en archivos bmp, para hacer esto utilizaremos un arreglo de objetos de tipo TBitmap.

Las 10 imágenes bmp que utilizaremos pueden ser diseñadas por uno mismo o pueden ser descargadas de internet como se desee.

Bueno pues para comenzar lo único que necesitamos de componentes en la forma es un Timer:


Una vez echo esto vamos a la propiedad WndowState de la forma y cambiamos su valor por: wsMaximized. Y en la propiedad BorderStyle de la forma elegimos lo siguiente: bsNone.

Ahora declaramos el arreglo en el que tendremos las imágenes que se mostraran en el protector de pantalla, para esto vamos a el archivo H de la forma y declaramos el arreglo, a estas alturas ya deberíamos de saber cómo hacerlo:


class TForm1 : public TForm
{
__published: // IDE-managed Components
        TTimer *Timer1;
        void __fastcall Timer1Timer(TObject *Sender);
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall FormKeyPress(TObject *Sender, char &Key);
        void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y);
private: // User declarations
        Graphics::TBitmap *ImageObject[10];
public: // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------


El siguiente código lo escribimos en el siguiente evento: __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner), éste es el pequeño código que se crea cuando iniciamos una nueva aplicación visual en C++ Builder, dentro de él escribimos el código:


__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        ImageObject[0] = new Graphics::TBitmap;
        ImageObject[0]->LoadFromFile("Image1.bmp");
        ImageObject[0]->Transparent = True;
        ImageObject[1] = new Graphics::TBitmap;
        ImageObject[1]->LoadFromFile("Image2.bmp");
        ImageObject[1]->Transparent = True;
        ImageObject[2] = new Graphics::TBitmap;
        ImageObject[2]->LoadFromFile("Image3.bmp");
        ImageObject[2]->Transparent = True;
        ImageObject[3] = new Graphics::TBitmap;
        ImageObject[3]->LoadFromFile("Image4.bmp");
        ImageObject[3]->Transparent = True;
        ImageObject[4] = new Graphics::TBitmap;
        ImageObject[4]->LoadFromFile("Image5.bmp");
        ImageObject[4]->Transparent = True;
        ImageObject[5] = new Graphics::TBitmap;
        ImageObject[5]->LoadFromFile("Image6.bmp");
        ImageObject[5]->Transparent = True;
        ImageObject[6] = new Graphics::TBitmap;
        ImageObject[6]->LoadFromFile("Image7.bmp");
        ImageObject[6]->Transparent = True;
        ImageObject[7] = new Graphics::TBitmap;
        ImageObject[7]->LoadFromFile("Image8.bmp");
        ImageObject[7]->Transparent = True;
        ImageObject[8] = new Graphics::TBitmap;
        ImageObject[8]->LoadFromFile("Image9.bmp");
        ImageObject[8]->Transparent = True;
        ImageObject[9] = new Graphics::TBitmap;
        ImageObject[9]->LoadFromFile("Image10.bmp");
        ImageObject[9]->Transparent = True;
}
//---------------------------------------------------------------------------


Después viene el código que escribiremos en el evento del Timer que colocamos en la forma:


void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
        int x = random(Width-100);
        int y = random(Height-150);
        Canvas->Draw(x-60, y-60, ImageObject[random(10)]);
}
//---------------------------------------------------------------------------


El código anterior nos sirve para calcular de forma aleatoria el lugar donde se colocara la imágen cuando aparezca en el protector de pantalla.

Luego abrimos el evento OnCreate de la forma y en el escribimos el código para mantener el cursor oculto mientras este activo el protector de pantalla:


void __fastcall TForm1::FormCreate(TObject *Sender)
{
        ShowCursor(FALSE);
}
//---------------------------------------------------------------------------


Ahora abrimos el evento OnKeyPress también de la forma para que el protector de pantalla se cierre si presionamos alguna tecla:


void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
        Close();
}
//---------------------------------------------------------------------------


Finalmente abrimos otro evento de la forma que sería el OnMouseMove en el cual colocamos el código para que cuando se mueva el cursor del mouse se cierre el protector de pantalla:


void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
        static int MoveCounter = 0;
        if( MoveCounter >= 15 )
                Close();
        MoveCounter++;
}
//---------------------------------------------------------------------------


Y pues eso es todo, ¿muy fácil verdad? pues lo siguiente es compilar y correr nuestro programa y deberíamos obtener algo como lo siguiente:


Bueno amigos pues por esta ocasión sería todo pero ya saben, nos vemos más adelante para seguir mostrando ejemplos de aplicaciones en C++ Builder. Hasta la próxima chavos!

No hay comentarios:

Publicar un comentario