как сделать форму прозрачной, когда включен стиль VCL?

Я использую следующий код, чтобы сделать форму прозрачной, но когда в приложении включен стиль VCL, форма закрашивается фоновым цветом стиля VCL вместо того, чтобы быть прозрачной.

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure CreateParams(var Params:TCreateParams); override;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
 inherited CreateParams(Params);
 Params.ExStyle := WS_EX_TRANSPARENT or WS_EX_TOPMOST;
 //Params.ExStyle := Params.ExStyle or WS_EX_LAYERED;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Brush.Style:=bsClear;
 BorderStyle:=bsNone;
 //SetLayeredWindowAttributes(Handle, 0, 230, $00000002);
end;

К вашему сведению, код работает нормально, если стиль VCL установлен на Windows.

Существует ли другой способ сделать форму прозрачной, чтобы обойти эту проблему?

9
задан RRUZ 20 December 2011 в 12:46
поделиться