Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Form semitransparente en Windows2000 con BCB5

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Tips & Tricks
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Form semitransparente en Windows2000 con BCB5 Responder citando

- Este efecto es solo valido en Windows 2000.

- Tal como esta solo funciona en BCB5 ya que este trae las cabeceras actualizadas para Win2000.

En el evento OnCreate del Form ponemos:

  int P = 25; // Porcentaje transparencia

  SetWindowLong(Handle, GWL_EXSTYLE,
        GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED);

  SetLayeredWindowAttributes(Handle, NULL, 255*(100-P)/100, LWA_ALPHA);


---
PD: posiblemente también funciona en Windows Millenium (a ver si alguien puede confirmarlo)

Volver arriba
Mensaje    Asunto: Form semitransparente en Windows2000 con BCB5 Responder citando

Copiado al pie de la letra en bcb5.0 bajo Windows millennium y no va.
Volver arriba
Mensaje    Asunto: Responder citando

La versión anterior tal como esta solo funciona en BCB5 y BCB6 ya que solo estos tienen las cabeceras actualizadas para Windows 2000/XP.

Esta funciona en cualquier versión de C++Builder, aunque esta pensada principalmente para los que usan alguna versión anterior a la 5:

Código:
void __fastcall FormTransparente(TForm *form, int porcentaje)
{
    typedef BOOL (WINAPI *PSetLayeredWindowAttributes)
        (HWND, COLORREF, BYTE, DWORD);

    HMODULE hDll = GetModuleHandle("user32.dll");
    if (hDll)
    {
        PSetLayeredWindowAttributes pSetLayeredWindowAttributes =
            reinterpret_cast<PSetLayeredWindowAttributes>(
                GetProcAddress(hDll, "SetLayeredWindowAttributes") );

        if (pSetLayeredWindowAttributes)
        {
            SetWindowLong(form->Handle, GWL_EXSTYLE,
                GetWindowLong(form->Handle, GWL_EXSTYLE)
                | 0x80000 /*WS_EX_LAYERED*/);

            pSetLayeredWindowAttributes(form->Handle, 0,
                static_cast<BYTE>(-255*porcentaje/100), 2 /*LWA_ALPHA*/);
        }
    }
}

y para probarla podemos poner lo siguiente en el constructor del form:

    // Form 60% transparente
    FormTransparente( this, 60 );

Dejar claro que esto solo funciona en Windows 2000/XP que son los únicos que tienen esta función en su API.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.