📄 elibtypes.pas
字号:
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 + -