2012-04-11 15 views
11

如何在保持組件可見的情況下使表單透明?

我需要製作一個包含帶有透明區域的PNG圖像的窗體。表格必須是不可見的,而圖片必須保持可見並且透明區域必須保持透明。問題是圖像透明度。在這種情況下,主窗體是透明的,不可見的,而所有的組件/控件保持可見。但是,PNG圖像的透明區域不保持透明度。如何保持透明度?

procedure MakeTransparent; 
    var 
    AControl: TControl; 
    A, Margin, X, Y, CtlX, CtlY: Integer; 
    begin 
    Margin := (Width - ClientWidth) div 2; 
    FullRgn := CreateRectRgn(0, 0, Width, Height); 
    X   := Margin; 
    Y   := Height - ClientHeight - Margin; 
    ClientRgn := CreateRectRgn(X, Y, X + ClientWidth, Y + ClientHeight); 
    CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF); 
    for A := 0 to ControlCount - 1 do 
    begin 
    AControl := Controls[A]; 
    if (AControl is TWinControl) or (AControl is TGraphicControl) then with  AControl do 
    begin 
    if Visible then 
    begin 
     CtlX := X + Left; 
     CtlY := Y + Top; 
     CtlRgn := CreateRectRgn(CtlX, CtlY, CtlX + Width, CtlY + Height); 
     CombineRgn(FullRgn, FullRgn, CtlRgn, RGN_OR); 
    end; 
    end; 
    end; 
    SetWindowRgn(Handle, FullRgn, True); 
    end; 



    procedure UndoTransparency; 
    begin 
    FullRgn := CreateRectRgn(0, 0, Width, Height); 
    CombineRgn(FullRgn, FullRgn, FullRgn, RGN_COPY); 
    SetWindowRgn(Handle, FullRgn, True); 
    end; 
+1

只是一捅:-)你確定的圖像是在第一張截圖真正透明? – TLama 2012-04-11 00:42:06

+0

100%透明:) – 2012-04-11 00:44:53

+5

您不是在創建透明表單,而是在更改表單的形狀。而是使用窗體的'Color','TransparentColor'和'TransparentColorValue'屬性,並將png加載到'TImage',就完成了! – 2012-04-11 00:58:48

回答

9

只是一個按鈕,你的表格放棄這一代碼,你會看到你的形式與PNG變得透明:如果您需要部分透明

procedure SetTransparent(Aform: TForm; AValue: Boolean); 
begin 
    Aform.TransparentColor := AValue; 
    Aform.TransparentColorValue := Aform.Color; 
end; 

procedure TForm2.Button1Click(Sender: TObject); 
begin 
    SetTransparent(Self, True); 
end; 
3

,然後TransparentColor/TransparentColorValue不會幫幫我。

您將需要使用兩種完全不同的方法NonAero(或DisabledAero)和EnabledAero情況。

當航空啓用,你將不得不使用這樣的方法:http://delphihaven.wordpress.com/category/glass/

當Aero是禁用或不存在,那麼你將不得不使用某種黑客:

  1. 集的AlphaBlend: =真;
  2. 桌面WIA的BitBlt +的GetDC + GetDesktopWindow的製作截圖。您的窗口將不會顯示在該屏幕截圖上。
  3. 畫上有相同的位置和大小的表格截圖你的一部分。事實上,你將繪製任何背後的表單,這就是爲什麼它看起來像透明。
  4. 重複動作週期性地2和3。
相關問題