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

📄 elibtypes.pas

📁 本程序旨在讲解如何用Delphi创建一个可以在易语言中执行的支持库
💻 PAS
📖 第 1 页 / 共 4 页
字号:
unit elibTypes;

{$IFNDEF __LIB_H}
{$DEFINE __LIB_H}

interface

//uses

type
  PLongBool  = ^LongBool;
  PByteArray = ^TByteArray;
  TByteArray = array[0..32767] of Byte;

type
  DATA_TYPE  = LongWord ;    // 数据类型: _SDT_NULL, _SDT_ALL, SDT_BYTE, SDT_SHORT, SDT_INT, SDT_INT64, SDT_FLOAT, SDT_DOUBLE, SDT_BOOL, SDT_DATE_TIME, SDT_TEXT, SDT_BIN, SDT_SUB_PTR 等
  pDATA_TYPE = ^LongWord ;   // DATA_TYPE 参见下面的常量定义

const
  //////////////////////////////////////////////////////////////////////////////
  // 以下是由系统定义的基本数据类型,不可更改。(以下常量数值的定义绝对不会有错!)

  _SDT_NULL     = 0;           // 空白数据类型
  _SDT_ALL      = 2147483648;  // 通用型, 仅用于支持库命令定义其参数或返回值的数据类型,当用于定义库命令参数时,_SDT_ALL可以匹配所有数据类型(数组类型必须符合要求)

  SDT_BYTE      = 2147483905;  // 字节型
  SDT_SHORT     = 2147484161;  // 短整数型
  SDT_INT       = 2147484417;  // 整数型
  SDT_INT64     = 2147484673;  // 长整数型
  SDT_FLOAT     = 2147484929;  // 小数型
  SDT_DOUBLE    = 2147485185;  // 双精度小数型
  SDT_BOOL      = 2147483650;  // 逻辑型
  SDT_DATE_TIME = 2147483651;  // 日期时间型
  SDT_TEXT      = 2147483652;  // 文本型
  SDT_BIN       = 2147483653;  // 字节集
  SDT_SUB_PTR   = 2147483654;  // 子程序指针

  //////////////////////////////////////////////////////////////////////////////
  
type
  //////////////////////////////////////////////////////////////////////////////
  // “参数信息”数据结构 ARG_INFO

  pARG_INFO = ^ARG_INFO;
  ARG_INFO  = record
    m_szName         : PChar;     // 参数名称
    m_szExplain      : PChar;     // 参数详细解释
    m_shtBitmapIndex : Word;      // 参见 CMD_INFO 中的同名成员
    m_shtBitmapCount : Word;      // 参见 CMD_INFO 中的同名成员
    m_dtDataType     : DATA_TYPE; // 参数的数据类型
    m_nDefault       : LongWord;  // 参数默认值,见下面的说明
    m_dwState        : LongWord;  // 状态值,见下面的说明和常量定义

    ////////////////////////////////////////////////////////////////////////////
    //
    // 其中, m_nDefault 为系统基本类型参数的默认指定值(在编译时编译器将自动处理):
    //
    //   1、数值型:直接为数值(如为小数,只能指定其整数部分,如为长整数,只能指定不超过INT限值的部分);
    //   2、逻辑型:1 代表'真',0 代表'假';
    //   3、文本型:本成员此时为PChar指针,指向默认文本串;
    //   4、其它所有类型参数一律无默认指定值。
    //
    // 其中, m_dwState 可以为 0 和以下数值的组合:(0 表示该参数没有默认值,用户必须提供该参数)
    //
    //   AS_HAS_DEFAULT_VALUE      = 1;  // 本参数有默认值,默认值在m_nDefault中说明,与下标志互斥
    //   AS_DEFAULT_VALUE_IS_EMPTY = 2;  // 本参数有默认值,默认值为空,与上标志互斥
    //
    //   (下面5个标志位只能取其一)
    //   AS_RECEIVE_VAR            = 4;  // 为本参数提供数据时必须提供非数组型容器
    //   AS_RECEIVE_VAR_ARRAY      = 8;  // 为本参数提供数据时必须提供数组型容器
    //   AS_RECEIVE_VAR_OR_ARRAY   = 16; // 为本参数提供数据时必须提供数组或非数组型容器
    //   AS_RECEIVE_ARRAY_DATA     = 32; // 为本参数提供数据时必须提供数组型数据
    //   AS_RECEIVE_ALL_TYPE_DATA  = 64; // 为本参数提供数据时可以提供非数组或数组数据
    //
    ////////////////////////////////////////////////////////////////////////////
  end;

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

  AS_HAS_DEFAULT_VALUE      = 1;  // 本参数有默认值,默认值在m_nDefault中说明,与下标志互斥
  AS_DEFAULT_VALUE_IS_EMPTY = 2;  // 本参数有默认值,默认值为空,与上标志互斥

  //(下面5个标志位只能取其一)
  AS_RECEIVE_VAR            = 4;  // 为本参数提供数据时必须提供非数组型容器(!!!注意:必须是“容器(变量)”,而不能是类似123,"abc"的数据。下同。  ——liigo注)
  AS_RECEIVE_VAR_ARRAY      = 8;  // 为本参数提供数据时必须提供数组型容器
  AS_RECEIVE_VAR_OR_ARRAY   = 16; // 为本参数提供数据时必须提供数组或非数组型容器
  AS_RECEIVE_ARRAY_DATA     = 32; // 为本参数提供数据时必须提供数组型数据
  AS_RECEIVE_ALL_TYPE_DATA  = 64; // 为本参数提供数据时可以提供非数组或数组数据

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

type
  //////////////////////////////////////////////////////////////////////////////
  // “命令信息”数据结构 CMD_INFO

  pCMD_INFO = ^CMD_INFO;
  CMD_INFO  = record
    m_szName         : PChar;     // 命令中文名称
    m_szEGName       : PChar;     // 命令英文名称,可以为空或nil
    m_szExplain      : PChar;     // 命令详细解释
    m_shtCategory    : Word;      // 全局命令的所属类别,从1开始,减一后的值为指向LIB_INFO的m_szzCategory成员所提供的某个类别字符串的索引; 对象成员命令的此值为-1
    m_wState         : Word;      // 命令状态,见后面的说明及常量定义
    m_dtRetType      : DATA_TYPE; // 返回值类型(!!!!! 千万注意:如果返回值类型定义为_SDT_ALL,绝对不能返回数组(即CT_RETURN_ARRAY_DATA置位)或复合数据类型的数据(即用户或库自定义数据类型但不包含窗口或菜单单元),因为用户程序无法自动删除复合类型中所分配的额外空间(如文本型或者字节集型成员等))
    m_wReserved      : Word;      // 保留,必须为0
    m_shtUserLevel   : Word;      // 难度等级,取值1,2,3,分别代表“初-中-高”级;见后面的说明及常量定义
    m_shtBitmapIndex : Word;      // 指定图像索引,从1开始,0表示无。减一后的值为指向支持库中名为"LIB_BITMAP"的BITMAP资源中某一部分16X13位图的索引
    m_shtBitmapCount : Word;      // 图像数目(用作为IDE提供动画图片)
    m_nArgCount      : LongWord;  // 命令的参数数目
    m_pBeginArgInfo  : pARG_INFO; // 指向本命令的参数定义信息数组

    ////////////////////////////////////////////////////////////////////////////
    //
    // 其中, m_wState 取 0 或以下值的组合:(0 表示该命令为正常命令)
    //   CT_IS_HIDED                = 4;  // 本命令是否为隐含命令(即不需要由用户直接输入的命令(如循环结束命令)或被废弃但为了保持兼容性又要存在的命令)
    //   CT_IS_ERROR                = 8;  // 本命令在本库中不能使用,具有此标志一定隐含,主要用作在不同语言版本的相同库中使用,即:A命令在A语言版本库中可能需要实现并使用,但在B语言版本库中可能就不需要。如果程序中使用了具有此标志的命令,则只能支持该程序调入和编译,而不能支持运行。如具有此标志,可以不实现本命令的执行部分。
    //   CT_DISABLED_IN_RELEASE_VER = 16; // 具有本标志的命令在易语言系统编译RELEASE版易程序时将被跳过,本类型命令必须无返回值
    //   CT_ALLOW_APPEND_NEW_ARG    = 32; // 在本命令的参数表的末尾是否可以添加新的参数,新参数等同于参数表中的最后一个参数
    //   CT_RETURN_ARRAY_DATA       = 64; // 用于说明m_dtRetType,是否返回数组数据
    //
    // 其中, m_shtUserLevel 取以下值之一:
    //   LVL_SIMPLE    = 1;               // 初级
    //   LVL_SECONDARY = 2;               // 中级
    //   LVL_HIGH      = 3;               // 高级
    //
    // !!!!! 千万注意:如果返回值类型(m_dtRetType)定义为 _SDT_ALL ,
    // 绝对不能返回数组(即CT_RETURN_ARRAY_DATA置位)或复合数据类型的数据(即用户或库自定义数据类型但不包含窗口或菜单单元),
    // 因为用户程序无法自动删除复合类型中所分配的额外空间(如文本型或者字节集型成员等) !!!!!
    //
    ////////////////////////////////////////////////////////////////////////////
  end;

const
  //////////////////////////////////////////////////////////////////////////////
  // 以下常量用于 CMD_INFO 结构的 m_wState 和 m_shtUserLevel 成员中:

  // 命令状态(m_wState)
  CT_IS_HIDED                = 4;  // 本命令是否为隐含命令(即不需要由用户直接输入的命令(如循环结束命令)或被废弃但为了保持兼容性又要存在的命令)
  CT_IS_ERROR                = 8;  // 本命令在本库中不能使用,具有此标志一定隐含,主要用作在不同语言版本的相同库中使用,即:A命令在A语言版本库中可能需要实现并使用,但在B语言版本库中可能就不需要。如果程序中使用了具有此标志的命令,则只能支持该程序调入和编译,而不能支持运行。如具有此标志,可以不实现本命令的执行部分。
  CT_DISABLED_IN_RELEASE_VER = 16; // 具有本标志的命令在易语言系统编译RELEASE版易程序时将被跳过,本类型命令必须无返回值
  CT_ALLOW_APPEND_NEW_ARG    = 32; // 在本命令的参数表的末尾是否可以添加新的参数,新参数等同于参数表中的最后一个参数
  CT_RETURN_ARRAY_DATA       = 64; // 用于说明m_dtRetType,是否返回数组数据

  // 命令的难度等级(m_shtUserLevel)
  LVL_SIMPLE    = 1;  // 初级
  LVL_SECONDARY = 2;  // 中级
  LVL_HIGH      = 3;  // 高级

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

const

  //////////////////////////////////////////////////////////////////////////////
  // 以下常量用作区分数据类型的类别

  DTM_SYS_DATA_TYPE_MASK  = $80000000;  // 系统定义数据类型
  DTM_USER_DATA_TYPE_MASK = $40000000;  // 用户定义数据类型
  DTM_LIB_DATA_TYPE_MASK  = $00000000;  // 库定义数据类型

  //////////////////////////////////////////////////////////////////////////////
  // DT_IS_ARY:在数据类型中的数组标志。如果某数据类型值此位置1,则表示为此数据类型的数组。
  // 本标志仅用作在运行时为具有AS_RECEIVE_VAR_OR_ARRAY或AS_RECEIVE_ALL_TYPE_DATA
  // 标志的库命令参数说明其为是否为数组数据,其他场合均未使用。因此其他地方均可以忽略本标志。

  DT_IS_ARY = $20000000;

type
  pLIB_DATA_TYPE_ELEMENT = ^LIB_DATA_TYPE_ELEMENT;
  LIB_DATA_TYPE_ELEMENT  = record
    m_dtDataType : DATA_TYPE ; // 本数据成员的数据类型。
    m_pArySpec   : ^BYTE;      // 如果本成员为数组,则本成员提供数组指定串,否则此值为NULL。数组指定串的格式为:首先为一个Byte记录该数组的维数(如果为0表示不为数组,最大值为0x7f),然后为对应数目的Integer值顺序记录对应维的元素数目。
    m_szName     : PChar;      // 本数据成员的名称,如果本数据成员所属的数据类型只有这一个数据成员,此值应该为NULL。
    m_szEGName   : PChar;      // 本数据成员的英文名称,可以为空或NULL。
    m_szExplain  : PChar;      // 本数据成员的详细说明。

    m_dwState    : LongWord;   // 状态值,指定本数据成员是否有默认值。见下面的常量定义(const LES_HAS_DEFAULT_VALUE = (1 shl 0);)。
    m_nDefault   : Integer;    // 默认值,仅当 m_dwState 包含 LES_HAS_DEFAULT_VALUE 标志且非数组时才有效。

    ////////////////////////////////////////////////////////////////////////////
    //
    // 关于数据成员的默认值(m_nDefault):
    //
    //   1、数值型:直接为数值(如为小数,只能指定其整数部分,如为长整数,只能指定不超过INT限值的部分);
    //   2、逻辑型:1 代表真,0 代表假;
    //   3、文本型:本变量此时为PChar指针,指向默认文本串;
    //   4、其它所有类型参数一律无默认指定值。
    //
    ////////////////////////////////////////////////////////////////////////////
  end;

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

  LES_HAS_DEFAULT_VALUE = (1 shl 0);    // 本数据成员有默认值,默认值在m_nDefault中说明。

type
  //////////////////////////////////////////////////////////////////////////////
  // “窗口单元属性”:UNIT_PROPERTY

  pUNIT_PROPERTY = ^UNIT_PROPERTY;
  UNIT_PROPERTY  = record
    m_szName     : PChar;     // 属性名称,注意为利于在属性表中同时设置多对象的属性,相同意义属性的名称最好一致。
    m_szEGName   : PChar;     // 英文名称。
    m_szExplain  : PChar;     // 属性解释。

    m_shtType    : SmallInt;  // 属性的数据类型,见下面的常量定义
    m_wState     : Word;      // 状态值,见下面的常量定义
    m_szzPickStr : PChar;     // 顺序记录以"\0"分隔的所有备选文本(除开UD_FILE_NAME为所说明的特殊格式),最后以一个"\0"结束。当m_nType为UP_PICK_INT、UP_PICK_TEXT、UD_EDIT_PICK_TEXT、UD_FILE_NAME时不能为NULL。
  end;
  //////////////////////////////////////////////////////////////////////////////

const
  //////////////////////////////////////////////////////////////////////////////
  // 以下常量用于UNIT_PROPERTY结构的m_shtType和m_wState成员

  // “窗口单元属性”的数据类型(m_shtType)
  UD_INT              = 1001;  // 数据为INT值
  UD_DOUBLE           = 1002;  // 数据为DOUBLE值
  UD_BOOL             = 1003;  // 数据为BOOL值
  UD_DATE_TIME        = 1004;  // 数据为DATE值
  UD_TEXT             = 1005;  // 数据为字符串
  UD_PICK_INT         = 1006;  // 数据为INT值,用户只能选择,不能编辑。
  UD_PICK_TEXT        = 1007;  // 数据为待选字符串,用户只能选择,不能编辑。
  UD_EDIT_PICK_TEXT   = 1008;  // 数据为待选字符串,用户可以编辑。
  UD_PIC              = 1009;  // 为图片文件数据
  UD_ICON             = 1010;  // 为图标文件数据
  UD_CURSOR           = 1011;  // 第一个INT记录鼠标指针类型,具体值见Windows API的LoadCursor函数。如为-1,则为自定义鼠标指针,此时后跟相应长度的鼠标指针文件内容。
  UD_MUSIC            = 1012;  // 为声音文件数据
  UD_FONT             = 1013;  // 为一个LOGFONT数据结构,不能再改。
  UD_COLOR            = 1014;  // 数据为COLORREF值。
  UD_COLOR_TRANS      = 1015;  // 数据为COLORREF值,允许透明颜色(用CLR_DEFAULT代表,CLR_DEFAULT在VC++的COMMCTRL.H头文件中定义)。
  UD_FILE_NAME        = 1016;  // 数据为文件名字符串。此时m_szzPickStr中的数据为:对话框标题 + "\0" + 文件过滤器串 + "\0" + 默认后缀 + "\0" + "1"(取保存文件名)或"0"(取读入文件名)+ "\0" 。
  UD_COLOR_BACK       = 1017;  // 数据为COLORREF值,允许系统默认背景颜色(用CLR_DEFAULT代表)。
  UD_ODBC_CONNECT_STR = 1021;  // ODBC数据连接文本
  UD_ODBC_SELECT_STR  = 1022;  // ODBC数据查询SQL文本
  UD_IMAGE_LIST       = 1023;  // 图片组,数据结构为
    {  #define	IMAGE_LIST_DATA_MARK	(MAKELONG ('IM', 'LT'))
	/*
	DWORD: 标志数据:为 IMAGE_LIST_DATA_MARK
	COLORREF: 透明颜色(可以为CLR_DEFAULT)
	后面为图片组数据,用CImageList::Read和CImageList::Write读写。
	*/
    }

⌨️ 快捷键说明

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