📄 elibtypes.pas
字号:
unit elibTypes;
////////////////////////////////////////////////////////////////////////////////
//
// 易语言支持库开发文档·Pascal版声明文件
// 本文档属liigo版权所有,复制、修改、删除、散发不究! liigo@sina.com 2003.5
// ------------------------------------------
////////////////////////////////////////////////////////////////////////////////
//
// 版权声明:
// 本文件(原C++版)版权为易语言作者吴涛所有,仅授权给第三方用作开发易语言支持库,禁止用于其他任何场合。
//
// 以上是易语言作者吴涛的版权声明,下面是liigo的声明:
// 本人完成了原声明文件从C++到Pascal语言格式的转换,不对转换成果保留任何权利,任何人都可以在任何场合任意复制、粘贴、删除、修改、散发,但前提是必须保证不侵犯吴涛的权利!至于具体的尺度如何把握,可就不关俺的事了,您自个儿琢磨去吧 ^_^
//
////////////////////////////////////////////////////////////////////////////////
(*******************************************************************************
!!! 注意:支持库是标准的DLL文件,但文件名的后缀必须固定为.FNx,其中x为一类型字母,目前有意义的后缀有:
1、“.fne”: 带编辑信息、有运行支持代码的支持库;
2、“.fnl”: 带编辑信息、无运行支持代码的支持库;
3、“.fnr”: 不带编辑和声明信息、仅有运行支持代码的支持库;
!!! 编译后直接改名*.dll为*.FNx即可。
*******************************************************************************)
{$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}SmallInt; // 全局命令的所属类别,从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限值的部分);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -