窗口上有一个按钮和一个panel控件,panel控件颜色是红色的,按钮代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
  h: HWND;
  FormStyle: Integer;
begin
  h:=form1.Handle;
  FormStyle := GetWindowLong(h, GWL_EXSTYLE);
  SetWindowLong(h, GWL_EXSTYLE, FormStyle or WS_EX_LAYERED);
  SetLayeredWindowAttributes(h, 0, 100, LWA_ALPHA);
end;
运行后,点击按钮,窗口按照ALPHA半透明,但是panel也相应的半透明了,有没有办法让窗口半透明,但是窗口中的panel不透明啊,

解决方案 »

  1.   

    不过有很多实现半透明效果的,就是类似Win 7的效果。
      

  2.   

    观注这个话题,Delphi中窗体有一个属性可以控制透明效果,你用那个属性试试
      

  3.   

    设置窗体透明后,整个绘画机制是由操作系统参与的,不能对该窗口的独立控件做不透明(至少我还没有找到解决办法)。替代方案
    A.使用两个或多个窗口叠加,底层窗口使用Alpha效果,控件窗口不使用Alpha。
    B.使用GDI/GDI+控制窗口绘制,在内存中绘制象素级带Alpha信息的图形后,再UpdateLayeredWindow到窗口
      

  4.   


    //窗体全透明,但窗体上的控件不透明
    procedure TForm1.Button1Click(Sender: TObject);
     Var
       frmRegion, tempRegion: HRGN;
       i: Integer;
       Arect: TRect;
     Begin
       frmRegion := 0;
       For I:= 0 To ControlCount - 1 Do 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;
       tempregion :=
         CreateRectRgn( 0, 0, Width,
                        GetSystemMetrics( SM_CYCAPTION )+
                        GetSystemMetrics( SM_CYSIZEFRAME )+
                        GetSystemMetrics( SM_CYMENU ) * Ord(Menu <> Nil));   CombineRgn( frmRegion, frmRegion, tempRegion, RGN_OR );
       DeleteObject( tempRegion );
       SetWindowRgn( handle, frmRegion, true );
     End;