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 

Panel Transparente 2

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Panel Transparente 2 Responder citando

Buenas se que este tema se ha tratado otras veces pero las respuestas no se adaptan a mis necesidades....
La cuestion es que tengo un Form Transparente (codigo de Leo en Tips & tricks) que contiene una serie de TPanels que quiero hacer transparentes o NoTransparentes a Voluntad....
Es posible....

Nota: He leido que puedo sustituir el TPanel por un TBevel (Aunque no es contedor me sirve en mis propositos ) pero no se como hacerlo transparente tampoco.

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

¿ Que código usas exactamente ?
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias por contesta.... el codigo es este

HRGN frmRgn =CreateRectRgn(0,0,Width,Height-ClientHeight-GetSystemMetrics(SM_CYSIZEFRAME));
for(int i=0;i<ControlCount>BoundsRect;
OffsetRect((RECT*)&R,ClientOrigin.x - Left,ClientOrigin.y-Top);
HRGN tmpRgn = CreateRectRgnIndirect((RECT*)&R);
CombineRgn(frmRgn,frmRgn,tmpRgn,RGN_OR);
DeleteObject(tmpRgn);
}

SetWindowRgn(Handle,frmRgn,true);
DeleteObject(frmRgn);
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

¿ Solo necesitas hacer transparente la superficie que ocupan esos paneles ?
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Exactamente.... y despues si lo deseo volver a hacerla visible.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Dos Opciones:

El Form transparente con los Paneles tambien transparentes....
yEl form Tranparente con los paneles visibles.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

neg1414 escribió:
El Form transparente con los Paneles tambien transparentes....
Código:
    HRGN frmRgn = CreateRectRgn(0, 0, Width,
        Height-ClientHeight-GetSystemMetrics(SM_CYSIZEFRAME));

    for (int i = 0; i < ControlCount; i++)
    {
            // Si queremos que todos los paneles sean transparentes:    <---------------------
            if (Controls[i]->ClassNameIs("TPanel")) continue;
            // Si queremos que un panel en concreto sea transparente:
            //if (Controls[i] == Panel1) continue;

        TRect R = Controls[i]->BoundsRect;
        OffsetRect((RECT*)&R, ClientOrigin.x - Left, ClientOrigin.y - Top);
        HRGN tmpRgn = CreateRectRgnIndirect((RECT*)&R);
        CombineRgn(frmRgn, frmRgn, tmpRgn, RGN_OR);
        DeleteObject(tmpRgn);
    }

    SetWindowRgn(Handle, frmRgn, true);
    DeleteObject(frmRgn);

neg1414 escribió:
yEl form Tranparente con los paneles visibles.

Es el funcionamiento por defecto de la rutina original (form transparente menos las zonas donde haya controles).
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Muchas Gracias Leo.. esta Pefecto (como siempre).
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

leo, se puede controlar el grado de transparencia?, he comprobado que con esta función el formulario no es transparente, sino que literalmente desaparece pudiendo hacer click en las ventanas que estan detrás de las zonas transparentes, pero nos morimos por poder hacer transparencias en nuestros formularios por % alphablend o como le llamen...
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

En el siguiente enlace tienes como hacer semitransparente el formulario si usas la versión 5 o anterior (si usas la 6 o superior tienes las propiedades "AlphaBlend" y "AlphaBlendValue" del Form):

https://cppbuilder.es/viewtopic.php?t=3656
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

pero... con alpha blend haces el formulario completamente transparente incluso sus controles, los que se pretende es poder hacer efectos de transparencia solo en las partes del formulario que interese.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Si te refieres a hacer partes del Form transparentes tienes la función del API: "UpdateLayeredWindow" (permite controlar la transparencia independiente de cada pixel), si te refieres a hacer transparentes los controles del Form con respecto al mismo entonces ya es cuestión de interceptar los eventos de pintado y modificarlos..

Una pega de "UpdateLayeredWindow" es que al usarla dejas de recibir los eventos de pintado, por tanto eres tu el que llama a la función cada vez que necesite repintar el Form respondiendo a los eventos del ratón y demás. Lo que hace que sea muy complicado trabajar con los controles estándar de este modo, pero está bien cuando uno se encarga de dibujar todo el contenido del Form. Por eso es muy fácil utilizarla para crear pantallas de presentación (splash-screens), y es para lo más que te la encontraras en la mayoría de programas..
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Leo a dicho

Cita:
"si te refieres a hacer transparentes los controles del Form con respecto al mismo entonces ya es cuestión de interceptar los eventos de pintado y modificarlos.."


Podriais poner un ejemplo.....
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

¿Que necesitas hacer realmente? Es que si quieres modificar el comportamiento grafico de varios controles igual te compensa más dibujar el contenido del Form.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

La idea es conseguir, por ejemplo, que el formulario quede transparente pero no los controles de su interior, o si lo prefieres, todo lo que aparezca dentro de un TPanel no se haga transparente y el resto si.



La idea de esto es que no complique mucho el programa, si no se puede no se puede, aunque muchos me consideren bueno haciendo programas, en cuestion de conocimientos no me acerco ni a la suela de los zapatos de algunos de los presentes, mis conocimientos necesitan centrarse en la logíca de lo que el programa debe ofrecer y no de si es mas bonito o mas feo, pero que sea más bonito y agradeable a la vista a veces ayuda, aunque es algo subjetivo tambien.
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.