请问大家,要把一个窗体设置为透明窗体,但这个窗体内的按钮或者标签等不要变成透明的,如何来实现啊,谢谢,

解决方案 »

  1.   

    procedure TForm1.FormCreate(Sender: TObject);
    var
      dwExStyle : DWORD;
    begin
      dwExStyle := GetWindowLong(Handle, GWL_EXSTYLE);
      dwExStyle := dwExStyle or WS_EX_TRANSPARENT;
      SetWindowLong(Handle, GWL_EXSTYLE, dwExStyle);
    end;
      

  2.   

    var
      FullRgn, ClientRgn, CtlRgn : THandle;procedure TForm1.DoInvisible;
    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);
      deleteobject(fullrgn);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
       DoInvisible;
    end;