• delphi 特殊窗体


    delphi 窗体阴影

    放窗体创建事件里面

    SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or CS_DROPSHADOW);

    采用API画圆角的窗体!

       圆角窗体一(四角都是圆角的)采用CreateRoundRectRgn,SetWindowRgn函数就可实现!函数参数如下:

     函数一:

      int SetWindowRgn;(HWND hWnd, HRGN hRgn, BOOL bRedraw)

      参数

      hWnd     

           [在] 对窗户区域将被设定的窗户的柄。

      hRgn

      [在] 对一个区域的柄。 功能将窗户的窗户区域设定为这一个区域。

      如果 hRgn 是无效力的,功能将窗户区域设定为零。

      bRedraw

      [在] 叙述系统是否在设定窗户区域之后重划窗户。 如果 bRedraw 是真实的,系统这么做; 另外,它不。

      典型地, 你设定 bRedraw 到真实的如果窗户是看得见的。

      返回值

      如果功能成功,回返价值是非零。

      如果功能失败,回返价值是零。

    函数二:

      HRGN CreateRoundRectRgn(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nWidthEllipse, int nHeightEllipse);

    参数表 参数 类型及说明:

      X1,Y1 Long,矩形左上角的X,Y坐标

      X2,Y2 Long,矩形右下角的X,Y坐标

      X3 Long,圆角椭圆的宽。其范围从0(没有圆角)到矩形宽(全圆)

      Y3 Long,圆角椭圆的高。其范围从0(没有圆角)到矩形高(全圆)

    画一个圆角窗体就用以上两个函数,实例:

      SetWindowRgn(handle, CreateRoundRectRgn(0, 0, self.Width, self.Height, 16, 16), True);  //即可画一个圆角窗体

    圆角窗体二(指点画窗体的某一只角为圆角):

    采用函数:CreateRoundRectRgn SetwindowRgn ,CreateRectRgn  CombineRgn  

    前面两个函数上面已经介绍,看看下面的两个参数吧!

    函数三

    Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

      [说明]

      创建一个由点X1,Y1和X2,Y2描述的矩形区域

      [参数表]

      X1,Y1 ---------- Long,矩形左上角X,Y坐标

      X2,Y2 ---------- Long,矩形右下角X,Y坐标

      [返回值]

      Long,执行成功为区域句柄,失败则为零

    函数二

    Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long

    [说明]

      将两个区域组合为一个新区域

      [参数表]

      hDestRgn ------- Long,包含组合结果的区域句柄

      hSrcRgn1 ------- Long,源区域1

      hSrcRgn2 ------- Long,源区域2

      nCombineMode --- Long,组合两区域的方法。可设为下述常数

      RGN_AND

      hDestRgn被设置为两个源区域的交集(集合中的交集)

      RGN_COPY

      hDestRgn被设置为hSrcRgn1的拷贝

      RGN_DIFF

      hDestRgn被设置为hSrcRgn1与hSrcRgn2相减后的区域(集合中的差集)

      RGN_OR hDestRgn被设置为两个区域的并集(集合中的并集)

      RGN_XOR

      hDestRgn被设置为两个区域的异或操作后的区域(集合中的异或操作)

      [返回值]

      Long,下列常数之一: 

      COMPLEXREGION:区域有互相交叠的边界 

      SIMPLEREGION:区域边界没有互相交叠 

      NULLREGION:区域为空 

      ERRORAPI:不能创建组合区域

    实例:

    var

      Reg1,Reg2:  THandle;

    begin

      Reg1 := CreateRoundRectRgn(0, 0, self.Width, self.Width, 16, 16);  //在窗体指定的位置上创建一个圆角句型区域

      Reg2 := CreateRectRgn(20, 20, self.Width, self.Width);     //在窗体指定的位置上创建一个矩形区域

      CombineRgn(Reg1, Reg1, Reg2, RGN_OR);   //将Reg1,Reg2两个区域进行合并,Reg1得到Reg1,reg2的集合并集!

      SetwindowRgn(handle, Reg1, True);    //将以上创建的区域设定成窗体的区域

    end;

    以上代码是将一个窗体的上面两只角画成圆角,窗体下面的两只角还是直角!

  • 相关阅读:
    简单的javascript抽奖程序
    Linux 二层协议架构组织
    常用正则表达式总结
    很好的矩阵覆盖问题
    很好的求幂的题目
    不错的题目-n个数连接得到的最大值
    netstat命令介绍-要用熟
    一次完整的http事务
    Apache vs. Nginx
    Python学习-生成器
  • 原文地址:https://www.cnblogs.com/blogpro/p/11446733.html
Copyright © 2020-2023  润新知