⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 elibtypes.pas

📁 支持库类 / 模块控件 / 支持库类 eLIB++支持库 源代码 Delphi
💻 PAS
📖 第 1 页 / 共 5 页
字号:
      8: (m_data : T_UNIT_PROPERTY_VALUE__m_data); // UD_PIC、UD_ICON、UD_CURSOR、UD_MUSIC、UD_FONT、UD_CUSTOMIZE、UD_IMAGE_LIST

      {	UNIT_PROPERTY_VALUE ()
	
		memset ((LPBYTE)this, 0, sizeof (UNIT_PROPERTY_VALUE));
	}
  end;

  // 通知某属性(非UD_CUSTOMIZE类别属性)数据被用户修改,需要根据该修改相应更改内部数据及外形,如果确实需要重新创建才能修改单元外形,请返回真。注意:必须进行所传入值的合法性校验。
  pFN_NOTIFY_PROPERTY_CHANGED = function (
    hUnit          : LongWord;
    nPropertyIndex : Integer;
    pPropertyValue : PUNIT_PROPERTY_VALUE;  // 用作修改的相应属性数据。
    ppszTipText    : PPChar = nil           // 目前尚未使用。LPTSTR*
  ) : LongBool; stdcall;

  // 取某属性数据到pPropertyValue中,成功返回真,否则返回假。注意:如果在设计时(由调用PFN_CREATE_UNIT时的blInDesignMode参数决定),pPropertyValue必须返回所存储的值。如果在运行时(blInDesignMode为假),必须返回实际的当前实时值。比如说,编辑框窗口单元的“内容”属性,设计时必须返回内部所保存的值,而运行时就必须调用GetWindowText去实时获取。
  pFN_GET_PROPERTY_DATA = function (
    hUnit          : LongWord;
    nPropertyIndex : Integer;
    pPropertyValue : pUNIT_PROPERTY_VALUE  // 用作接收欲读取属性的数据。
  ) : LongBool; stdcall;

  // 返回本窗口单元的全部属性数据,由该窗口单元的实现代码自行设计格式将所有属性数据组合到一起。此窗口单元的PFN_CREATE_UNIT接口必须能够正确解读此数据。
  pFN_GET_ALL_PROPERTY_DATA = function (hUnit : LongWord) : LongWord; stdcall;  // 在Delphi中, HGLOBAL=THandle=LongWord;

  // 询问单元是否需要指定的按键信息,如果需要,返回真,否则返回假。
  pFN_IS_NEED_THIS_KEY = function (hUnit : LongWord; wKey : Word) : LongBool; stdcall;

const

  UNIT_BMP_SIZE       = 24;       // 单元标志位图的宽度和高度。
  UNIT_BMP_BACK_COLOR = $C0C0C0;  // 单元标志位图的背景颜色(灰色): RGB(192,192,192)=$C0C0C0=12632256

type
  //////////////////////////////////////////////////////////////////////////////
  // “库定义数据类型” LIB_DATA_TYPE_INFO

  pLIB_DATA_TYPE_INFO = ^LIB_DATA_TYPE_INFO;
  LIB_DATA_TYPE_INFO  = record
    m_szName      : PChar;     // 名称
    m_szEGName    : PChar;     // 英文名称,可为空或nil
    m_szExplain   : PChar;     // 详细解释,如无则可为nil

    m_nCmdCount   : Integer;   // 本数据类型成员方法的数目(可为0)
    m_pnCmdsIndex : ^Integer;  // 顺序记录本类型中所有成员方法命令在支持库命令表中的索引值,可为NULL。
    m_dwState     : LongWord;  // 状态值,见下面的说明及常量定义

    // 以下成员只有在为窗口单元、菜单时才有效。
    m_dwUnitBmpID    : LongWord;       // 指定在支持库中的单元图像资源ID(注意不同于上面的图像索引),0为无。尺寸必须为24*24 ,背景颜色为RGB(192,192,192) 。
    m_nEventCount    : Integer;        // 本单元的事件数目
    m_pEventBegin    : PEVENT_INFO ;   // 定义本单元的所有事件
    m_nPropertyCount : Integer;        // 本单元的属性数目
    m_pPropertyBegin : pUNIT_PROPERTY; // 定义本单元的所有属性

    // 用作提供本窗口单元的所有接口。
    m_pfnGetInterface : pFN_GET_INTERFACE;

    // 以下成员只有在不为窗口单元、菜单时才有效。
    m_nElementCount : Integer;                 // 本数据类型中子成员的数目(可为0)。如为窗口、菜单单元,此变量值必为0。
    m_pElementBegin : pLIB_DATA_TYPE_ELEMENT;  // 指向子成员数组的首地址。

    ////////////////////////////////////////////////////////////////////////////
    //
    // 其中,m_dwState 可以为以下常量值的组合:
    //   LDT_IS_HIDED             = (1 shl 0);  // 本类型是否为隐含类型(即不能由用户直接用作定义的类型,如被废弃但为了保持兼容性又要存在的类型)
    //   LDT_IS_ERROR             = (1 shl 1);  // 本类型在本库中不能使用,具有此标志一定隐含。即使具有此标志,本类型的类型数据也必须完整定义。
    //   LDT_WIN_UNIT             = (1 shl 6);  // 是否为窗口单元,如此标志置位则m_nElementCount必为0
    //   LDT_IS_CONTAINER         = (1 shl 7);  // 是否为容器型窗口单元,如有此标志,LDT_WIN_UNIT必须置位。
    //   LDT_IS_FUNCTION_PROVIDER = (1 shl 15); // 是否为仅用作提供功能的窗口单元(如时钟),如此标志置位则LDT_WIN_UNIT必置位。具有此标志的单元在运行时无可视外形。
    //   LDT_CANNOT_GET_FOCUS     = (1 shl 16); // 仅用作窗口单元,如此标志置位则表示此单元不能接收输入焦点,不能TAB键停留。
    //   LDT_DEFAULT_NO_TABSTOP   = (1 shl 17); // 仅用作窗口单元,如此标志置位则表示此单元可以接收输入焦点,但默认不停留TAB键,本标志与上标志互斥。
    //   LDT_BAR_SHAPE            = (1 shl 20); // 是否为需要自调整位置或尺寸的条状窗口单元(如工具条、状态条等),对于具有此标志的单元,所在窗口尺寸改变后易语言运行时环境会自动发送给WU_SIZE_CHANGED消息。注意:条状窗口单元如果需要自动顶部对齐必须具有 CCS_TOP 窗口风格,如果需要自动底部对齐必须具有 CCS_BOTTOM 窗口风格。
    //
    // 对于 m_dwState具有LDT_BAR_SHAPE标志的单元,所在窗口尺寸改变后易语言运行时环境会自动发送给WU_SIZE_CHANGED消息。
    // 注意,条状窗口单元如果需要自动顶部对齐必须具有CCS_TOP窗口风格,如果需要自动底部对齐必须具有CCS_BOTTOM窗口风格。
    //
    ////////////////////////////////////////////////////////////////////////////
  end;

const
  //////////////////////////////////////////////////////////////////////////////
  // 以下常量用于LIB_DATA_TYPE_INFO结构的m_dwState成员中

  LDT_IS_HIDED             = (1 shl 0);  // 本类型是否为隐含类型(即不能由用户直接用作定义的类型,如被废弃但为了保持兼容性又要存在的类型)
  LDT_IS_ERROR             = (1 shl 1);  // 本类型在本库中不能使用,具有此标志一定隐含。即使具有此标志,本类型的类型数据也必须完整定义。

  LDT_WIN_UNIT             = (1 shl 6);  // 是否为窗口单元,如此标志置位则m_nElementCount必为0
  LDT_IS_CONTAINER         = (1 shl 7);  // 是否为容器型窗口单元,如有此标志,LDT_WIN_UNIT必须置位。

  LDT_IS_FUNCTION_PROVIDER = (1 shl 15); // 是否为仅用作提供功能的窗口单元(如时钟),如此标志置位则LDT_WIN_UNIT必置位。具有此标志的单元在运行时无可视外形。
  LDT_CANNOT_GET_FOCUS     = (1 shl 16); // 仅用作窗口单元,如此标志置位则表示此单元不能接收输入焦点,不能TAB键停留。
  LDT_DEFAULT_NO_TABSTOP   = (1 shl 17); // 仅用作窗口单元,如此标志置位则表示此单元可以接收输入焦点,但默认不停留TAB键,本标志与上标志互斥。

  LDT_BAR_SHAPE            = (1 shl 20); // 是否为需要自调整位置或尺寸的条状窗口单元(如工具条、状态条等),对于具有此标志的单元,所在窗口尺寸改变后易语言运行时环境会自动发送给WU_SIZE_CHANGED消息。注意:条状窗口单元如果需要自动顶部对齐必须具有CCS_TOP窗口风格,如果需要自动底部对齐必须具有CCS_BOTTOM窗口风格。

  //////////////////////////////////////////////////////////////////////////////

type

  //////////////////////////////////////////////////////////////////////////////
  // “库常量”数据结构 Lib_Const_Info

  pLIB_CONST_INFO =^LIB_CONST_INFO;
  LIB_CONST_INFO  = record

    m_szName       : PChar;     // 常量名称
    m_szEGName     : PChar;     // 常量英文名称,可以为空或nil
    m_szExplain    : PChar;     // 详细解释

    m_shtReserved  : Smallint;  // 必须为 1 。
    m_shtType      : Smallint;  // 常量类型,取值为CT_NULL(0),CT_NUM(1),CT_BOOL(2),CT_TEXT(3)之一,见下面的说明和常量定义
    m_szText       : PChar;	// 文本(当m_shtType取值为CT_TEXT时)
    m_dbValue      : double;	// 数值(当m_shtType取值为CT_NUM、CT_BOOL时)
    ////////////////////////////////////////////////////////////////////////////
    // 其中,m_shtType 可以取以下常量值之一:
    //   CT_NULL  = 0;  // 空值
    //   CT_NUM   = 1;	// 数值型,如: 3.14159
    //   CT_BOOL  = 2;	// 逻辑型,如: 1       ( 1代表'真'; 0代表'假')
    //   CT_TEXT  = 3;	// 文本型,如: 'abc'
    ////////////////////////////////////////////////////////////////////////////
  end;

const
  //////////////////////////////////////////////////////////////////////////////
  // 以下常量在 LIB_CONST_INFO 结构中用到

  CT_NULL  = 0;  // 空值
  CT_NUM   = 1;	 // 数值型,如: 3.14159
  CT_BOOL  = 2;	 // 逻辑型,如: 1       ( 1代表'真'; 0代表'假')
  CT_TEXT  = 3;	 // 文本型,如: 'abc'

  //////////////////////////////////////////////////////////////////////////////

type
  //////////////////////////////////////////////////////////////////////////////
  // 常用数据结构。

  // 标识窗口单元
  pMUNIT = ^MUNIT;
  MUNIT  = record
    m_dwFormID  : LongWord;
    m_dwUnitID  : Longword;
  end;

  // 临时结构,仅在MDATA_INF中用于定义m_Value成员
  T_MDATA_INF_Data = packed record       // Note: packed record, it's important.
    case Integer of
       // 第一部分。注意:当对应参数具有AS_RECEIVE_VAR或AS_RECEIVE_VAR_ARRAY或AS_RECEIVE_VAR_OR_ARRAY标志定义时将使用下面的第二部分。
    0: ( m_byte          : Byte);        // SDT_BYTE 数据类型的数据,下同。
    1: ( m_short         : SmallInt);    // SDT_SHORT
    2: ( m_int           : Integer);     // SDT_INT
    3: ( m_int64         : Int64);       // SDT_INT64
    4: ( m_float         : Single);      // SDT_FLOAT
    5: ( m_double        : Double);      // SDT_DOUBLE
    6: ( m_date          : TDateTime);   // SDT_DATE_TIME   (在VC中: typedef double DATE; 在Delphi中: type TDateTime = type Double;)
    7: ( m_bool          : LongBool);    // SDT_BOOL  (在VC中: typedef int BOOL;)
    8: ( m_pText         : PChar);       // SDT_TEXT,经过系统预处理,即使是空文本,此指针值也不会为nil,以便于处理。指针所指向数据的格式见前面的描述。!!!为了避免修改到常量段(m_pText有可能会指向易程序常量段区域)中的数据,只可读取而不可更改其中的内容,下同。
    9: ( m_pBin          : PByte);       //??? LPBYTE;  // SDT_BIN,经过系统预处理,即使是空字节集,此指针值也不会为nil,以便于处理。指针所指向数据的格式见前面的描述。!!!只可读取而不可更改其中的内容。
    10:( m_dwSubCodeAdr  : LongWord);    // SDT_SUB_PTR,为子程序代码地址指针。
    11:( m_unit          : MUNIT);       // 窗口单元、菜单数据类型的数据。
    12:( m_pCompoundData : Pointer);     // 复合数据类型数据指针,指针所指向数据的格式见前面的描述。!!! 只可读取而不可更改其中的内容。
    13:( m_pAryData      : Pointer);     // 数组数据指针,指针所指向数据的格式见前面的描述。注意如果为文本或字节集数组,则成员数据指针可能为NULL。!!! 只可读取而不可更改其中的内容。

       // 第二部分。为指向变量地址的指针,仅当参数具有AS_RECEIVE_VAR或AS_RECEIVE_VAR_ARRAY或AS_RECEIVE_VAR_OR_ARRAY标志时才被使用。
    14:( m_pByte          : ^Byte);      // SDT_BYTE 数据类型变量的地址,下同。
    15:( m_pShort         : ^SmallInt);  // SDT_SHORT
    16:( m_pInt           : ^Integer);   // SDT_INT
    17:( m_pInt64         : ^Int64);     // SDT_INT64
    18:( m_pFloat         : ^Single);    // SDT_FLOAT
    19:( m_pDouble        : ^Double);    // SDT_DOUBLE
    20:( m_pDate          : ^TDateTime); // SDT_DATE_TIME
    21:( m_pBool          : ^LongBool);  // SDT_BOOL
    22:( m_ppText         : PPChar);     // SDT_TEXT,注意*m_ppText可能为NULL(代表空文本)。写入新值之前必须释放前值,例句:NotifySys (NRS_MFREE, (DWORD)*m_ppText)。!!!不可直接更改*m_ppText所指向的内容,只能释放原指针后设置入NULL(空文本)或使用NRS_MALLOC通知分配的新内存地址指针(下同)。
    23:( m_ppBin          : ^PByte);     // SDT_BIN,注意*m_ppBin可能为NULL(代表空字节集)。写入新值之前必须释放前值,例句:NotifySys (NRS_MFREE, (DWORD)*m_ppBin)。!!!不可直接更改*m_ppBin所指向的内容,只能释放原指针后设置入NULL(空字节集)或新指针。
    24:( m_pdwSubCodeAdr  : ^LongWord);  // SDT_SUB_PTR,子程序代码地址变量地址。
    25:( m_pUnit          : ^MUNIT);     // 窗口单元、菜单数据类型变量地址。
    26:( m_ppCompoundData : PPointer);   // 复合数据类型变量地址。!!!注意写入新值之前必须使用NRS_MFREE通知逐一释放所有成员(即:SDT_TEXT、SDT_BIN及复合数据类型成员)及原地址指针。!!!不可直接更改*m_ppCompoundData所指向的内容,只能释放原指针后设置入新指针。
    27:( m_ppAryData      : PPointer);   // 数组数据变量地址,注意: 1、写入新值之前必须释放原值,例句:NotifySys (NRS_FREE_ARY,m_dtDataType, (DWORD)*m_ppAryData),注意:此例句只适用于m_dtDataType为系统基本数据类型时的情况,如果为复合数据类型,必须根据其定义信息逐一释放。2、如果为文本或字节集数组,则其中成员的数据指针可能为NULL。!!!不可直接更改*m_ppAryData所指向的内容,只能释放原指针后设置入新指针。
  end;

  // MDATA_INF用作记录函数指针pFN_EXECUTE_CMD的返回值和参数信息
  pMDATA_INF = ^MDATA_INF;
  MDATA_INF  = record
    m_Value      : T_MDATA_INF_Data;  // 数据内容
    m_dtDataType : DATA_TYPE;         // 数据类型,见下面的说明

    ////////////////////////////////////////////////////////////////////////////
    //
    // 关于 m_dtDataType 的说明:
    //
    //  1、当用作传递参数数据时,如果该参数具有AS_RECEIVE_VAR_OR_ARRAY或
    //     AS_RECEIVE_ALL_TYPE_DATA标志,且为数组数据,则包含标志DT_IS_ARY,
    //     这也是DT_IS_ARY标志的唯一使用场合。
    //     DT_IS_ARY 的定义为:const DT_IS_ARY = $20000000;
    //  2、当用作传递参数数据时,如果为空白数据,则为_SDT_NULL。
    //
    ////////////////////////////////////////////////////////////////////////////
  end;

  ArgArray = array of MDATA_INF;  // 通常用于全局命令的实现代码中, 辅助读取参数值。

  // !!! ASSERT(sizeof(MDATA_INF)==sizeof(DWORD)*3); 结构MDATA_INF的尺寸必须等于12字节。


  //////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -