📄 commfun.pas.svn-base
字号:
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 + -