zoukankan      html  css  js  c++  java
  • Delphi做异型窗体PNG透明

    {*******************************************************}
    { }
    { 异形窗口 }
    { }
    { 2009.12.4 王 锐 }
    { }
    {*******************************************************}

    unit UnitYXForm;

    interface
    uses
    Windows, Forms, Classes, Graphics;

    //从文件加载PNG
    procedure YXForm_FromFile(AForm : TForm; AFileName : String);
    //从资源加载PNG
    procedure YXForm_FromResource(AForm : TForm; ResName : String; ResType : PWideChar; Instance : HINST = 0);
    //从图像对象加载
    procedure YXForm_FromGraphic(AForm : TForm; AGraphic : TGraphic);

    implementation

    procedure YXForm_FromFile(AForm : TForm; AFileName : String);
    var
    wic : TWICImage;
    begin
    wic := TWICImage.Create;
    wic.LoadFromFile(AFileName);
    YXForm_FromGraphic(AForm, wic);
    wic.Free;
    end;

    procedure YXForm_FromResource(AForm : TForm; ResName : String;ResType : PWideChar; Instance : HINST);
    var
    wic : TWICImage;
    r : TResourceStream;
    begin
    if Instance = 0 then
    Instance := HInstance;
    r := TResourceStream.Create(Instance, ResName, ResType);
    wic := TWICImage.Create;
    wic.LoadFromStream(r);

    YXForm_FromGraphic(AForm, wic);
    wic.Free;
    r.Free;
    end;

    procedure YXForm_FromGraphic(AForm : TForm; AGraphic : TGraphic);
    var
    ptDst, ptSrc: TPoint;
    Size: TSize;
    BlendFunction: TBlendFunction;
    bmp : TBitmap;
    begin
    bmp := TBitmap.Create;
    bmp.Assign(AGraphic);
    ptDst := Point(AForm.Left, AForm.Top);
    ptSrc := Point(0, 0);
    Size.cx := AGraphic.Width;
    Size.cy := AGraphic.Height;

    BlendFunction.BlendOp := AC_SRC_OVER;
    BlendFunction.BlendFlags := 0;
    BlendFunction.SourceConstantAlpha := $FF; // 透明度
    BlendFunction.AlphaFormat := AC_SRC_ALPHA;

    SetWindowLong(AForm.Handle, GWL_EXSTYLE, GetWindowLong(AForm.Handle,
    GWL_EXSTYLE) or WS_EX_LAYERED);
    UpdateLayeredWindow(AForm.Handle,
    AForm.Canvas.Handle,
    @ptDst,
    @Size,
    bmp.Canvas.Handle,
    @ptSrc,
    0,
    @BlendFunction,
    ULW_ALPHA);
    bmp.Free();
    end;

    end.

    想要用的时候很简单,举个例子:
    ff := TForm2.Create(Self);
    YXForm_FromFile(ff, 'c:a.png');
    ff.Show;

    实现动画也很容易.只要不停地YXForm_FromFile(ff, 'c:a.png');调用一套动作PNG就可以了.


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wr960204/archive/2009/12/04/4941660.aspx

  • 相关阅读:
    layui弹出层使用方法之最详解
    rem实现简单的响应式布局
    layui数据库查询及数据处理
    header头设置解决 “已拦截跨源请求:同源策略禁止读取位于 http://back/test/test 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。”
    mysql多表联查
    centos 7 安装独立环境 tcp6占用80端口解决方法
    JS for_of遍历数组
    通过几张图搞定json数据处理
    MQTT Broker mosquitto
    前言
  • 原文地址:https://www.cnblogs.com/blogpro/p/11446639.html
Copyright © 2011-2022 走看看