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

📄 elibtypes.pas

📁 支持库类 / 模块控件 / 支持库类 eLIB++支持库 源代码 Delphi
💻 PAS
📖 第 1 页 / 共 5 页
字号:

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 + -