关于窗体透明的做法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于窗体透明的做法相关的知识,希望对你有一定的参考价值。

1.在Delphi中,设置窗体的AlphaBlend := true;AlphaBlendValue := 0-255; AlphaBlendValue越小窗体的透明度就越高。这种方法将会使窗体和窗体中控件都变成透明。
2.在Delphi中,设置TransparentColor := True与TransparentColorValue := TForm.Color, 则窗体变成透明,控件不透明。
3.使用API控制指定区域透明,如下,通过不绘制窗体四角的方法,来使四角变得圆滑透明,可在窗体Resize时调用。

procedure TFormPadMain.SetFormTransparent;
var
Rgn: HRGN;
begin
Rgn := CreateRoundRectRgn(0, 0, Width, Height, 11, 11);
SetWindowRgn(Handle, Rgn, True);
end;

-----------------------------------------------------------------------------------------------------------

DELPHI实现透明以及半透明窗体

上一篇《在DELPHI中获得磁盘容量》
下一篇《在DELPHI中编程生成ACCESS数据库文件并创建指向此连接的ODBC数据源》

  在QQ中,我可以调节面板的透明度。如果我们自己编程,应该如何实现呢?
   (一)半透明窗体
   在windows2000以及后续产品中下增加了一些API,可以轻易的实现半透明的窗体,源程序如下:
  interface
  uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
  const//定义常量
   WS_EX_LAYERED = $80000;
   AC_SRC_OVER = $0;
   AC_SRC_ALPHA = $1;
   AC_SRC_NO_PREMULT_ALPHA = $1;
   AC_SRC_NO_ALPHA = $2;
   AC_DST_NO_PREMULT_ALPHA = $10;
   AC_DST_NO_ALPHA = $20;
   LWA_COLORKEY = $1;
   LWA_ALPHA = $2;
   ULW_COLORKEY = $1
   ULW_ALPHA = $2
   ULW_OPAQUE = $4
  type
   TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   private
   { Private declarations }
   public
   { Public declarations }
   end;
  function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; bAlpha:byte; dwFlags:longint ):longint; stdcall; external user32;//函数声明
  var
  Form1: TForm1;
  implementation
  {$R *.DFM}
  procedure TForm1.FormCreate(Sender: TObject);
  var l:longint;
  begin
   l:=getWindowLong(Handle, GWL_EXSTYLE);
   l := l Or WS_EX_LAYERED;
   SetWindowLong (handle, GWL_EXSTYLE, l);
   SetLayeredWindowAttributes (handle, 0, 180, LWA_ALPHA);
  //第二个参数是指定透明颜色
  //第二个参数为0则使用第四个参数设置alpha值,从0到255
  end;
  end.
   (二) 透明窗体的实现
   将一个FORM变成透明的实质性手段就是拦截CMEraseBkgnd消息。
  unit Utransform; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
  type TForm1 = class(TForm)
   private { Private declarations }
   public { Public declarations }
   PROCEDURE CMEraseBkgnd(var Message:TWMEraseBkgnd);Message WM_ERASEBKGND;
  end;
  var Form1: TForm1;
  implementation
  {$R *.DFM}
  procedure TForm1.CMEraseBkgnd(var Message: TWMEraseBkgnd);
  begin
  brush.style:=bsClear;
  end;
  procedure TForm1.FormCreate(Sender: TObject);
  begin
   Form1.Brush.Style := bsClear;//如果只拦截消息,没有这里的设置,窗内的标题栏一样会显示 Form1.BorderStyle := bsNone
  end;
  procedure TForm1.BitBtn1Click(Sender: TObject);
  begin
   close;
  end;(王朝网络 wangchao.net.cn)

以上是关于关于窗体透明的做法的主要内容,如果未能解决你的问题,请参考以下文章

关于主题名称的最佳做法是啥

父视图透明而内容不透明

求助,关于Qt的窗口半透明,窗口上的空间不透明

关于内存中密码的常见做法

关于实现无限循环的做法

WinForm修改程序图标的做法