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

📄 commfun.pas.svn-base

📁 这是一个功能齐全的,代码完整的ERP企业信息管理系统,现在上传和大家分享
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
    begin
      if TCustomEdit(Sender).SelLength = 0 then
        AResult:=Pos(DecimalSeparator, TCustomEdit(Sender).Text) = 0
      else
      begin
        AResult:=Pos(DecimalSeparator, TCustomEdit(Sender).Text) = 0;
        if not AResult then
          AResult:=Pos(DecimalSeparator, TCustomEdit(Sender).SelText) <> 0;
      end;
    end
    else if (Key = '+') or ( Key = '-') then
      AResult:=(TCustomEdit(Sender).SelStart=0) and (Pos('+', TCustomEdit(Sender).Text)=0) and (Pos('-',TCustomEdit(Sender).Text)=0);
  end;
  if not AResult then Key:=#0;
end;

//计算注册码
function Registered(AHardWareNo,AProduct:string):string;
var
  Hex:string;
  Pass:string;
  I:integer;
  A1:integer;
begin
  Hex:='432545123581725349856199312393842302983710039485757679302020102938'+
       '384742513790449731514257394049473647594039276154312214263785995607'+
       '079752413134565786979708080807986756463535242424425264785960809907'+
       '095847366252442334485907099049281010299383849585877586949';
  Pass:=AProduct+AHardWareNo;
  for I:=1 to Length(Pass) do
  begin
    A1:=Ord(Pass[I])+5*I;
    Pass[I]:=Hex[A1 mod 255];
  end;
  Result:=Pass;
end;

//取得本机的名称
function ComputerName:string;
var
  AComputerName: array[0..MAX_COMPUTERNAME_LENGTH+1] of char;
  ASize: DWord;
begin
  ASize:=MAX_COMPUTERNAME_LENGTH+1;
  GetComputerName(AComputerName, ASize);
  Result:=StrPas(AComputername);
end;

//取得报表名称
function GetReportName(ARepName: string):string;
begin
  Result:=ASystemPath+'Report\'+ARepName;
  if AVerPath<>ASystemPath then
  begin
    Result:=AVerPath+ARepName;
    if FileExists(Result) then Exit;
    Result:=ASystemPath+'Report\'+ARepName;
  end;
end;

//取硬盘序列号
function GetHDSerialNumber:String;
var
  VolumeSerialNumber : DWORD;
  MaximumComponentLength : DWORD;
  FileSystemFlags : DWORD;
  AHostName:string;
begin
  AHostName:='';
  if copy(ASystemPath,1,2)='\\' then     
  begin
    AHostName:=copy(ASystemPath,3,Length(ASystemPath)-2);
    AHostName:=copy(AHostName,1,Pos('\',AHostName)-1);
  end;
  Result:=trim(GetMacAddress(AHostName));
  if Result='' then Result:=trim(GetIdeDiskSerialNumber);
  if Result='' then
  begin
    GetVolumeInformation('C:\', nil, 0, @VolumeSerialNumber, MaximumComponentLength, FileSystemFlags, nil, 0);
    Result := IntToHex(HiWord(VolumeSerialNumber), 4) + IntToHex(LoWord(VolumeSerialNumber), 4);
  end;
end;

//取得数据库中的字符串
function GetDBString(ID:String;AFlag:Integer=1):String;
var
  AName,AHint:string;
begin
  Result:=ID;
  if SYSDM=nil then Exit;
  if not SYSDM.qryLangs.Active then Exit;
  if not SYSDM.qryLangs.Locate('LangID',ID,[]) then Exit;

  AName:=trim(SYSDM.qryLangs.FieldByName('Name').AsString);
  AHint:=trim(SYSDM.qryLangs.FieldByName('Hint').AsString);
  case AFlag of
    1:if AName='' then Result:=ID else Result:=AName;
    2:if AHint='' then Result:=ID else Result:=AHint;
  end;
end;

//阿拉伯数字转成大写数字
function Money_convert(N:Double):String;
const
  Str1:array[1..10] of String=('拾','亿','千','百','拾','万','千','百','拾','元');
  Str2:array[1..2]  of String=('角','分');
  Str3:array[0..9]  of String=('零','壹','贰','叁','肆','伍','陆','柒','捌','玖');
var
  S,S1,S2,S3,S4,S5,S6:String;
  I,J,N1,N2:Integer;
begin
  Result:='';
  S:=FloatToStr(N);i:=Pos('.',S);
  if I=0 then I:=Length(S)+1;
  S1:=Copy(S,1,I-1);  S2:=Copy(S,I+1,Length(S)-i);
  if (Length(S1)>9) or (Length(S2)>2) then
  begin
    ShowMsg('UMS10000011');  //数值太大
    Exit;
  end;
  if Length(S1)>5 then
  begin
    S3:=Copy(S1,1,Length(s1)-5);  S4:=Copy(S1,Length(S1)-5+1,5);
  end else
  begin
    S3:='';  S4:=S1;
  end;
  S5:='';  J:=1;  I:=Length(S3);
  while J<=I do
  begin
    N1:=StrToInt(Copy(S3,J,1));
    if n1<>0 then
      S5:=S5+Str3[N1]+Str1[5-I+J]
    else
      if Copy(S5,Length(S5)-1,2)<>Str3[0] then S5:=S5+Str3[0];
     J:=J+1;
  end;
  //
  J:=1;  I:=Length(S4);  S:='';
  while J<=I do
  begin
    N1:=StrToInt(Copy(S4,J,1));
    if n1<>0 then
      S:=S+Str3[N1]+Str1[10-I+J]
    else
      if Copy(S,Length(S)-1,2)<>Str3[0] then
        S:=S+Str3[0];
    J:=J+1
  end;
  if Copy(S5,Length(S5)-1,2)=Str3[0] then
  begin
    if Copy(S,1,2)=Str3[0] then S5:=Copy(S5,1,Length(S5)-2)+Str1[6];
    //else if Length(s)=0 then s5:=Copy(s5,1,Length(s5)-2)+Str1[6];
  end else
  begin
    if (Length(S5)=0) and (Copy(S,Length(S)-1,2)=Str3[0]) then
      S:=Copy(S,1,Length(S)-2)+Str1[10]
    else
      if (Copy(S5,Length(S5)-1,2)<>Str1[6]) and (Copy(S,1,2)=Str3[0]) then
        S5:=S5+Str1[6];
  end;
  if Copy(S,Length(s)-1,2)=Str3[0] then
    S:=Copy(S,1,Length(S)-2)+Str1[10];
  //
  S6:='';
  if Length(S2)=2 then
  begin
    N1:=StrToInt(Copy(S2,1,1));  N2:=StrToInt(Copy(S2,2,1));
  end else
  begin
    if Length(S2)=1 then
    begin
      N1:=StrToInt(Copy(S2,1,1));  N2:=0;
    end else
    begin
      N1:=0;  N2:=0;
    end;
  end;
  if N1=0 then
  begin
    if N2=0 then
      S6:=''
    else
      S6:=Str3[0]+Str3[N2]+Str2[2];
  end else
  begin
    if N2=0 then
      S6:=Str3[n1]+Str2[1]
    else
      S6:=Str3[n1]+Str2[1]+Str3[N2]+Str2[2];
  end;
  Result:=S5+S+S6;
end;

procedure EveryUnit(const Name:string;NameType:TNameType;Flags:Byte;Param:Pointer);
begin
  case NameType of
    ntContainsUnit:AContainsUnit.Add(Name);
//    ntDcpBpiName:ADcpBpiName.Add(Name);
//    ntRequiresPackage:ARequiresPackage.Add(Name);
  end;
end;

//动态载入Package
function LoadPack(APackName:String):Boolean;
var
  APackage:THandle;
  Flags:Integer;
begin
  try
    APackName:=UpperCase(APackName);
    APackage:=LoadPackage(APackName);
    APackageHandle.Add(IntToStr(APackage));
    GetPackageInfo(APackage, @APackage, Flags, EveryUnit);
    Result:=True;
  except
    Result:=False;
  end;
end;

//创建Package中的Form
function CreateFormInPackage(AFormName:string;AParent:TPanel):TForm; overload;
var
  AClass: TClass;
  AForm: TForm;
begin
  try
    Screen.Cursor:=crHourGlass;
    Result:=nil;
    AClass:=GetClass(AFormName);
    if AClass=nil then
    begin
      Screen.Cursor:=crDefault;
      ShowMsg('UMS10000056');  //选择的程序模块没有安装,请与软件供应商联系
      Abort;
    end else
    begin
      Application.CreateForm(TComponentClass(AClass), AForm);
      AForm.Parent:=AParent;
      AForm.Align :=Alclient ;
      AForm.BorderStyle:=bsNone;
      Screen.Cursor:=crDefault;
      Result:=AForm;
      AForm.Show;
    end;
  finally
    Screen.Cursor:=crDefault;
  end;
end;

//创建Package中的Form
function CreateFormInPackage(AFormName:string;AFlag:Boolean):Integer; overload;
var
  AClass: TClass;
  AForm: TForm;
begin
  try
    Screen.Cursor:=crHourGlass;
    AStartTime:=GetTickCount;
    Result:=0;
    AClass:=GetClass(AFormName);
    if AClass=nil then
    begin
      Screen.Cursor:=crDefault;
      ShowMsg('UMS10000056');  //选择的程序模块没有安装,请与软件供应商联系
      Exit;
    end else
    begin
      if AFlag then ShowWaitForm;
      Application.CreateForm(TComponentClass(AClass), AForm);
      if AFlag then CloseWaitForm;
      ShowRunTime;  //显示程序执行时间
      Result:=AForm.ShowModal;
      Screen.Cursor:=crDefault;
    end;
  finally
    Screen.Cursor:=crDefault;
  end;
end;

//取系统参数
function GetSysParams(AKeyID:string):string;
begin
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select S000_001, S000_002 from SYS000 where S000_001='+''''+AKeyID+'''');
  SYSDM.qryQuery.Open;
  if not SYSDM.qryQuery.IsEmpty then
    Result:=trim(SYSDM.qryQuery.Fields[1].AsString)
  else
    Result:='';
end;

//设置系统参数
procedure SetSysParams(AKeyID,AValue:string);
begin
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select S000_001, S000_002 from SYS000 where S000_001='+''''+AKeyID+'''');
  SYSDM.qryQuery.Open;
  if not SYSDM.qryQuery.IsEmpty then
  begin
    SYSDM.qryQuery.Edit;
    try
      if AValue='' then
        SYSDM.qryQuery.FieldByName('S000_002').Clear
      else
        SYSDM.qryQuery.FieldByName('S000_002').AsString:=AValue;
      SYSDM.qryQuery.Post;
    except
      ShowMsg('UMS10000005');  //保存失败,请检查数据输入是否正确
      Abort;
    end;
  end else
  begin
    SYSDM.qryQuery.Insert;
    try
      SYSDM.qryQuery.FieldByName('S000_001').AsString:=AKeyID;
      SYSDM.qryQuery.FieldByName('S000_002').AsString:=AValue;
      SYSDM.qryQuery.Post;
    except
      ShowMsg('UMS10000005');  //保存失败,请检查数据输入是否正确
      Abort;
    end;
  end;
end;

//是否允许修改编号
function GetIsModifyCoding(ACode:string):Boolean;
begin
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select * from SYS900 where S900_001='+''''+ACode+'''');
  SYSDM.qryQuery.Open;
  if SYSDM.qryQuery.IsEmpty then 
    Result:=True 
  else
    Result:=SYSDM.qryQuery.FieldByName('S900_012').AsBoolean;
end;

//是否自动编号
function GetAutoCoding(ACode:string):Boolean;
begin
  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select * from SYS900 where S900_001='+''''+ACode+'''');
  SYSDM.qryQuery.Open;
  if SYSDM.qryQuery.IsEmpty then 
    Result:=False 
  else
    Result:=SYSDM.qryQuery.FieldByName('S900_008').AsBoolean;
end;

//取单号
function GetNumber(AKeyID:String):String;
var
  APre,APost,ALink,ANum,ARule,ATableName,AFieldName:string;
  ADate,AYear4,AYear2,AMonth,ADay,S:string;
  ANo:Integer;
begin
  ADate:=FormatDateTime('yyyy-mm-dd',GetServerDate);
  AYear4:=copy(ADate,1,4);
  AYear2:=copy(AYear4,3,2);
  AMonth:=copy(ADate,6,2);
  ADay:=copy(ADate,9,2);

  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select * from SYS900 where S900_001='+''''+AKeyID+'''');
  SYSDM.qryQuery.Open;
  APre:=SYSDM.qryQuery.FieldByName('S900_003').AsString;   //前缀
  APost:=SYSDM.qryQuery.FieldByName('S900_004').AsString;   //后缀
  ALink:=SYSDM.qryQuery.FieldByName('S900_005').AsString;   //连接符
  ANum:=SYSDM.qryQuery.FieldByName('S900_006').AsString;   //起始编号
  ARule:=SYSDM.qryQuery.FieldByName('S900_007').AsString;   //编号规则
  ATableName:=SYSDM.qryQuery.FieldByName('S900_010').AsString;
  AFieldName:=SYSDM.qryQuery.FieldByName('S900_011').AsString;

  S:=ARule;
  ReplaceString('[NUM]','%',S);
  ReplaceString('[PRE]',APre,S);
  ReplaceString('[POST]',APost,S);
  ReplaceString('[LINK]',ALink,S);
  ReplaceString('[YYYY]',AYear4,S);
  ReplaceString('[YY]',AYear2,S);
  ReplaceString('[MM]',AMonth,S);
  ReplaceString('[DD]',ADay,S);
  ARule:=S;

  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select max('+AFieldName+') from '+ATableName+' where '+AFieldName+' like '+''''+S+'''');
  SYSDM.qryQuery.Open;
  S:=SYSDM.qryQuery.Fields[0].AsString;
  if S='' then
  begin
    S:=ANUM;
    ANo:=StrToInt(S);
  end else
  begin
    ReplaceString(APre,'',S);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -