Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Crear panel translúcido o similar (efecto dashboard) (https://www.clubdelphi.com/foros/showthread.php?t=39849)

pjexposito 31-01-2007 14:05:39

Crear panel translúcido o similar (efecto dashboard)
 
Hola,

¿existe forma de crear un panel o algún componente similar pero que sea translúcido?

Es que quiero un efecto similar al fondo de Dashboard (en Mac) o al fondo que aparece en Sourceforge al cambiar de servidor de descarga.

Es decir, que aparezca en primer plano una imagen translúcida, que ocupe todo el form, y que deje entrever tras ella, el resto de componentes (botones, etc.)

Gracias.

fdelamo 31-01-2007 14:38:49

A ver si te vale de algo
 
Hola,

hace tiempo hice algo parecido, lo único que se hace transparente hasta tal punto que puedes pulsar el botón que hay abajo, en el ejemplo que hice hay una linea visible y otra no, además de los controles que pongas en el form, pero se pueden poner las formas que quieras.

Pon un control en el formulario (creo que si no hay ninguno no funciona bien) y mira a ver que te parece:

Código Delphi [-]
unit FormTransparente;

interface

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

type

  TfrmTransparente = class(TForm)
  protected
    procedure Paint; override;
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
  end;

implementation

constructor TfrmTransparente.Create(AOwner: TComponent);
begin
  inherited;
  Paint;
end;

procedure TfrmTransparente.Paint;
var
  frmRegion, tempRegion: HRGN;
  i: Integer;
  Arect: TRect;
begin

  inherited;
  //La zona de los controles no sera transparente
  frmRegion := 0;
  for I:= 0 to ControlCount - 1 do
  begin
    if Controls[i].Visible then
    begin
      aRect := Controls[i].BoundsRect;
      OffsetRect( aRect, clientorigin.x - left, clientorigin.y - top );
      tempRegion := CreateRectRgnIndirect( aRect );
      if frmRegion = 0 then
        frmRegion := tempRegion
      else
      begin
        CombineRgn( frmRegion, frmRegion, tempRegion, RGN_OR );
        DeleteObject( tempRegion );
      end;
    end;
  end;

  //Borde superior
  Arect.TopLeft := Point(0, 0);
  Arect.BottomRight := Point(ClientWidth, 1);
  tempRegion := CreateRectRgnIndirect( aRect );
  CombineRgn( frmRegion, frmRegion, tempRegion, RGN_OR );
  DeleteObject( tempRegion );

  //Borde inferior
  Arect.TopLeft := Point(0, ClientHeight-1);
  Arect.BottomRight := Point(ClientWidth, ClientHeight);
  tempRegion := CreateRectRgnIndirect( aRect );
  CombineRgn( frmRegion, frmRegion, tempRegion, RGN_OR );
  DeleteObject( tempRegion );

  //Borde izquierdo
  Arect.TopLeft := Point(0, 0);
  Arect.BottomRight := Point(1, ClientHeight);
  tempRegion := CreateRectRgnIndirect( aRect );
  CombineRgn( frmRegion, frmRegion, tempRegion, RGN_OR );
  DeleteObject( tempRegion );

  //Borde derecho
  Arect.TopLeft := Point(ClientWidth-1, 0);
  Arect.BottomRight := Point(ClientWidth, ClientHeight);
  tempRegion := CreateRectRgnIndirect( aRect );
  CombineRgn( frmRegion, frmRegion, tempRegion, RGN_OR );
  DeleteObject( tempRegion );

  //ahora lo hacemos semitransparente
  i:=1;
  Arect.Left := 1;
  Arect.Right := Width -1;
  while i < Height do
  begin
    Arect.Top := i;
    Arect.Bottom := i+1;
    tempRegion := CreateRectRgnIndirect( aRect );
    CombineRgn( frmRegion, frmRegion, tempRegion, RGN_OR );
    DeleteObject( tempRegion );
    i := i+3;
  end;

  SetWindowRgn( handle, frmRegion, true );

  Canvas.Pen.Color := clBlack;
  Canvas.Pen.Style := psSolid;
  Canvas.Rectangle(0,0,ClientWidth, ClientHeight);
end;

end.

La verdad, la parte de los bordes no recuerdo para que está puesta ...

pjexposito 31-01-2007 17:30:20

Gracias pero no era eso lo que buscaba exactamente.

Lo que busco es algo así

seoane 31-01-2007 18:05:55

1 Archivos Adjunto(s)
Creo que esto es lo que buscas, pulsa sobre el botón activar para oscurecer y el botón salir para volver al formulario.

pjexposito 31-01-2007 18:09:25

Exacto. Eso era lo que buscaba.

Gracias

jacobobo 17-12-2010 05:07:11

alguien tiene el archivo zip
 
hola que tal, el archivo zip que esta en el ejemplo anterior ya no funciona alguien lo tiene? para poder descargarlo. gracias.

cipd8877 02-02-2011 19:32:03

Que onda, pudiste encontrar el programa de ejemplo??


La franja horaria es GMT +2. Ahora son las 10:17:08.

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