Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   capas con UpdateLayerWindow (https://www.clubdelphi.com/foros/showthread.php?t=63164)

_cero_ 01-02-2009 02:13:16

capas con UpdateLayerWindow
 
Como están todos, espero que bien. Les escribo porque me ha saltado una duda con la función “UpdateLayerWindow”, yo uso esta función para tener un splash-screen semitransparente.

Cuando este se abre, comienza a revisar unos datos de una base, y por esto puede tardarse mucho en mostrar el form principal, Así que me gustaría ponerle un “ProgressBar” para ver cuánto lleva revisado, el problema es que con esta función solo me muestra una capa de mi ventana (o eso creo), y tendría que poner el “ProgressBar” en otro form transparente.

Así que mi pregunta es ¿se se puede mostrar más de una capa con esta función?, y si es así ¿cómo se haría?:confused::confused::confused:

Les dejo la forma en que yo la ocupo
Código:

  TBlendFunction BlendFunction;
  TPoint BitmapPos;
  TSize BitmapSize;
  DWORD exStyle; 

  exStyle = GetWindowLongA(Handle, GWL_EXSTYLE);
  SetWindowLong(Handle, GWL_EXSTYLE, exStyle | WS_EX_LAYERED);

  BitmapPos = Point(0, 0);
  BitmapSize.cx = Image1->Width;
  BitmapSize.cy = Image1->Height;

  BlendFunction.BlendOp = AC_SRC_OVER;
  BlendFunction.BlendFlags = 0;
  BlendFunction.SourceConstantAlpha = 255;
  BlendFunction.AlphaFormat = AC_SRC_ALPHA;

  UpdateLayeredWindow(
                      Handle,
                      0,
                      NULL,
                      &BitmapSize,
                      Image1->Canvas->Handle,
                      &BitmapPos,
                      0,
                      &BlendFunction,
                      ULW_ALPHA
                    );

Nos vemos y de antemano gracias.

Neftali [Germán.Estévez] 01-02-2009 11:19:22

PREGUNTA: ¿Y para esto no te sirve el AlphaBlend de los formularios?

_cero_ 01-02-2009 17:21:55

Que tal Neftali, gracias por tu interés. pues no me sirve el “AlphaBlend”, porque mi splash es un logo, así que no es una imagen cuadrada, además tiene sombra (canal alpha) y si uso “TransparentColor” y “AlphaBlend” pues la imagen se ve horrible, porque el canal alpha se combina con el color del pixel que este debajo y si pongo el verde como color transparente cuando se inicie la aplicación comenzara anular todos los pixeles de verde, pero los que se combinaron con el canal alpha no los anula por ser un color diferente.

juanelo 01-02-2009 17:53:19

Cita:

Empezado por _cero_ (Mensaje 336785)
Que tal Neftali, gracias por tu interés. pues no me sirve el “AlphaBlend”, porque mi splash es un logo, así que no es una imagen cuadrada, además tiene sombra (canal alpha) y si uso “TransparentColor” y “AlphaBlend” pues la imagen se ve horrible, porque el canal alpha se combina con el color del pixel que este debajo y si pongo el verde como color transparente cuando se inicie la aplicación comenzara anular todos los pixeles de verde, pero los que se combinaron con el canal alpha no los anula por ser un color diferente.

¡¡¡ Anda la osa !!!, lo que uno viene a aprender ya de grande ... :eek:

Neftali [Germán.Estévez] 01-02-2009 21:35:21

Ok.
El tema de la transparencia y las formas no rectangulares se pueden combinar añadiendo regiones. Hay incluso programas que te facilitan casi todo el trabajo.
Posiblemente el tema de las sombras anula mi sugerencia. :(

Un saludo.

_cero_ 02-02-2009 07:54:22

En efecto, las regiones me servirían en cuanto a forma pero para sombra creo que no, además he estado leyendo un poco y lo único extra que pude averiguar es que Windows vista usa esto para crear el Aero Glass así que en teoría si se puede mostrar más de una capa.

Mmm creo que por el momento tendré que poner los componentes en un form aparte, pero si alguien sabe cómo hacerlo con “UpdateLayerWindow” selo agradecería mucho.:o


La franja horaria es GMT +2. Ahora son las 22:06:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi