Hola a tod@s :)
Como BASpeed ha llegado a una fase muy estable (la mayoría de errores que me mandan, suelen ser o bien, fallos del propio Windows Vista, por culpa del UAC, o bien, fallos involuntarios del usuario al haber borrado algún archivo esencial del programa), voy a explicar algunos trucos de programación, que he usado en BASpeed, y que quizá, a algunos programadores que ya se han iniciado en C o en Delphi, pueden usar en sus programas.
En este caso, y para comenzar por algún sitio, os voy a explicar como se realiza la animación de aparición / desaparición de la ventana principal de BASpeed.
Para poder usar este efecto, vamos a usar una única función del API de Windows, que justamente realiza esa función de animar una ventana. Esta función del API de Windows es AnimateWindow
Como podeis ver, esta función tiene tres parámetros de entrada: hwnd, que es el handle (el identificador) de la ventana que se va a animar, dwTime, que es el tiempo en milisegundos que va a durar la animación, y dwFlags que le indica a la función, el tipo de animación a usar en la ventana.
Supongamos que queremos ocultar la ventana principal de la aplicación, con una duración de 500 ms. En delphi, esto es muy sencillo. La ventana principal de la aplicación, siempre se denomina Form1. Y para poder ocultarla, simplemente debemos escribir lo siguiente:
AnimateWindow(Form1.Handle, 500, AW_HIDE);
En C, es igual de sencillo. Hay que incluir la libreria windows.h, para poder crear la ventana y mostrarla. Teniendo en cuenta que la función CreateWindow, nos devuelve el handle (identificador) de la ventana creada, y suponiendo que hemos almacenado ese valor en una variable denominada HandleVentana, de tipo HWND, entonces se puede llamar a la función de la misma forma que en delphi:
AnimateWindow(HandleVentana, 500, AW_HIDE);
No existe un valor que nos permita realizar la animación en sentido inverso, es decir, que de estar oculta pase a estar visible, realizando una animación. En este caso, hay que usar las funciones estándar de Delphi, o bien visualizar directamente la ventana de nuevo, en C. Para delphi, se puede hacer así:
Form1.Show;
Y para C, se tiene que usar la función estándar de ShowWindow de la forma siguiente:
ShowWindow(HandleVentana, SW_SHOW);
Espero que esto sirva de inspiración para vuestros programas, y cuando tenga algo más de tiempo, poder explicar más truquillos, que se han usado en BASpeed, y que seguro que a más de un programador, le resultarán de utilidad.
Un saludo a tod@s :)