📄 elibtypes.pas
字号:
m_pDataType : pLIB_DATA_TYPE_INFO; // 本库中所有自定义数据类型的定义信息
m_nCategoryCount : Integer; // 全局命令类别数目,必须等同于下面m_szzCategory成员所实际提供的数目
m_szzCategory : PChar; // 全局命令类别说明表,每项为一字符串,前四位数字表示图象索引号(从1开始,0表示无)。减一后的值为指向支持库中名为"LIB_BITMAP"的BITMAP资源中某一部分16X13位图的索引。
m_nCmdCount : Integer; // 本库中提供的所有命令(全局命令及对象方法)的数目(如无则为0)
m_pBeginCmdInfo : pCMD_INFO; // 指向所有命令及方法的定义信息数组(如m_nCmdCount为0,则为nil)
m_pCmdsFunc : ^pFN_EXECUTE_CMD; // 指向每个命令的实现代码首地址,(如m_nCmdCount为0,则为nil)
m_pfnRunAddInFn : pFN_RUN_ADDIN_FN; // 用作为易语言IDE提供附加功能,可为nil
m_szzAddInFnInfo : PChar; // 有关AddIn功能的说明,两个字符串说明一个功能。第一个为功能名称(限20字符),第二个为功能详细介绍(限60字符),最后由两个空串结束。
m_pfnNotify : pFN_NOTIFY_LIB; // 提供接收来自易语言IDE或运行环境通知信息的函数,不能为nil
m_pfnSuperTemplate : pFN_SUPER_TEMPLATE; // 超级模板,暂时保留不用,为nil
m_szzSuperTemplateInfo : PChar; // 为nil
m_nLibConstCount : Integer; // 常量数目
m_pLibConst : pLIB_CONST_INFO; // 指向常量定义数组
m_szzDependFiles : PChar; // 本库正常运行所需要依赖的其他文件,在制作安装软件时将会自动带上这些文件。可为nil。
////////////////////////////////////////////////////////////////////////////
//
// 其中,m_nLanguage 可取以下值之一:
// LT_CHINESE = 1; // 中文
// LT_ENGLISH = 2; // 英文
//
// 其中,m_dwState 可取 0 或以下值之一:
// LBS_FUNC_NO_RUN_CODE = 4; // 本库仅为声明库,没有对应功能的支持代码,因此不能运行
// LBS_NO_EDIT_INFO = 8; // 本库内无供编辑用的信息(编辑信息主要为:各种名称、解释字符串等),无法被易语言IDE加载
//
////////////////////////////////////////////////////////////////////////////
end;
const
//////////////////////////////////////////////////////////////////////////////
// 以下常量在 LIB_INFO 结构的成员m_nLanguage和m_dwState中使用
// 支持库所支持的语言(m_nLanguage)
LT_CHINESE = 1; // 中文
LT_ENGLISH = 2; // 英文
// 支持库状态值(m_dwState)
LBS_FUNC_NO_RUN_CODE = 4; {1 shl 2} // 本库仅为声明库,没有对应功能的支持代码,因此不能运行
LBS_NO_EDIT_INFO = 8; {1 shl 3} // 本库内无供编辑用的信息(编辑信息主要为:各种名称、解释字符串等),无法被易语言IDE加载
////////////////////////////////////////////////////////////////////////////////
type
pFN_GET_LIB_INFO = function() : pLIB_INFO; stdcall; // GetNewInf的函数原型
pFN_ADD_IN_FUNC = function() : Integer; cdecl; // m_pfnRunAddInFn的函数原型
function RGB(r, g, b: Byte): LongWord; // 合成RGB颜色值
const
////////////////////////////////////////////////////////////////////////////////
FUNCNAME_GET_LIB_INFO = 'GetNewInf'; // 取本支持库的PLIB_INFO指针的输出函数名称
LIB_BMP_RESOURCE = 'LIB_BITMAP'; // 支持库中提供的图像资源的名称
LIB_BMP_CX = 16; // 每一图像资源的宽度
LIB_BMP_CY = 13; // 每一图像资源的高度
LIB_BMP_BKCOLOR = $FFFFFF; // 图像资源的底色(白色): RGB(255, 255, 255)=$FFFFFF=16777215
{ 运行时使用 } WM_APP = $8000; // 定义于VC中的WinUser.h,含条件编译参数WINVER>=$0400(即Windows95及以上版本)
WU_GET_WND_PTR = (WM_APP + 2); // 用作支持窗口单元事件反馈。
WU_SIZE_CHANGED = (WM_APP + 3); // 用作在窗口尺寸改变后通知所有条状窗口单元。
WU_PARENT_RELAYOUT_BAR = (WM_APP + 4); // 用作通知顶层窗口重新布局所有的 bar 单元,通常在 bar 单元改变了自身尺寸后使用。
const
//////////////////////////////////////////////////////////////////////////////
// 以下常量在函数GetDataTypeType中用到,做为返回值类型
DTT_IS_NULL_DATA_TYPE = 0;
DTT_IS_SYS_DATA_TYPE = 1;
DTT_IS_USER_DATA_TYPE = 2;
DTT_IS_LIB_DATA_TYPE = 3;
var
//============================================================================
// 定义全局函数和全局变量
//============================================================================
g_nLastNotifyResult : Integer;
g_fnNotifySys : PFN_NOTIFY_SYS = nil;
// 向易IDE系统发送信息
function NotifySys (nMsg: Integer; dwParam1,dwParam2: Longword): Integer;
// 使用指定文本数据建立易程序中使用的文本数据。
function CloneTextData (ps: PChar) : PChar; overload;
// 使用指定文本数据建立易程序中使用的文本数据。nTextLen用作指定文本部分的长度(不包含结束零),如果为-1,则取ps的全部长度。
function CloneTextData (ps: PChar; nTextLen: Integer): PChar; overload;
// 使用指定数据建立易程序中使用的字节集数据。
function CloneBinData (pData: PByte; nDataSize: Integer): PByte;
// 向易IDE报告运行时错误。
procedure GReportError (szErrText: PChar);
// 向易IDE申请内存
function MMalloc (nSize: Integer): Pointer;
// 释放从易IDE申请来的内存
procedure MFree (p: Pointer);
// 返回数组的数据部分首地址及成员数目。
function GetAryElementInf (pAryData: Pointer; var pnElementCount: Integer): PByte;
// 取回数据类型的类别。
function GetDataTypeType (dtDataType: DATA_TYPE): Integer;
{$ENDIF} { __LIB_H }
implementation
uses SysUtils; //SysUtils用于处理PChar字串
// 合成RGB颜色值。本函数的定义和实现代码拷贝自Delphi中的Windows.pas
function RGB(r, g, b: Byte): LongWord;
begin
Result:= (r or (g shl 8) or (b shl 16));
end;
{ EVENT_NOTIFY }
procedure EVENT_NOTIFY.EVENT_NOTIFY(dwFormID, dwUnitID: LongWord;
nEventIndex: Integer);
begin
m_dwFormID := dwFormID;
m_dwUnitID := dwUnitID;
m_nEventIndex := nEventIndex;
m_nArgCount := 0;
m_blHasReturnValue := FALSE;
end;
// 向易IDE系统发送信息。失败返回0 ;使用之前必须初始化函数指针g_fnNotifySys。
function NotifySys (nMsg: Integer; dwParam1,dwParam2: Longword): Integer;
begin
if Assigned(g_fnNotifySys) then
g_nLastNotifyResult:= g_fnNotifySys(nMsg,dwParam1,dwParam2)
else
g_nLastNotifyResult:= 0;
Result:= g_nLastNotifyResult;
end;
// 使用指定文本数据建立易程序中使用的文本数据。
function CloneTextData (ps: PChar) : PChar;
var
nTextLen: Integer;
pd: PChar;
begin
if (ps=nil) or (ps[1]=#0) then begin Result:=nil; exit; end;
nTextLen:= StrLen(ps);
pd:= PChar(NotifySys(NRS_MALLOC, LongWord(nTextLen+1),0));
//SysUtils.StrLCopy(pd, ps, nTextLen);
System.Move(ps, pd, nTextLen);
pd[nTextLen] := #0;
Result:= pd;
end;
// 使用指定文本数据建立易程序中使用的文本数据。nTextLen用作指定文本部分的长度(不包含结束零),如果为-1,则取ps的全部长度。
function CloneTextData (ps: PChar; nTextLen: Integer): PChar;
var pd: PChar;
begin
if nTextLen <= 0 then begin Result:=nil; exit; end;
pd:= PChar(NotifySys(NRS_MALLOC,LongWord(nTextLen+1),0));
//SysUtils.StrLCopy(pd, ps, nTextLen);
System.Move(ps, pd, nTextLen);
pd[nTextLen]:= #0;
Result:= pd;
end;
// 使用指定数据建立易程序中使用的字节集数据。
function CloneBinData (pData: PByte; nDataSize: Integer): PByte;
var pd: PByte;
begin
if nDataSize=0 then begin Result:=nil; exit; end;
pd:= PByte(NotifySys(NRS_MALLOC,LongWord(sizeof(Integer)*2+nDataSize),0));
pd^:= 1;
//??? Integer(Pointer(Integer(pd)+sizeof(Integer))^) := nDataSize;
//??? System.Move(pData,Pointer(Integer(@pd)+sizeof(Integer)*2),nDataSize);
Result:= pd;
end;
// 向易IDE报告运行时错误。
procedure GReportError (szErrText: PChar);
begin
NotifySys(NRS_RUNTIME_ERR,LongWord(szErrText),0);
end;
// 向易IDE申请内存
function MMalloc (nSize: Integer): Pointer;
begin
Result:= Pointer(NotifySys(NRS_MALLOC,LongWord(nSize),0));
end;
// 释放从易IDE申请来的内存
procedure MFree (p: Pointer);
begin
NotifySys(NRS_MFREE,LongWord(p),0);
end;
// 返回数组的数据部分首地址及成员数目。
function GetAryElementInf (pAryData: Pointer; var pnElementCount: Integer): PByte;
var
pnData : PInteger;
nArys, nElementCount : Integer;
begin
pnData:= PInteger(pAryData);
nArys:= pnData^; // 取得维数。
Inc(pnData);
nElementCount:= 1; // 计算成员数目。
while (nArys > 0) do begin
nElementCount:= nElementCount * pnData^;
Inc(pnData);
Dec(nArys);
end;
pnElementCount:= nElementCount;
Result:= PByte(pnData);
end;
// 取回数据类型的类别。
function GetDataTypeType (dtDataType: DATA_TYPE): Integer;
var dw: Longword;
begin
if dtDataType= _SDT_NULL then begin
Result:= DTT_IS_NULL_DATA_TYPE;
exit;
end;
dw:= dtDataType and $C0000000;
if dw=DTM_SYS_DATA_TYPE_MASK then
Result:= DTT_IS_SYS_DATA_TYPE
else if dw=DTM_USER_DATA_TYPE_MASK then
Result:= DTT_IS_USER_DATA_TYPE
else
Result:=DTT_IS_LIB_DATA_TYPE;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -