Ir al contenido


Foto

Hacer el TForm transparente desde Delphi


  • Por favor identifícate para responder
7 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 24 febrero 2009 - 02:50

Este código que me encontré en la red nos permite convertir el Form (TForm) en un formulario transparente, éste es el código:



delphi
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Button1: TButton;
  12.     Button2: TButton;
  13.     procedure Button1Click(Sender: TObject);
  14.     procedure Button2Click(Sender: TObject);
  15.   private
  16.     FullRgn, ClientRgn, CtlRgn: THandle;
  17.     procedure MakeTransparent;
  18.     procedure UndoTransparent;
  19.   public
  20.     { Public declarations }
  21.   end;
  22.  
  23. var
  24.   Form1: TForm1;
  25.  
  26. implementation
  27.  
  28. {$R *.dfm}
  29.  
  30. procedure TForm1.MakeTransparent;
  31. var
  32.   AControl: TControl;
  33.   A, Margin, X, Y, CtlX, CtlY: Integer;
  34. begin
  35.   Margin    := (Width - ClientWidth) div 2;
  36.   FullRgn  := CreateRectRgn(0, 0, Width, Height);
  37.   X        := Margin;
  38.   Y        := Height - ClientHeight - Margin;
  39.   ClientRgn := CreateRectRgn(X, Y, X + ClientWidth, Y + ClientHeight);
  40.   CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF);
  41.   for A := 0 to ControlCount - 1 do
  42.   begin
  43.     AControl := Controls[A];
  44.     if (AControl is TWinControl) or (AControl is TGraphicControl) then with AControl do
  45.       begin
  46.         if Visible then
  47.         begin
  48.           CtlX  := X + Left;
  49.           CtlY  := Y + Top;
  50.           CtlRgn := CreateRectRgn(CtlX, CtlY, CtlX + Width, CtlY + Height);
  51.           CombineRgn(FullRgn, FullRgn, CtlRgn, RGN_OR);
  52.         end;
  53.       end;
  54.   end;
  55.   SetWindowRgn(Handle, FullRgn, True);
  56. end;
  57.  
  58. procedure TForm1.UndoTransparent;
  59. begin
  60.   FullRgn := CreateRectRgn(0, 0, Width, Height);
  61.   CombineRgn(FullRgn, FullRgn, FullRgn, RGN_COPY);
  62.   SetWindowRgn(Handle, FullRgn, True);
  63. end;
  64.  
  65. procedure TForm1.Button1Click(Sender: TObject);
  66. begin
  67.   MakeTransparent;
  68. end;
  69.  
  70. procedure TForm1.Button2Click(Sender: TObject);
  71. begin
  72. UndoTransparent;
  73. end;
  74.  
  75. end.



Saludos.
  • 0

#2 rgstuamigo

rgstuamigo

    Member

  • Miembros
  • PipPip
  • 33 mensajes
  • LocationSanta Cruz-Bolivia

Escrito 16 junio 2009 - 02:39

Para que programar tanto amigo enecumene; para ser un formulario transparente tan solo has lo siguiente:
1) Pon la propiedad AlphaBlend de tu Formulario en true;
2) Pon un valor Numerico en la propiedad AlphaBlendValue digamos de 200. Y Listo. ;)
Si quieres mas transparencia coloca un valor menor.
Saludos... 8-|
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 16 junio 2009 - 03:04

Para que programar tanto amigo enecumene; para ser un formulario transparente tan solo has lo siguiente:
1) Pon la propiedad AlphaBlend de tu Formulario en true;
2) Pon un valor Numerico en la propiedad AlphaBlendValue digamos de 200. Y Listo. ;)
Si quieres mas transparencia coloca un valor menor.
Saludos... 8-|


Como testigo de descargo  8-|, el código de enecumene es para versiones de Delphi que no tienen la propiedad AlphaBlend, como por ejemplo Delphi4 Standard :p :D :D :D

Salud OS

[off-topic]Buen punto amigo rgstuamigo (y)[/off-topic]
  • 0

#4 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 16 junio 2009 - 03:48

La propiedad seria TransparentValue y el beneficio del codigo de enecumene es su uso en 9x.
  • 0

#5 rgstuamigo

rgstuamigo

    Member

  • Miembros
  • PipPip
  • 33 mensajes
  • LocationSanta Cruz-Bolivia

Escrito 18 junio 2009 - 01:53


Para que programar tanto amigo enecumene; para ser un formulario transparente tan solo has lo siguiente:
1) Pon la propiedad AlphaBlend de tu Formulario en true;
2) Pon un valor Numerico en la propiedad AlphaBlendValue digamos de 200. Y Listo. ;)
Si quieres mas transparencia coloca un valor menor.
Saludos... 8-|


Como testigo de descargo  8-|, el código de enecumene es para versiones de Delphi que no tienen la propiedad AlphaBlend, como por ejemplo Delphi4 Standard :p :D :D :D

Salud OS

[off-topic]Buen punto amigo rgstuamigo (y)[/off-topic]

Ahhhh!!!.. Bueno. *-) :D
  • 0

#6 V3ct0r

V3ct0r

    Member

  • Miembros
  • PipPip
  • 16 mensajes
  • LocationVenezuela

Escrito 14 septiembre 2009 - 11:04

Hola amigos esta muy bien el truco pero como podria ejecutar ese codigo si estoy creando la ventana en tiempo de ejecución?
  • 0

#7 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 14 septiembre 2009 - 11:12

Hola amigos esta muy bien el truco pero como podria ejecutar ese codigo si estoy creando la ventana en tiempo de ejecución?


Se me ocurre algo de inmediato, podrías hacer públicos los métodos y llamarlos desde la form que llama a la form transparente.

Saludos
  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 16 noviembre 2009 - 12:18

También es bueno cuando se tiene controles en el forms, ya que con el alphablend también los controles toman valores, con este code sólo transparenta la forma y no los controles. ;)

Saludos.
  • 0




IP.Board spam blocked by CleanTalk.