• 关于窗体透明的做法


    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)

  • 相关阅读:
    OOAD-2 UML建模、类、接口、类图的详细介绍
    OOAD-1 GOF中的23种设计模式的分类和功能
    java核心技术第四章疑问点
    数据结构中的遇到的一些小知识整理
    springboot中一次坑爹的打包体验
    mybatis中@param的使用与否
    mybatis 防止sql注入
    java窗口
    java异常处理
    第三次上级作业
  • 原文地址:https://www.cnblogs.com/findumars/p/5226240.html
Copyright © 2020-2023  润新知