常用的几个struct(delphi.gsDefineTypes)

{公用结构定义单元 作者:周承昊 2003.9.3 }
Unit GsDefineTypes;

//--------------------------------接口段--------------------------------------//
interface

//--------------------------------引用段--------------------------------------//
Uses
Variants, Classes, Controls, Types, Windows, DB{, sysUtils};

//------------------------------常量定义段------------------------------------//
Var lGlobalTerminateWorking : boolean = false; //全局中断任务标志

Const
Gs_Normal =0; //正常运行
Gs_Debug =1; //调试模式
Gs_CalcFaile =0; //成本核算失败
Gs_CalcOK =999; //成本核算成功

nRunModeAdd=0;
nRunModeEdit=1;
nRunModeNone=-1;

nPopAllow = 1; //权限:允许
nPopDenied = 0; //拒绝
nPopInherit = -1; //继承
nThreadEnable = nPopAllow; //
nThreadDisable= nPopDenied; //
nThreadAuto = nPopInherit; //

WM_User = 200; //用户定义消息基数

sDefaultTimeFormat='yyyy.mm.dd hh:mm:ss';
sCurrencyFormat ='¥,0.00;¥-,0.00';
sCurrencyFormat2=',0.00;-,0.00';
sHexEditMask ='(\d | [A-F] | [a-f])+'; //Hex字符串输入
sDecEditMask ='\d+.\d+'; //十进数字, 可改为:\d+.\d\d\d三位小数限制

sLocalDataBasePassWord='gssystems'; //ifuckyourgirlfrombac本地库口令
sDefaultDBLogUserName ='guest'; //默认网络远程登录用户
sDefaultDBLogPassword ='GreatSeaSystems'; //口令
nDefaultXorPassWord = 4; //默认XOR
nDefaultXorPassWordLog= 3; //默认XOR 3
sRemoteCOMServer='DataServer.Clothes';
sRemoteCOMServerGUID='{E3EE46D2-15B6-4706-BE3C-FD929D411913}';
sLanConnectionStringConfigName='sNetConnectionString';

//设置使用何种远程连接模式
nConnectionTypeNone =-1; //无连接
nConnectionTypeLocalNet =0; //本地网络连接
nConnectionTypeDCom =1; //DCOM连接
nConnectionTypeTCPIP =2; //TCP Socker连接
nConnectionTypeWeb =3; //Web连接
nConnectionTypeReserve =4; //备用

//网络数据同步模式
sNetTransModeSync = 'SYNC'; //同步
sNetTransModeASync = 'ASYNC';//异步

//程序执行角色
nProgramRoleDataCenter =1; //程序作为数据中心运行
nProgramRoleDataCenterClient =2; //数据中心本地网络工作站
nProgramRoleDataCenterMIDAS =3; //数据中心远程客户
nProgramRoleDataCenterReserve=4; //备用
nProgramRoleSubCompany =5; //子公司数据中心
nProgramRoleSubCompanyClient =6; //子公司本地网客户
nProgramRoleSubCompanyMIDAS =7; //子公司远程客户
nProgramRoleSubCompanyReserve=8; //备用

//数据更新模式
nUpdateModeAtOnce =0; //立刻更新
nUpdateModeFile =1; //通过文件
nUpdateModeMIDAS =2; //通过MIDAS网络

//数据传输模式
nTranslateModeDirect =0; //数据传输模式:直接全部传
nTranslateModeAll =nTranslateModeDirect; //全部传
nTranslateModeUpdate =1; //数据传输模式:SQL的UPDATE模式.可以看做“只传更新部分”

//POS小票打印模式
nPrintModeDriver = 0; //打印模式:nPrintModeCanvas打印
nPrintModePort = 1; //用脚本控制打印
//
nDefaultPosLineChars=32; //POS默认打印一行长度

//选择方式
nSelectBaseByID = 0; //根据编号
nSelectBaseByShort = 1; //根据简码
nSelectBaseByName = 2; //根据名称
nSelectBaseByBarCode= 3; //根据条码
//选择
nSelectBaseExtractModeFirst : integer = 1; //从起头
nSelectBaseExtractModePart : integer = 2; //从部分

//数据状态,注意:根据需要选用,并不一定完全按此流程走下去。
nDataStatusSaved = 0; //刚增加的保存
nDataStatusSaveTemp = 1; //临时保存
nDataStatusPosted = 1; //已提交
nDataStatusAdded = 2; //增加了的
nDataStatusTranslated=3; //传输完毕了的

//关闭方式
nCloseModeNone = -1; //不做处理
nCloseModeQuit = 0; //退出
nCloseModeLogout = 1; //退出登录
nCloseModePowerOff = 2; //关闭电脑
nCloseModeRestart = 3; //重启电脑
nCloseModeReturn = 4; //返回上级

//设备类型
icDeviceMW_RD = 'MW_RD'; //明华RD接触式IC卡
icDeviceMW_RF = 'MW_RF'; //明华不接触式IC卡
//卡类型
icCard4442 = '4442'; //西门子4442卡
icCardM1 = 'M1'; //飞利浦M1芯片卡

//分店销售时的应收应付款记入科目
nAbleWaySubShop=1; //分店销售时应收应付款记入分店本身
nAbleWayCompany=2; //分店销售记入往来单位

//日期上下限 select CONVERT(datetime, 0.999988426), CONVERT(numeric(20,10),convert(dateTime,'2000-01-01 23:59:59'))- CONVERT(numeric(20,10),convert(dateTime,'2000-01-01'))
dMMinDate = -693593; //日期可容纳到0001-01-01
dMinDate = -53688; //有效日期是1753-01-01;
dZeroDate = 0; //0日期是1899-12-30
dMaxDate = 2958465; //9999-12-31 2958464.0 2958465.999988426 注意:这是系统时间,转化为sql需要+nDateDiffSql
dBlankDate = -700000; //0000-00-00
dTime23_59_59 = 0.999988426;//23:59:59 2958465.999988426
dMaxDateTime = dMaxDate + dTime23_59_59; //2958465.999988426,转成sql需要+nDateDiffSql

//日期差
var
nDateDiff : currency=0; //默认为0
const
nDateDiffSystem : currency=0; //Delphi日期与系统日期的差:0
nDateDiffSql : currency=-2; //SQL的日期是从1900-1-1开始的,而其他日期是从1989-12-31开始的

//原来在UntMDI中的定义
sConfigCashInitializedName='CREDITINITIALIZED'; //配置库中会计初始化完毕的标识名称
sConfigMattInitializedName='MATTINITIALIZED'; //配置库中物流初始化完毕的标识名称
sConfigSessionYearName='MattSessionYear'; //期间
sConfigSessionMonthName='MattSessionMonth';
sConfigSessionStartDay='MattSessionStartDay';
//

nAccessStringMaxLength=254; //Access的字符字段最大多长

Type
_ObjectProcedure = Procedure of Object; //对象的方法
_PointerProcedure = procedure(AValue:Pointer); //只传递指针的方法
_NotifyProcedure = procedure(AValue:TObject); //传递对象的TNotifyEvent
_SafeCallProcedure= procedure safeCall; //安全调用的过程
_StdCallProcedure = procedure stdCall; //stdCall
//_SafeCallDataSetNotifyEvent = function (DataSet:TObject; pControl:Pointer=nil):Boolean safeCall; //TDataSetNotifyEvent的safeCall
_StdCallDataSetNotifyEvent = function (DataSet:TObject; pControl:Pointer=nil):Boolean stdCall; //同上,stdCall
_ObjEvent = function (sender:TObject; pControl:Pointer=nil):Boolean of object;//同上,控件内的
//pSafeCallDataSetNotifyEvent = ^_SafeCallDataSetNotifyEvent;
pStdCallDataSetNotifyEvent = ^_StdCallDataSetNotifyEvent;
pObjEvent = ^_ObjEvent;
//显示信息的函数类型
_stdShowInfo=procedure (sInfo:string=''; lTime:Boolean=true); stdcall;
_objShowInfo=procedure (sInfo:string=''; lTime:Boolean=true) of Object;
//数据事件
_DataMoveEvent=TDataSetNotifyEvent; //数据移动事件
//OEM客户信息
_OemInfo =Record //Oem
sOemCompany : String; //公司全名
sOemCompanyShort: String; //简称
sOemPhone : String; //公司电话
sOemAddress : String; //公司地址
sOemURLWeb : String; //公司网站
sOemLogoImgFile : String; //OEM的LOGO图片文件
sOemPassword : String; //OEM密码
sOemLicenseFile : String; //注册文件
sOemFormHint : String; //窗体hint
sIconFile : string; //ICON图标
pAddins : Pointer; //扩展指针
End;
pOemInfo=^_OemInfo;
_Oem = _oemInfo;
pOem = ^_Oem;

_VersionInfo=Record //版本信息,兼容WINDOWS的OsVersionInfo;
dwOSVersionInfoSize:dWord;
dwMajorVersion:dWord;
dwMinorVersion:DWord;
dwBuildNumber:DWord;
dwPlatformId:DWord;
szCSDVersion:String[128]; //
sProjectName:String[254]; //项目名称
End;
pVersionInfo=^_VersionInfo;

const
DataFormatCount = 2; //从delphi的OleCtnrs单元复制来的,oleContainer用的流头
StreamSignature = $434F4442; {'BDOC'}
type
TOleStreamHeader = record //oleContainer在loadFromStream和saveToStream时,stream前边的头
case Integer of //参阅 http://blog.csdn.net/Foggia/archive/2007/11/21/1896317.aspx
0: ( { New }
Signature: Integer;
DrawAspect: Integer;
DataSize: Integer);
1: ( { Old }
PartRect: TSmallRect; //windows.TSmallRect
);
end;
pOleStreamHeader=^TOleStreamHeader;

IntegerArray = Array of integer; //数组
_integers = integerArray; //整形数组

_NameValue = record //名称、值的对应
oValue: variant;
sName : string;
vValues:array[0..5] of variant;
pAddin: pointer;
end;
_StringNameValue= record //字符型值和名称的对应
sValue: string;
sName : string;
vValues:array[0..5] of variant;
pAddin: pointer;
end;
_NumberNameValue = record //数字型值和名称的对应关系
nValue: integer;
sName : string;
vValues:array[0..5] of variant;
pAddin: pointer;
end;
_IDName = _NameValue;
_NumberName = _NumberNameValue;
TOutBufPassThrough = record //调用windows.extEscape可以直接用extEscape(handle, PASSTHROUGH, sizeOf(outBuf), @outBuf, 0, nil)向设备发送esc命令
nDataLen:word;
sEscData:array [0..1024] of char;
end;
//设置表格显示
_setFormView = record
version : _versionInfo; //版本
sFormName : string; //类名
objTable : TComponent; //控件,可以是dbGrid、cxGrid、cxGridTableView、cxTreeList、cxDBTreeList
sXmlFilePath: string; //xml文件的相对路径,相对于sysConfig文件说的
sXmlFileName: string; //xml文件名
sLanguage : string; //默认语种
sUser : string; //用户
//
vReserve : array[0..9] of variant; //备用的
end;
pSetFormView = ^_setFormView;

_MIDASConnectConfig=Record //远程客户的登录信息
Version:_VersionInfo; //版本
nConnectionType:Integer; //连接方式
//
sServerHost_URL:String; //主机名称、电脑名称、URL
sServerName:string; //远程服务的DCOM名称
sServerGUID:String; //AppServer&DCom的GUID标识
nServerSocketPort:Integer; //TCP/IP端口
//
sServerWebProxy:String; //Web代理
sServerWebUserName:String; //Web用户名
sServerWebPassword:String; //Web口令
sServerWebProxyByPass:String; //代理之Pass
//
sServerInterceptGUID:String; //Socket连接的Intercept标识GUID
End;
pMIDASConnectConfig=^_MIDASConnectConfig;

_DataConnectionConfig=Record //统一的数据连接参数
Version:_VersionInfo;
nConnectionType:Integer;
sAdoConnectionString:String;
MIDASConfig:_MIDASConnectConfig;
End;
pDataConnectionConfig=^_DataConnectionConfig;
//设置完整的数据访问,运行设置
_SetupDataConnection=Record
Version:_VersionInfo;
pDefaultDataConnectionConfig:Pointer;
pReturnDataConnectionConfig:Pointer;
End;
pSetupDataConnection=^_SetupDataConnection;

_LanConnectParamType=(AdoConnectionString,AdoConnection);
_DataConnection=Record
Version:_VersionInfo; //版本
//
sDBUserName:String; //完整的访问数据库的用户名
sDBPassWord:String;
//
Case nConnectionType:Integer of //必需参数,规定连接类型
nConnectionTypeLocalNet: //若连接为本地网络连接
(//Case LanConnectParamType:_LanConnectParamType of
LanConnectParamType:_LanConnectParamType;
// AdoConnectionString:
psConnectionString:Pointer; //()spConnectionString本地网络的参数类型,是连接串
// AdoConnection:
pAdoConnectionPointer:Pointer;//()本地是ADO连接指针
);
nConnectionTypeDCOM, //通过MIDAS网络连接的这几种类型 nConnectionTypeMIDAS
nConnectionTypeTCPIP,
nConnectionTypeWeb:
//( MIDASConnectionConfig:_MIDASConnectConfig; );
(pCustomRemoteServerPointer:Pointer; //远程连接指针
sProviderName:ShortString);
nConnectionTypeNone, //若无连接或系统保留,则全部列出
nConnectionTypeReserve: ();
{(spConnectionString:pChar,
pAdoConnectionPointer:Pointer,
pCustomRemoteServerPointer:Pointer); }
//
End;
pDataConnection=^_DataConnection;

_AppModule = string[254]; //单个数组
pAppModule = ^_appModule;
_AppModules = array[0..9] of _AppModule; //程序模块组
pAppModules = ^_AppModules;

_LoginInformation=Record
Version:_VersionInfo;
//nConnectionType:Integer; //连接方式
sLocalConnectionString:String; //本地数据库连接
sNetConnectionString:String; //网络数据库连接
sDefaultDataBase:String; //默认网络数据库
sAccountName:String; //帐套名称
sAdminPassword:String; //超级用户口令
sMachineID:string;
sUserName:String;
sUserPass:String;
dDate:Double; //日期
lIsCreditVersion:Boolean; //是否会计版本
sRegString:String; //注册信息串
sRegName:String; //注册名称
nRegStationCount:Integer; //注册站点数
//检查的登录模块
Modules : _AppModules;
End;
pLoginInformation=^_LoginInformation;

_RemoteLoginInformation=Record //远程登录结构
Version:_VersionInfo;
MIDASLoginConfig:_MIDASConnectConfig; //远程登录配置
sUserName:String; //登录名称
//sLocalConfigMDBPassWord:String; //本地配置口令
sPassword:String; //登录口令
sDBUserName:String; //数据库访问用户名
sDBPassword:String; //数据库访问口令
sDBLoginTempUserName:String; //数据库登录临时用户名
sDBLoginTempPassword:String; //登录临时口令
sDefaultDataBase:String; //默认数据库
sAccountName:String; //帐套名称
sAdminPassword:String; //超级用户口令
dDate:Double; //日期
sMachineID:string;
lIsCreditVersion:Boolean; //是否会计版本
sRegString:String; //注册信息串
sRegName:String; //注册名称
nRegStationCount:Integer; //注册站点数
//检查的登录模块
Modules : _AppModules;
End;
pRemoteLoginInformation=^_RemoteLoginInformation;

_UserTableInfo=Record //登录用户表信息定义
sLogUserTableName:String;
sLogUserTableFilter:String;
sUserNameFieldName:String;
sUserPassFieldName:String;
End;
pUserTableInfo=^_UserTableInfo;

{$Define LoginVersion3}
_LoginControl=Record //登录控制
Version:_VersionInfo;
nDefaultConnectionType:Integer;
pDataConnectionPointer:pDataConnection;
sBitMapFileName : String;
sCaption : String;
sLocalConfigMDBPassWord:String; //本地配置口令
//DataConnection:_DataConnection;
//pDataConnectionConfigPointer:pDataConnectionConfig;
pLoginConfigPointer:Pointer; //可能是远程Remote或ADO访问
UserTableInfo:_UserTableInfo; //用户表信息
//检查的登录模块
Modules : _AppModules;
//权限
{$IFDef LoginVersion3}
sApplication : string; //应用程序
sThisMachineID : string; //此电脑的ID
{$EndIF}
//扩展用
{$IFDef LoginVersion3}
vUserProperties : array[0..5] of variant;
{$EndIF}
End;
pLoginControl=^_LoginControl;

//权限
_Popedom = Record //权限定义
sID : String;
nPopedom: Byte;
End;
_PopUnit = Record //权限功能单元
sID : String;
Popedoms: Array Of _Popedom;//具体权限
End;
_PopModule = Record //权限模块
sID : String;
PopUnits: Array Of _PopUnit;//具体功能单元
End;
_PopModules = Array of _PopModule; //权限模块数组
pPopedom = ^_Popedom;
pPopUnit = ^_PopUnit;
pPopModule = ^_PopModule;
pPopModules = ^_PopModules;

//TParity = (pNone, pOdd, pEven, pMark, pSpace);
_BaseComPort=Record //基本串口
sComPort : string; //串口
nBaudRate : Integer; //波特率
//
nDataBits : shortInt; //数据位
nParity : shortInt; //奇偶校验
nStopBits : real; //终止位
nFlowControl: shortInt; //流控制
//
lHwDTR : Boolean; //Data Terminal Ready
lHwRTS : Boolean; //Request To Send
lHwDSR : Boolean; //DataSet Ready
lHwCTS : Boolean; //Clear ToSend
lRs485 : Boolean; //485模式
End;
pBaseComPort=^_BaseComPort;

_SetComPortControl=Record //设置串口的控制
Version : _VersionInfo;
InitBaseComPort : _BaseComPort;
pReturnBaseComPort: pBaseComPort;
End;
pSetComPortControl=^_SetComPortControl;

//------数据库查询相关
_CountGroupBy=Record //GroupBy
lEnable:Boolean; //是否有效
lAllowToUse:Boolean; //是否可用
sCaption:String; //标题
sGroupBy:String; //分组字段:List.sItemID
//
sFromJoins : array[0..5] of string; //内部 select fittings.sType, sum(x) as x from mList left join fittings on fittings.sID=mList.sItemID group by fittings.sType
sSumNameFromJoins : array[0..5] of string; //外部 select base.sName, sumX.* from (内部) as sumX left join fitType on fitType.sID=sumX.vID
//
sLinkedTable:String; //关联表:Fittings
sLinkedField:String; //关联表的关联字段:Fittings.sID
sParentTable:String; //父表
sParentField:String; //父表字段:List.sItemID
//
sIDField : string; //分组Select的ID字段:Fittings.sID
sNameField : string; //分组Select的名称字段:Fittings.sName
sModelField : string; //规格,用不到
sFilter : string; //附加过滤条件,BILL/LIST注意统一:List.sItemID<>'' and List.nCount<>0
//
sUserField1:String; //用户使用附加字段
sUserField2:String;
sUserField3:String;
sUserField4:String;
sUserField5:String;
End;
pCountGroupBy=^_CountGroupBy;

_ViewBill=Record //调阅单据结构
Version:_VersionInfo; //版本
lIsViewEnd:Boolean; //是否结存单
//
sUseage:String; //类别码
sBillID:String; //单据号
sLinkUseage : String; //关联类型
sLinkID : String; //关联单号
//
sAddinFilter: String; //附加条件
lShowModal : Boolean;//是否模式窗体
lAllowEdit:Boolean; //允许修改否{增加日期:2008-04-20; 增加人:周承昊}
//
pControl:Pointer; //控制指针,干什么都行
pInitializeDataView:Pointer; //TNotifyEvent
//
vUserValues : Array[0..5] of variant;
End;
pViewBill=^_ViewBill;

_PrintControl=Record //打印控制
sTitle:String;
lPreview:Boolean;
lPrintDialog:Boolean;
lPreviewInModal:Boolean;
lCloseAfterPrint:Boolean;
End;
pPrintControl=^_PrintControl;

_SessionInfo=Record //期间信息结构
sID:String;
nYear:Integer;
nMonth:Integer;
dStart:tDate;
dEnd:tDate;
sSessionSign:String;
sHandler:String;
sPath:String;
sComment:String;
End;

_WorkTable=Record //根据Useage返回用到的表
Version : _VersionInfo;
sUseage : String;
sType : string; //类型,MattIn/mattOut/mattMove
sType2 : string; //采购、销售、调拨
//
sMBillTable : String;
sMListTable : String;
sMDetailTable : String;
sMTableFlag : String;
sBillIDHead : String; //编号头
nBillIDLenVer1: integer; //编号长度
sOthersUseage : String; //sOthers对应的用途代码,用SelectBase返回表信息
//sCBillTable:String;
//sCListTable:String;
//sCDetailTable:String;
sChinese : String; //中文描述
lIsBackSign : Boolean; //是否退货标志
sTempSign : String; //临时表的标志
lDebit : boolean; //是否放在借方
nMultiRate : Real; //nCount加减标记
nOrderRate : Real; //nOrder加减标记
nRoadRate : Real; //nRoad在途商品
nIndustryRate : Real; //工业相关乘除标记
sCategory : String; //类别
End;
pWorkTable=^_WorkTable;
_WorkTable2 = Record //2.0版的WorkTable物流工作表
WorkTableVer1 : _WorkTable; //包含1.0的全部信息
//其他
sID : String;
OutID : String;
//nRoadRate : Real; //在途乘率
sPrintFile : String; //打印文件
sVersionLow : String; //最低版本限制
sVersionHigh : String; //可用的最高版本
//字段特定
sStorerCaption: String; //仓库的标题
sStorerTable : string; //仓库对应表
sOthersCaption: String; //往来对方标题,加 “:”
sOthersTable : String; //对方表,不再用1.0版的sOthersUseage
sBillToTable : String; //收单方,sOthers作为收货方
sBillToUseage : String; //收单方类型
sBillToCaption: String; //收单方标题
//乘率
nOthersCountRate : Double; //业务对方的乘率
//子表
sListDBSource1: String; //子表数据源
sListDBSource2: String; //子表数据源2
sListPriceMode: String; //子表单价模式,字段,或者0
nListRate : Real; //子表默认乘率
lAllowEditPrice:Boolean; //是否允许修改价格
//成本
lWritePriceAsCost :Boolean; //是否将单价写入为成本
lWriteFitStoreHandler :Boolean; //更新保管人
lWriteFitStoreUserProperty:Boolean; //更新用户属性
lWriteFitStoreProvider:Boolean; //写入供应商
lAllowUnderCost : Boolean; //允许低于成本
lAutoFIFO : Boolean; //自动先入先出
//nCostType : Real; //成本核算方向
nCostRate : Real; //成本核算乘率
sCostMoneyField : String; //成本核算字段

//财务相关
sCreditTemplate : string; //会计模板
//sCashUseage : string; //(应收-实收)计入何单据,比如采购计入“应付借方”;采退计入“应付款贷方”;结合nCashWay使用
//nCashWay : Real; //欠款额方向,1:我方/0:不计/-1:对方
nReceivableRate : double; //应收款率
nPayableRate : double; //应付款率
//权限
sPopModule : String; //权限模块
sPopUnit : String; //权限单元
//状态
sStatus : String; //处理后仓库方货品状态
sOthersStatus : String; //业务对方货品状态
//其他
lAlertNoPropertyStore : Boolean; //当库存中没有属性值时警示一下
End;
pWorkTable2=^_WorkTable2;

_CashTable = Record //财务单据定义
Version : _VersionInfo;
sUseage : String;
sMBillTable : String;
sMListTable : String;
sMDetailTable : String;
sMTableFlag : String;
lWithList : Boolean; //有否子表
lSelfBankID : Boolean; //我方是否需要BankID
//
sStorerCaption: String; //仓库标题
sOthersCaption: String; //对方标题
sOthersUseage : String; //sOthers对应的用途代码,用SelectBase返回表信息
sCashItemID : String; //默认收支项目号
sMoneyField : String; //我方的金额记录字段
sOthersMoneyField:String; //对方的金额记录字段
//
nMultiRate : Real; //我方加减标记
nOthersRate : Real; //对方的加减标记
//
sBillIDHead : String; //编号头
sChinese : String; //中文描述
sPopModule : String; //权限模块
sPopUnit : String; //权限单元
sCategory : String; //类别
sInformation : String; //附带信息
End;
pCashTable=^_CashTable;

_FieldDisplay=Record //字段显示属性
sFieldName:String; //[100]
sDisplayLabel:String; //[100]
nDisplayWidth:Integer;
sTable:String; //[254]
lReadOnly:Boolean;
lVisible:Boolean;
End;
pFieldDisplay=^_FieldDisplay; //指针
_FieldDisplays = Array Of _FieldDisplay; //数组
pFieldDisplays =^_FieldDisplays; //数组指针

_EditBase=Record //嵌套在_SelectBase中的定义
pEditBaseProcPointer:Pointer; //指向 _EditBaseProc
lEnabled:Boolean;
End;
pEditBase=^_EditBase;
_SelectBase=Record //选择信息
Version:_VersionInfo;
sTable:String; //要选择的基本信息表
nSelectType:Integer; //默认选择方式
nExactMode:Integer; //精确模式
sIDField:String; //sID对应字段 nID
sIDHead:String; //编号头
sNameField:String; //sName对应字段 sCaption
sShortField:String; //简码字段
sUseage:String; //用途代码
sIDFieldType:String; //Key字段的类型
vSelectedID:Variant; //被选择的编号
vSelectedName:Variant; //被选择的名称
sOrderByField:String; //排序
sWhereFilter:String; //携带的过滤条件 sSection='00002'
sCaption:String; //窗体标题
//
lAllowZero:Boolean; //是否允许清零功能
sNetSpeed:String; //使用网络参数
sExtendProperties:String; //附加属性
EditBase:_EditBase; //按下“修改按钮”时的处理
//
sUser1Field:String; //允许自己定义的要求字段
sUser2Field:String;
sUser3Field:String;
sUser4Field:String;
sUser5Field:String;
sUser6Field:String;
sUser7Field:String;
sUser8Field:String;
sUser9Field:String;
sUser10Field:String;
vUser1Value:Variant; //允许自己定义的部分的返回值
vUser2Value:Variant;
vUser3Value:Variant;
vUser4Value:Variant;
vUser5Value:Variant;
vUser6Value:Variant;
vUser7Value:Variant;
vUser8Value:Variant;
vUser9Value:Variant;
vUser10Value:Variant;
pControl : Pointer;
End;
pSelectBase=^_SelectBase; //指针
_SelectBaseControl = Record //控制
pAdoConnectionPointer:Pointer;
sConnectionString:String;
pSelectBasePointer:Pointer;
sDefaultSearchExpress:String; //默认搜索字符串
//
pFieldDisplayPointer:Pointer;
nFieldDisplayCount:Integer;
//fsFormStyle:tFormStyle;
End;
pSelectBaseControl=^_SelectBaseControl; //指向控制的指针
_EditBaseData=Record //SelectBase编辑时传给函数的数据
SelectBase:_SelectBase;
vCurrentID:Variant;
vCurrentName:Variant;
End;
pEditBaseData=^_EditBaseData;
_EditBaseProc= //在SelectBase时“修改”按钮按下执行的代码
Function(EditBaseData:_EditBaseData):Boolean; StdCall;
pEditBaseProc=^_EditBaseProc;

_BaseInfo=_SelectBase;
pBaseInfo=^_BaseInfo;

_BaseTable = Record //基础资料表定义
Version : _VersionInfo; //版本
//从别的定义中引用
BaseInfo : _BaseInfo; //公用,通用
//
sUseage : String; //用途标记码
sID : String; //编号
OutID : String; //自定义号
lEnable : Boolean;
lSysFlag : Boolean;
End;
pBaseTable = ^_BaseTable;

_DynaDllProc=Record //动态调用DLL时获取函数地址
sDLLFile:String;
nDLLHandle:tHandle;
sProcedureName:String;
nProcPointer:Pointer;
End;
pDynaDllProc=^_DynaDllProc;
_DialCallInfo=Record //呼死你的待呼叫号码信息
sPhoneNo:String;
sName:String;
nCallCount:Integer;
nReceiveCount:Integer;
sGroup:String;
sAddress:String;
Version:_VersionInfo;
End;
pDialCallInfo=^_DialCallInfo;
_PDUSMSMail=Record //PDU格式的手机短信结构,未编码
//08 91 中心编码 11 00 被叫号码长度 被叫号码类型 被叫号码 短信编码类型 短信长度 短信内容
//短信编码类型:0000A7为GSM默认Alpha,中文为000010
nMailCenterLen:ShortInt; //08,中心号码长度
nMailCenterMode:ShortInt; //91,中心类型
sMailCenterNo:ShortString; //中心号8613805515500=>683108501505F0,F表示减短1位
nSendMode:ShortInt; //11,短信发送方式,11表示正常
nMessageMode:ShortInt; //00,信息类型
nPhoneLen:ShortInt; //$0B,被叫号码长度
nPhoneMode:ShortInt; //11,被叫号码类型
sPhoneNo:ShortString; //被叫号码13605696031=>3106656930F1
nMessageEncodeMode:Integer; //10,信息编码类型,中文000010,默认0000A7
nMessageLen:ShortInt; //信息长度
sMessage:WideString; //信息内容
End;
pPDUSMSMail=^_PDUSMSMail;

_DiskSerialInfo=Record //磁盘序列号、卷标等
nVolumnSerial :dWord;
sVolumnSerial :String[254];
sVolumnLabel :String[254]; //Array[0..10] of Char;
sFatType :String[254]; //Array[0..7] of Char;
nMaxFileNameLength:dWord; //文件系统名最长
nFileSystemFlag :dWord;
InforLevel :Word;
End;
pDiskSerialInfo=^_DiskSerialInfo;

_FieldView=Record //字段显示
sFieldName:String;
sCaption:String;
nWidth:Integer;
lVisible:Boolean;
End;
pFieldView=^_FieldView;

_BarcodeConfig = record
sBeginChar : string; //条码起始符
sEndChar : string; //条码终止符
end;

//数据范围
const
ibBegin=0; ibCurrent=1;
ieEnd=0; ieCurrent=ibCurrent; ieCount=$FF;
type
_DataRecordRange=Record //数据范围
data : TDataSet;
rangeBegin : Integer;
rangeEnd : Integer;
rangeCount : Integer;
end;
pDataRecordRange = ^_DataRecordRange; //指针

Const
sAccessConnectionStringFormat='Provider=Microsoft.Jet.OLEDB.4.0;Locale Identifier=2057;Persist Security Info=False;'+
'User ID=Admin;Data Source=%s;Jet OLEDB:Database Password=%s';
//Excel连接字符串,HDR:HeaD Row:首行为字段名, IMEX:包含不同类型的数据
sExcelConnectionStringFormat= 'Provider=Microsoft.Jet.OLEDB.4.0;Locale Identifier=2057;User ID=Admin;'+
'Extended Properties=''Excel 8.0;HDR=Yes;IMEX=1;'';Mode=Share Deny None;'+
'Data Source=%s;Password=%s';
sDBFConnectionStringFormat = 'Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Extended Properties=dbase 5.0;'+
'Data Source=%s';
sDBFConnectionStringFormat2 = 'Provider=MSDASQL.1;Persist Security Info=False;User ID=Admin;Data Source=dBASE Files;'+
'Initial Catalog=%s';
sSQLConnectionStringFormat='Provider=SQLOLEDB.1;Persist Security Info=True;'+ {Persist Security Info=True如果不加,在win7下连sql2000出问题}
'Data Source=%s;Initial Catalog=%s;User ID=%s;Password=%s;';
{sSQLConnectionStringFormatTcpipPort='Provider=SQLOLEDB.1;'+
'Data Source=tcp:%s,%s;Initial Catalog=%s;User ID=%s;Password=%s'; }
sOpenDataSourceAccessFormat = 'OpenDataSource(''Microsoft.Jet.OLEDB.4.0'', '+
'''Data Source=%s; Locale Identifier=2057; User ID=Admin; Jet OLEDB:Database Password=%s'')';
//
sClassIDWordDocument8='00020906-0000-0000-C000-000000000046';
//////////成本核算方式
nCostModeDefault = 0; //自动,默认
nCostModeHandle = 1; //手工调整成本
nCostModeMove = 2; //移动加权
nCostModeBatch = 3; //加权平均
nCostModeCheckOne = 4; //个别计价法〔批号计价〕
nCostModeFIFO = 5; //先入先出,原来是4
nCostModeFILO = 6; //后入先出,原来是5
//
CostModes : array[nCostModeDefault..nCostModeFILO] of _NumberNameValue =
( (nValue:nCostModeDefault; sName:'默认(系统设置)'),
(nValue:nCostModeHandle; sName:'手工调整'),
(nValue:nCostModeMove; sName:'移动加权'),
(nValue:nCostModeBatch; sName:'加权平均'),
(nValue:nCostModeCheckOne; sName:'个别计价'),
(nValue:nCostModeFIFO; sName:'先入先出'),
(nValue:nCostModeFILO; sName:'先入后出')
);

//----------------------------全局代码定义段----------------------------------//
function initializeVersionInfo(var value:_VersionInfo):boolean;
Function InitializeLoginControl(Var value:_LoginControl; Ver:_VersionInfo):Boolean;
Function InitializeDataConnection(Var DataConn:_DataConnection; Ver:_VersionInfo):Boolean;
Function InitializeDataConfig(Var DConfig:_DataConnectionConfig; Ver:_VersionInfo):Boolean;
Function InitializeSetupData(Var SDC:_SetupDataConnection; Ver:_VersionInfo):Boolean;
Function InitializeMidasConfig(Var MC:_MIDASConnectConfig; Ver:_VersionInfo):Boolean;
Function InitializeBaseComPort(Var value:_BaseComPort):Boolean;
Function InitializeSetBaseComePort(Var SCPC:_SetComPortControl):Boolean;
Function InitializeUserTableInfo(Var UTI:_UserTableInfo):Boolean;
Function InitializeViewBill(var vb:_ViewBill):Boolean;
Function InitializeSelectBase(var db:_SelectBase):Boolean;
function initializeDataRecordRange(var db:_DataRecordRange):Boolean;
Function IsValidHandle(AHandle:THandle):Boolean; //是否有效句柄
function initializeWorkTable(var value:_WorkTable2):Boolean;
function initializeBarcodeConfig(var value:_BarcodeConfig):boolean;
procedure initializeSetFormView(var value:_setFormView);
function initializeOemInfo(var Value:_OemInfo):Boolean;
procedure initializeCountGroupBy(var value:_countGroupBy);
//关联条件And,用做查询的“LK”,例如: sF:=sF+LinkFilter(sF)+' Bill.nYear=2006'
Function LinkFilter(sFilterBase:String=''; sLinkOpt:String=' And '):String;
Function linkFilterTo(var sFilterBase:string; sNewWhere:string; sLinkOpt:string=' And '):string;
//加密字符串:XOR方式
function EncodeStrXor(str:string; nXor:shortInt=nDefaultXorPassWordLog):string;
function encodeLoginPassword(sPass:string; nXor:shortInt=nDefaultXorPassWordLog):string; //加密登录密码
function decodeLoginPassword(sPass:string; nXor:shortInt=nDefaultXorPassWordLog):string; //解密登录密码
//是个端口字符串
function isHardWarePortString(s:string):Boolean;
//拆分字符串
function splitString(Str:string; const SubStr: string): TStringList; overLoad;
function splitString(var SList:TStringList; Str:string; const SubStr: string):boolean; overLoad;


//----------------------------全局代码实现段----------------------------------//
implementation


//拆分字符串,从xmlUtils.Split0拷过来的。下列方法都可以简单的实现这个拆分功能:
//Classes.ExtractStrings、StringReplace(str,subStr,#13#10)、StringList1.Delimiter和DelimitedText
function splitString(var SList:TStringList; Str:string; const SubStr: string):boolean;
var
S, Tmp: string;
I: Integer;
begin
result:=false;
if not assigned(sList) then Slist := TStringList.Create; //创建出来
SList.Clear;
S := Str;
while (length(S) > 0) do
begin
I := pos(substr, S); //AnsiPos
if (I = 0) then
begin
Slist.Add(s);
delete(S, 1, length(S));
end
else
begin
if (I = 1) then
begin
sList.add(''); //空项目,例如: ,编号,10
delete(S, 1, length(SubStr));
end
else
begin
Tmp := S;
delete(Tmp, I, length(Tmp));
slist.Add(Tmp);
delete(S, 1, I + length(SubStr)-1);
end;
end;
end;
Result := true;
end;
//另一种拆分方法
function SplitString(Str:string; const SubStr: string): TStringList;
begin
result:=TStringList.create;
SplitString(result, str, subStr); //拆分方式2
end;
//是个端口字符串
function isHardWarePortString(s:string):Boolean;
var i:integer; s2:string;
begin
result:=false;
if pos(s, '*')>0 then exit; //包含星号的,肯定不是端口
//判断端口字符
for i:=1 to 30 do begin
s2:=chr(byte(i)+ord('0'));
result:=s='LPT'+s2;
if not result then result:=s='COM'+s2;
if not result then result:=s='USB'+s2;
if result then exit;
end;
end;
//解密登录密码,因为XOR是可逆的
function decodeLoginPassword(sPass:string; nXor:shortInt=nDefaultXorPassWordLog):string;
begin
result:=encodeLoginPassword(sPass, nXor);
end;
//加密登录密码
function encodeLoginPassword(sPass:string; nXor:shortInt=nDefaultXorPassWordLog):string;
begin
result:=encodeStrXor(sPass, nXor);
end;
//加密一个简单字符串
function EncodeStrXor(str:string; nXor:shortInt=nDefaultXorPassWordLog):string;
var s:String; i, n:integer;
begin
result:=''; s:=str;
for i:=1 to length(s) do begin
n:=ord(s[i]) xor nXor;
s[i]:=chr(n);
end;
result:=s;
end;
//初始化版本信息
function initializeVersionInfo(var value:_VersionInfo):boolean;
var i:integer;
begin
value.dwOSVersionInfoSize:=sizeOf(value);
value.dwMajorVersion:=1;
value.dwMinorVersion:=0;
value.dwBuildNumber:=0;
value.dwPlatformId:=0;
value.szCSDVersion:='';
value.sProjectName:='';
end;
//初始化OEM信息
function initializeOemInfo(var Value:_OemInfo):Boolean;
begin
result:=false;
value.sOemCompany:='';
value.sOemPassword:='';
value.sOemCompanyShort:='';
value.sOemLicenseFile:='';
value.sOemFormHint:='';
value.sOemLogoImgFile:='';
value.pAddins:=nil;
result:=true;
end;
//初始化统计结构
procedure initializeCountGroupBy(var value:_countGroupBy);
begin
value.lEnable:=true;
value.lAllowToUse:=true;
value.sCaption:='';
value.sGroupBy:='';
end;
//初始化工作表
function initializeWorkTable(var value:_WorkTable2):Boolean;
begin
result:=false;
//
value.sID:='';
value.nOthersCountRate:=0;
value.nListRate:=1;
value.nCostRate:=1;
value.nReceivableRate:=0;
value.nPayableRate:=0;
value.lAllowEditPrice:=false;
value.lWritePriceAsCost:=false;
value.lWriteFitStoreHandler:=false;
value.lWriteFitStoreUserProperty:=false;
value.lWriteFitStoreProvider:=false;
value.lAllowUnderCost:=false;
value.lAutoFIFO:=false;
value.lAlertNoPropertyStore:=false;
//
value.WorkTableVer1.nBillIDLenVer1:=4;
value.WorkTableVer1.sBillIDHead:='';
value.WorkTableVer1.nMultiRate:=1;
value.WorkTableVer1.nOrderRate:=0;
value.WorkTableVer1.nRoadRate:=0;
value.WorkTableVer1.nIndustryRate:=0;
value.WorkTableVer1.sUseage:='';
value.WorkTableVer1.lIsBackSign:=false;
value.WorkTableVer1.lDebit:=false;
//
result:=true;
end;
//条码设置
function initializeBarcodeConfig(var value:_BarcodeConfig):boolean;
begin
value.sBeginChar:='';
value.sEndChar:='';
//
result:=true;
end;
//
function initializeDataRecordRange(var db:_DataRecordRange):Boolean;
begin
{type
rangeBegin = set of (ibBegin, ibCurrent); //测试range和数字的转换
rangeEnd = set of (ieEnd, ieCurrent, ieCount);
showMessage('ibBegin:'+variants.VarToStr(ibBegin));
if variants.VarAsType(ibCurrent, vtInt64)=1 then showMessage('ibCurrent=1'); }
result:=false;
//
db.data:=nil;
db.rangeBegin:=ibBegin;
db.rangeEnd:=ieEnd;
db.rangeCount:=0;
//
result:=True;
end;
//初始化设置的控制变量
procedure initializeSetFormView(var value:_setFormView);
var i:integer;
begin
initializeVersionInfo(value.version);
value.sFormName:='';
value.objTable:=nil;
value.sXmlFilePath:='Views';
value.sXmlFileName:='';
value.sLanguage:='zh-cn';
value.sUser:='public';
for i:=low(value.vReserve) to high(value.vReserve) do value.vReserve[i]:=null;
end;
//初始化 SelectBase
Function InitializeSelectBase(var db:_SelectBase):Boolean;
Begin
result:=false;
//
db.sTable:='';
db.nSelectType:=nSelectBaseByShort+1; //默认为拼音码
db.nExactMode:=nSelectBaseExtractModeFirst; //从头选择
db.sIDField:='';
db.sIDHead:='';
db.sShortField:='';
db.sUseage:='';
db.sWhereFilter:='';
db.sCaption:='';
//
db.lAllowZero:=true;
db.sNetSpeed:='';
db.sExtendProperties:='';
//
db.EditBase.pEditBaseProcPointer:=nil;
db.EditBase.lEnabled:=True;
//
db.pControl:=nil;
//
result:=true;
End;
//是否有效句柄
Function IsValidHandle(AHandle:THandle):Boolean;
var n, n2, h:int64; //dword
begin
h:=AHandle; //DWord(AHandle)
n:=$FFFF0000; //FFFFFF6B DWORD
result:=(AHandle>0);
result:=result and (AHandle<n); //AHandle<>$FFFFFF6B
n2:=INVALID_HANDLE_VALUE;
n2:=n2 - h;
result:=result and (n2>10000);
end;
//初始化调阅单据
Function InitializeViewBill(var vb:_ViewBill):Boolean;
var i:integer;
begin
result:=false;
//
vb.lIsViewEnd:=False;
vb.sUseage:='';
vb.sBillID:='';
vb.sLinkUseage:='';
vb.sLinkID:='';
//
vb.lShowModal:=true;
vb.sAddinFilter:='';
vb.lAllowEdit:=True; //可以编辑,2012-7-9之前是False
//
vb.pControl:=nil;
vb.pInitializeDataView:=nil;
//
for i:=low(vb.vUserValues) to high(vb.vUserValues) do vb.vUserValues[i]:=null;
//
result:=true;
end;
//-----初始化设置基本串口的控制
Function InitializeSetBaseComePort(Var SCPC:_SetComPortControl):Boolean;
Begin
Result:=False;

SCPC.pReturnBaseComPort:=nil;
InitializeBaseComPort( SCPC.InitBaseComPort );

Result:=True;
End;
//-----初始化基本串口设置
Function InitializeBaseComPort(Var value:_BaseComPort):Boolean;
Begin
Result:=False;
//
value.sComPort :='';
value.nBaudRate:=9600; //默认波特率9600

value.nDataBits:=8; //数据位8
value.nStopBits:=1; //停止位1

value.nParity:=-1; //奇偶校验
value.nFlowControl:=-1; //

value.lRs485 := False;
value.lHwDTR := False;
value.lHwRTS := False;
value.lHwDSR := False;
value.lHwCTS := False;
//
Result:=True;
End;
//-----初始化登录控制
Function InitializeLoginControl(Var value:_LoginControl; Ver:_VersionInfo):Boolean;
var i:integer;
Begin
Result:=False;
//
value.Version:=Ver;
value.nDefaultConnectionType:=nConnectionTypeLocalNet;
value.pLoginConfigPointer:=Nil; //返回参数
value.pDataConnectionPointer:=nil; //直接使用连接
//
value.sBitMapFileName:='';
value.sCaption:='';
value.sLocalConfigMDBPassWord:='';
//
{$IFDef LoginVersion3}
value.sApplication:=''; //应用程序
value.sThisMachineID:=''; //此电脑的ID
{$EndIF}
//LoginC.pDataConnectionConfigPointer:=nil; //使用连接配置
InitializeUserTableInfo(value.UserTableInfo);
//检查的登录模块
for i:=low(value.Modules) to high(value.Modules) do value.Modules[i]:='';
//扩展用
{$IFDef LoginVersion3}
for i:=low(value.vUserProperties) to high(value.vUserProperties) do value.vUserProperties[i]:=null;
{$EndIF}
//
Result:=True;
End;
//-----初始化用户信息表
Function InitializeUserTableInfo(Var UTI:_UserTableInfo):Boolean;
Var U:_UserTableInfo;
Begin
Result:=False;
//
U.sLogUserTableName:='LogUsers';
U.sLogUserTableFilter:='';
U.sUserNameFieldName:='sUserName';
U.sUserPassFieldName:='sPassWord';
//
UTI:=U;
Result:=True;
End;
//-----配置数据访问的初始化
Function InitializeSetupData(Var SDC:_SetupDataConnection; Ver:_VersionInfo):Boolean;
Var DC:_DataConnectionConfig;
Begin
Result:=False;
//
SDC.Version:=Ver;
SDC.pDefaultDataConnectionConfig:=nil;
SDC.pReturnDataConnectionConfig:=nil;
//InitializeDataConfig( SDC.DefaultDataConnection,Ver );
//
Result:=True;
End;
//
Function InitializeDataConfig(Var DConfig:_DataConnectionConfig; Ver:_VersionInfo):Boolean;
Begin
Result:=False;
//
DConfig.Version:=Ver;
DConfig.sAdoConnectionString:='';
DConfig.nConnectionType:=nConnectionTypeLocalNet;
InitializeMidasConfig( DConfig.MIDASConfig, Ver );
//
Result:=True;
End;
//配置MIDAS
Function InitializeMidasConfig(Var MC:_MIDASConnectConfig; Ver:_VersionInfo):Boolean;
Begin
Result:=False;
//
MC.Version:=Ver;
MC.nConnectionType:=nConnectionTypeDCom;
MC.sServerGUID:='';
MC.sServerHost_URL:='127.0.0.1';
MC.nServerSocketPort:=211;
MC.sServerWebProxy:='';
MC.sServerWebUserName:='';
MC.sServerWebPassword:='';
MC.sServerWebProxyByPass:='';
MC.sServerInterceptGUID:='';
//
Result:=True;
End;
//-----初始化数据访问
Function InitializeDataConnection(Var DataConn:_DataConnection; Ver:_VersionInfo):Boolean;
Begin
Result:=False;
DataConn.Version:=Ver;
//本地
DataConn.nConnectionType:=nConnectionTypeLocalNet;
DataConn.LanConnectParamType:=AdoConnection;
DataConn.pAdoConnectionPointer:=nil;
DataConn.psConnectionString:=nil;
//Remote
DataConn.nConnectionType:=nConnectionTypeDCOM;
DataConn.sProviderName:='';
DataConn.pCustomRemoteServerPointer:=Nil;
//
DataConn.nConnectionType:=nConnectionTypeLocalNet;
DataConn.sDBUserName:='';
DataConn.sDBPassWord:='';
Result:=True;
End;
//关联条件And,用做查询的“LK”,例如: sF:=sF+LinkFilter(sF)+' Bill.nYear=2006'
Function LinkFilter(sFilterBase:String=''; sLinkOpt:String=' And '):String;
var s:String;
Begin
s:=sLinkOpt; if s='' then s:=' And ';
if sFilterBase='' then Result:='' else Result:=s;
End;
Function linkFilterTo(var sFilterBase:string; sNewWhere:string; sLinkOpt:string=' And '):string;
var s:String;
begin
s:=linkFilter(sFilterBase, sLinkOpt);
sFilterBase:=sFilterBase+s+sNewWhere;
result:=sFilterBase;
end;

end.

 

posted @ 2016-02-25 16:20  海宏软件  阅读(254)  评论(0编辑  收藏  举报