// Mit dem folgenden Code kann man Formen samt aller Komponenten
// mittels "Alpha Blending" transparent darstellen.

// Querverweis:
eine Farbe der Form transparent darstellen

// ACHTUNG! Die Funktion ist erst ab W2000 verfügbar!

// Getestet mit D4 unter XP

// Variante 1 (dynamisch)
const 
  LAYERED = 524288; 
 
procedure Transparenz(h: THandle; Alpha: Byte); 
var 
  m: Thandle; 
  f: function(hwnd: HWND; crKey: DWord; bAlpha: Byte; 
    dwFlags: Longint): Longint; stdcall; 
begin 
  m := LoadLibrary('User32.dll'); 
  if m <> 0 then begin 
    @f := GetProcAddress(m, 'SetLayeredWindowAttributes'); 
    if @f <> nil then begin 
      SetWindowLong(h, GWL_EXSTYLE, GetWindowLong(h, GWL_EXSTYLE) or LAYERED); 
      f(h, 0, Alpha, 2); 
      freelibrary(m); 
    end; 
  end; 
end; 
 
procedure Normal(h: THandle); 
begin 
  SetWindowLong(h, GWL_EXSTYLE, GetWindowLong(h, GWL_EXSTYLE) 
    and not LAYERED); 
end; 
 
// Tranzparenz einstellen 
procedure TForm1.SpeedButton1Click(Sender: TObject); 
begin 
  Transparenz(handle, 175);  // 255 = nicht transparent; 0 = total durchsichtig 
end; 
 
// Tranzparenz abschaltehn  
procedure TForm1.SpeedButton2Click(Sender: TObject); 
begin 
  Normal(handle); 
end;

 

// -----------------------------------------------------------------

// Variante 2 (statisch)

unit transp; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
  StdCtrls; 
 
type 
  TForm1 = class(TForm) 
    Button1: TButton; 
    Button2: TButton; 
    procedure Button1Click(Sender: TObject); 
    procedure Button2Click(Sender: TObject); 
  private 
    { Private-Deklarationen } 
  public 
    { Public-Deklarationen } 
  end; 
 
var 
  Form1: TForm1; 
 
function SetLayeredWindowAttributes(const hWnd: HWND; crKey: DWord; 
  bAlpha: Byte; dwFlags: Longint): Integer; stdcall; external 'User32.dll'; 
 
implementation 
 
{$R *.DFM} 
 
const 
  LAYERED = 524288; 
 
procedure Transparenz(h: THandle; Alpha: Byte); 
begin 
  SetWindowLong(h, GWL_EXSTYLE, GetWindowLong(h, GWL_EXSTYLE) or LAYERED); 
  SetLayeredWindowAttributes(h, 0, Alpha, 2); 
end; 
 
procedure Normal(h: THandle); 
begin 
  SetWindowLong(h, GWL_EXSTYLE, GetWindowLong(h, GWL_EXSTYLE) 
    and not LAYERED); 
end; 
 
// Tranzparenz einstellen 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  Transparenz(handle, 175); // 255 = nicht transparent; 0 = total durchsichtig 
end; 
 
// Tranzparenz abschaltehn 
procedure TForm1.Button2Click(Sender: TObject); 
begin 
  Normal(handle); 
end; 
 
end. 
 

// -----------------------------------------------------------------

// Variante 3 für höhere Delphi-Versionen

// Hier ein Beispiel zum Einblenden eines Formulars.

// Getestet mit D2010 unter W7
var first: Boolean;
procedure TForm1.FormActivate(Sender: TObject); 
begin 
  if first then 
  begin 
    first := False; 
    AlphaBlendValue := 0; 
    repeat 
      AlphaBlendValue := AlphaBlendValue + 17; 
      application.ProcessMessages; 
      sleep(25); // z.B. 
    until AlphaBlendValue > 254; 
  end; 
end;
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  first := True; 
  AlphaBlend := true; 
end;

 


Zugriffe seit 6.9.2001 auf Delphi-Ecke