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