Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Transparencias en las ventanas (https://www.clubdelphi.com/foros/showthread.php?t=69998)

rodriguezwalter 23-09-2010 22:47:07

Transparencias en las ventanas
 
Hola a todos.

Necesito crear unas ventanas pero necesito que tengan transparencias y se vea lo que tienen detrás. Pensé en trabajar con gif pero no se cómo hacer lo delas transparencias enlasventanas.

La idea es poder crear ventanas que por lo menos en la apariencia tengan otra forma y no la típica rectangular.

Si alguien tiene una ideale agradecería.

Intento trabajar sin necesitar bajar componentes adicionales ya que los que hemos encontrado son pagos.


Gracias de antemano.

rgstuamigo 23-09-2010 23:01:53

Para que tus ventanas tengan transparencias ,pues sencillamente utiliza dos propiedades que tiene todo formulario en delphi, dichas propiedades son: AlphaBlend y AlphaBlendValue, la primera debes ponerla en True para activar la transparencia y a la segunda debes darle un valor entre 0 y 255, por defecto viene con un valor de 255 lo que significa que la ventana no tiene ninguna transparencia, pero si ponemos un valor menor a 255 detectamos que al correr nuestra aplicacion ,nuestra ventana se ha hecho más transparente por ejemplo puedes poner un valor de 220 para probar.;). Desde luego si quieres más transparencia debes poner un valor menor.;)
Dichas propiedades las puedes modificar en tiempo de Diseño en el "Object Inspector".;).
Espero sea de utilidad.;)
Saludos...:)

rodriguezwalter 24-09-2010 22:26:08

Muchas gracias.

Lo he probado y está muy interesante. No conocía esas propiedades.

Pregunto además.

¿Existe la posibilidad de hacer transparentes algunos componentes como por ejemplo el formulario y no una imágen que inserte en un timage por ejemplo?

Soy nuevo en esta parte.

Gracias desde ya.

gluglu 25-09-2010 10:09:54

Si la imagen es parte de ese Formulario, y el form tiene activas las propiedades que se indican anteriormente, todos los componentes de ese Form serán transparentes.

Tendríar que 'plantar' un Form diferente sobre ese otro Form que es transparente, y que te hiciera dicha función.

Para cualquier tipo de 'movimientos' tendrás que tomar en cuenta los eventos correspondientes para al mover el form transparente, mover también el otro form no transparente.

No sé si esto es lo que preguntabas. :o

escafandra 26-09-2010 00:33:33

Manejando regiones se puede crear el efecto deseado:
Creamos un form con un Timage. En el Timage cargamos un bitmap y añadimos el código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

ADWord = array [0..0] of DWORD;
PADWord = ^ADWord;

var
  Form1: TForm1;


implementation

{$R *.dfm}
//---------------------------------------------------------------------------
procedure SkinControl(Control: TWinControl; bmp: TBitmap);
var
  TransparentColor: DWORD;
  rgn, rgnTemp: HRGN;
  ini, x, y: integer;
  Pixel: PADWord;
begin
  bmp.HandleType:= bmDIB;
  bmp.PixelFormat:= pf32bit;
  Control.SetBounds(Control.Left, Control.Top, bmp.Width, bmp.Height);

  TransparentColor:= PADWord(bmp.ScanLine[bmp.Height-1])[0];

  rgn:= CreateRectRgn(0, 0, Control.Width, Control.Height);
  CombineRgn(rgn, rgn, rgn, RGN_DIFF);

  for  y:=0 to bmp.Height-1 do
  begin
    Pixel:= PADWord(bmp.ScanLine[y]);
    ini:= 0;
    for x:=0 to bmp.Width-1 do
    begin
       if pixel[x] <> TransparentColor then
       begin
         rgnTemp:= CreateRectRgn(ini, y, x, y+1);
         CombineRgn(rgn, rgn, rgnTemp, RGN_OR);
         DeleteObject(rgnTemp);
         ini:= x;
       end
       else inc(ini);
    end;
  end;
  SetWindowRgn(Control.Handle, rgn, true);
  DeleteObject(rgn);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  BorderStyle:= bsNone;
  Image1.AutoSize:= false;
  Image1.Left:= 0;
  Image1.Top:= 0;
  SkinControl(self, Image1.Picture.Bitmap);

end;

end.

Saludos.


La franja horaria es GMT +2. Ahora son las 04:14:30.

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