📄 elibtypes.pas
字号:
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[0]=#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,pBinData: PByte;
pBinSize:^integer;
begin
if nDataSize=0 then begin Result:=nil; exit; end;
pd:= PByte(NotifySys(NRS_MALLOC,LongWord(sizeof(Integer)*2+nDataSize),0));
pd^:= 1;
//易语言字节集数据以Integer(恒为1)开头
pBinSize:=Pointer(integer(pd)+sizeof(integer));
pBinSize^:=nDataSize;
//后跟一个Integer代表字节集大小
pBinData:=PByte(integer(pd)+sizeof(integer)*2);
//这是指向实际数据的指针
System.Move(pData^,pBinData^,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;
{ //CWnd是MFC中的一个类
// 绝对不会返回NULL或者窗口句柄无效的CWnd*指针。
CWnd* GetWndPtr (PMDATA_INF pInf)
begin
return (CWnd*)NotifySys (NRS_GET_AND_CHECK_UNIT_PTR,
pInf [0].m_unit.m_dwFormID, pInf [0].m_unit.m_dwUnitID);
end;
}
end.
//////////////////////////////////////////////////////////////////////////////////
// C++ ==> Pascal 转换手记 liigo 2003.5
//
//
//
//
//////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -