| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Lun 15 Mar, 2010 3:43 pm Asunto: Panel Transparente 2 |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 15 Mar, 2010 4:31 pm Asunto: |
|
|
| ¿ Que código usas exactamente ? |
|
| Volver arriba |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Lun 15 Mar, 2010 4:37 pm Asunto: |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 15 Mar, 2010 4:48 pm Asunto: |
|
|
| ¿ Solo necesitas hacer transparente la superficie que ocupan esos paneles ? |
|
| Volver arriba |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Lun 15 Mar, 2010 4:55 pm Asunto: |
|
|
| Exactamente.... y despues si lo deseo volver a hacerla visible. |
|
| Volver arriba |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Lun 15 Mar, 2010 4:57 pm Asunto: |
|
|
Dos Opciones:
El Form transparente con los Paneles tambien transparentes....
yEl form Tranparente con los paneles visibles. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 17 Mar, 2010 3:38 pm Asunto: |
|
|
| 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 |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Mie 17 Mar, 2010 7:39 pm Asunto: |
|
|
| Muchas Gracias Leo.. esta Pefecto (como siempre). |
|
| Volver arriba |
|
 |
ZHAX1 Master

Registrado: 09 Mar 2007Mensajes: 191
|
Publicado: Jue 18 Mar, 2010 10:51 pm Asunto: |
|
|
| 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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 18 Mar, 2010 11:20 pm Asunto: |
|
|
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 |
|
 |
ZHAX1 Master

Registrado: 09 Mar 2007Mensajes: 191
|
Publicado: Vie 19 Mar, 2010 10:57 am Asunto: |
|
|
| 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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Vie 19 Mar, 2010 2:44 pm Asunto: |
|
|
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 |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Sab 20 Mar, 2010 11:11 am Asunto: |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 21 Mar, 2010 3:56 pm Asunto: |
|
|
| ¿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 |
|
 |
ZHAX1 Master

Registrado: 09 Mar 2007Mensajes: 191
|
Publicado: Lun 22 Mar, 2010 9:52 am Asunto: |
|
|
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 |
|
 |
|