📄 datamodule1.pas
字号:
procedure TDataE2.EncodeHotel;
var
fSys,fHotel:TextFile;
s,sFileName:string;
nLength,i:integer;
begin
AssignFile(fSys,'\sxm\data\飞恒.TXT');
Reset(fSys);
Readln(fSys,s);
closeFile(fSys);
AssignFile(fHotel,s);
Reset(fHotel);
readln(fHotel,s);
closeFile(fHotel);
nLength:=length(s);
for i:=1 to nlength do
s[i]:=chr( ord(s[i])xor ord(CopyRight[i mod 22+1]) xor ord(Software[i mod 16+1]) xor (ord(Developer[i mod 30])+i*2+8));
AssignFile(fSys,'\sxm\data\飞恒.sys');
Reset(fSys);
Readln(fSys,sFileName);
closeFile(fSys);
AssignFile(fHotel,sFilename);
ReWrite(fHotel);
writeln(fHotel,s);
closeFile(fHotel);
end;
procedure TDataE2.DecodeOneHotel ;
var
fSys,fHotel:TextFile;
s:string;
ch:char;
i,n:integer;
begin
s:='\sxm\data\飞恒软件.txt';
if FileExists(s) then
AssignFile(fSys,'\sxm\data\飞恒软件.txt')
else
AssignFile(fSys,'\sxm\data\飞恒.sys');
Reset(fSys);
Readln(fSys,s);
Readln(fSys,HotelId);
closeFile(fSys);
AssignFile(fHotel,s);
Reset(fHotel);
i:=1;
n:=1;
s:='';
while not eof(fHotel) do
begin
read(fHotel,ch);
ch:=chr( ord(ch) xor ord(CopyRight[i mod 22+1]) xor ord(Software[i mod 16+1]) xor (ord(Developer[i mod 30])+i*2+8));
//for demo
//ch:=chr( ord(ch) xor ord(CopyRight[i mod 21+1]) xor ord(Software[i mod 15+1]) xor (ord(Developer[i mod 30])+i*2+7));
if ch='/' then
begin
if n=1 then HotelName:=s;
if n=2 then
try
InstallDate:=strTodate(s);
except
end;
if n=3 then HotelSpe:=StrToint(s);
s:='';
inc(n);
end
else
s:=s+ch;
inc(i);
end;
closeFile(fHotel);
end;
function TDataE2.MacAddress: string;
var
Lib: Cardinal;
Func: function(GUID: PGUID): Longint; stdcall;
GUID1, GUID2: TGUID;
begin
Result := '';
Lib := LoadLibrary('rpcrt4.dll');
if Lib <> 0 then
begin
@Func := GetProcAddress(Lib, 'UuidCreateSequential');
if Assigned(Func) then
begin
if (Func(@GUID1) = 0) and
(Func(@GUID2) = 0) and
(GUID1.D4[2] = GUID2.D4[2]) and
(GUID1.D4[3] = GUID2.D4[3]) and
(GUID1.D4[4] = GUID2.D4[4]) and
(GUID1.D4[5] = GUID2.D4[5]) and
(GUID1.D4[6] = GUID2.D4[6]) and
(GUID1.D4[7] = GUID2.D4[7]) then
begin
Result :=
char(GUID1.D4[2]) +
char(GUID1.D4[3]) +
char(GUID1.D4[4]) +
char(GUID1.D4[5]) +
char(GUID1.D4[6]) +
char(GUID1.D4[7]);
//IntToHex(GUID1.D4[7], 2);
end;
end;
end;
end;
function TDataE2.ReadRegistry:string;
var
sRegCode,sHotelid,newEncodeKey:string;
Registry: TRegistry;
begin
try
newEncodekey:=GetMacAddress(0);
if newEncodekey='' then
newEncodekey:=MacAddress;
if newEncodekey='' then //2005-12-28
newEncodekey:='00E04C600F95';
sRegCode:=RegisterCode(SerialNo(EncodeString(hotelName,newEncodeKey)),hotelId);
Registry:=TRegistry.Create;
try
//Registry.OpenKey('\Software\ODBC\ODBC.INI\myMRP',False);
Registry.OpenKey('\Software\fhsoft\myMRP',true);
case abs(HotelSpe) of
1..9 : sHotelId:=HotelId+'_HOTEL';
100..999: sHotelId:=HotelId+'_POS';
else sHotelId:=HotelId+'_MRP';
end;
result:=Registry.ReadString(sHotelId);
finally
Registry.Free;
end;
except
on e:exception do
Application.MessageBox(Pchar(E.Message),'提示',64);
end;
end;
function TDataE2.WriteRegistry:boolean;
var
sRegCode,sHotelid:string;
Registry: TRegistry;
begin
result:=false;
sRegCode:=RegisterCode(SerialNo(EncodeString(hotelName,#143#7#91#37)),hotelId);
Registry:=TRegistry.Create;
try
//Registry.OpenKey('\Software\ODBC\ODBC.INI\myMRP',true); 2005-11-24 不写到ODBC里,另外创建一个键
Registry.OpenKey('\Software\fhsoft\myMRP',true);
case abs(HotelSpe) of
1..9 : sHotelId:=HotelId+'_HOTEL';
100..999: sHotelId:=HotelId+'_POS';
else sHotelId:=HotelId+'_MRP';
end;
Registry.WriteString(sHotelId,sRegCode);
result:=true;
finally
Registry.CloseKey ;
Registry.Free;
end;
end;
//对客户名称进行变换
function TDataE2.EncodeString(mCusName,mKey:string):string;
var
I, J: Integer;
s:string;
begin
J := 1;
s:='';
for I := 1 to Length(mCusName) do
begin
s := s + Char(Ord(mCusName[I]) xor Ord(mKey[J]));
if J + 1 <= Length(mKey) then
Inc(J)
else
J := 1;
end;
{ 自己加步骤 }
result:=s;
end; { StringEncrypt }
//生成序列号,最后只取8位
function TDataE2.SerialNo(mString: string): string;
var
I,n,k,m: Integer;
S: string;
begin
Result := '';
S := '';
m:=0;
for I := 1 to Length(mString) do
begin
n:= m+ord(mString[I]) ;
k:= n div 7;
case k of
0..9 : n:=k +48;
10..35 : n:=k + 55;
else
n:=50;
end;
S := S + chr(n);
m:=( m + n ) or (m-n);
end;
Result := s;
end; { StringToDisplay }
//由序列号生成注册号: 前8位为序列号,后7位为加密号
function TDataE2.RegisterCode(mString,mCusNo: string): string;
var
I,n,k,m,j: Integer;
S,ch: string;
begin
Result := '';
s:='';
j:=1;
for I:=1 to 8 do
begin
s := s + Char(Ord(mString[I]) xor (Ord(mCusNo[J])* Ord(mCusNo[3]) +1) );
if J + 1 <= Length(mCusNo) then
Inc(J)
else
J := 1;
end;
ch:=s;
S := '';
m:=0;
for I := 1 to 7 do
begin
n:= m+ord( ord(mString[I]) xor ord(ch[8-I]) xor ord(ch[I]) ) ;
k:= n div 7;
case k of
0..9 : n:=k +48;
10..35 : n:=k + 55;
else
n:=53;
end;
S := S + chr(n);
m:=( m + n ) or ( m - n ) ;
end;
Result := copy(mString,1,5)+'-'+copy(mstring,6,3) + copy(s,1,2)+'-'+copy(s,3,5);
end; { StringToDisplay }
function TDataE2.GetWindowsPlatFormId:integer;
var
OS: TOSVersionInfo;
PlatformId: Dword;
{ function Plat(Pl: DWORD): string;
begin
case Pl of
VER_PLATFORM_WIN32s: result := 'Win32s on Windows 3.1x';
VER_PLATFORM_WIN32_WINDOWS: result := 'Windows 95/98/ME';
VER_PLATFORM_WIN32_NT: result := 'Windows NT/2000/XP';
else
result := 'Windows';
end;
end;}
begin
PlatformId := 0;
try
with OS do
begin
dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if GetVersionEx(OS) then
begin
PlatformId := 0;//dwPlatformId;
if dwPlatFormid = VER_PLATFORM_WIN32_NT then
if (dwMajorVersion = 5 )and (dwMinorVersion = 1 ) then
platformId:=1; //xp
end;
end; //Os
except
end;
result:=PlatFormId;
end;
Function TDataE2.checkPrimaryKey(Tablename,FieldValue,sValue:string):boolean;
begin
with ADOQuery1 do
begin
//查询FieldValue是否己存在
close;
sql.Clear ;
sql.Add('select '+FieldValue+' from '+Tablename+' where '+FieldValue+' = :'+FieldValue);
parameters[0].value:=sValue;
open;
result:=not eof;
end;
end;
Function TDataE2.GetComputname:string;
var
name:PChar;
len:dword;
begin
len:=30;
getmem(name,30); //建立一指定大小的动态变量,并将指针指向该处
getcomputername(name,len);
result:=name;
end;
procedure TDataE2.ShowAdoError;
var
sInfo:string;
adoErrors:Errors;
adoErr:Error;
iCount:integer;
begin
sInfo:='';
adoErrors:=AdoConStore.Errors ;
for iCount:=0 to adoErrors.count-1 do
begin
adoErr:=adoErrors.item[iCount];
sInfo:=sInfo+'错误号: '+intTostr(adoErr.number)+chr(13);
sInfo:=sInfo+'代码 : '+adoErr.source+chr(13);
sInfo:=sInfo+'说明 : '+adoErr.description+chr(13);
sInfo:=sInfo+'状态 : '+adoErr.sqlstate+chr(13);
end;
application.MessageBox(pchar(sInfo),'错误',MB_OK+MB_ICONINFORMATION);
end;
procedure TDataE2.tblGoodsNewRecord(DataSet: TDataSet);
begin
tblGoods.FieldByName('perqty').AsInteger:=1
end;
procedure TDataE2.tblGoodsAfterScroll(DataSet: TDataSet);
begin
if QuerySum.active then QuerySum.close;
querySum.sql.clear;
QuerySum.sql.Add('select o.*,s.name from onhand o,store s where o.goodsid= :goodsid and o.storeid=s.storeid');
QuerySum.parameters[0].Value:=tblGoods.fieldbyname('goodsid').asinteger;
QuerySum.open;
end;
procedure TDataE2.tblBankBeforePost(DataSet: TDataSet);
begin
if tblBank.State = dsInsert then
tblBank.FieldByName('Amount').AsCurrency:=tblBank.FieldByName('FirstAmount').AsCurrency;
if tblBank.State = dsEdit then
tblBank.FieldByName('Amount').AsCurrency:=tblBank.FieldByName('Amount').AsCurrency-nAmtStart+tblBank.FieldByName('FirstAmount').AsCurrency;
end;
procedure TDataE2.tblBankBeforeEdit(DataSet: TDataSet);
begin
nAmtStart:=tblBank.FieldByName('FirstAmount').AsCurrency;
end;
procedure TDataE2.tblClientBeforePost(DataSet: TDataSet);
begin
if tblClient.State = dsInsert then
tblClient.FieldByName('BALANCE').AsCurrency:=tblClient.FieldByName('BALANCEAMT').AsCurrency;
if tblClient.State = dsEdit then
tblClient.FieldByName('BALANCE').AsCurrency:=tblClient.FieldByName('BALANCE').AsCurrency-nAmtStart+tblClient.FieldByName('BALANCEAMT').AsCurrency;
end;
procedure TDataE2.tblClientBeforeEdit(DataSet: TDataSet);
begin
nAmtStart:=tblClient.FieldByName('BALANCEAMT').AsCurrency;
end;
procedure TDataE2.TblvendorBeforeEdit(DataSet: TDataSet);
begin
nAmtStart:=Tblvendor.FieldByName('BALANCEAMT').AsCurrency;
end;
procedure TDataE2.TblvendorBeforePost(DataSet: TDataSet);
begin
if Tblvendor.State = dsInsert then
Tblvendor.FieldByName('BALANCE').AsCurrency:=Tblvendor.FieldByName('BALANCEAMT').AsCurrency;
if Tblvendor.State = dsEdit then
Tblvendor.FieldByName('BALANCE').AsCurrency:=Tblvendor.FieldByName('BALANCE').AsCurrency-nAmtStart+Tblvendor.FieldByName('BALANCEAMT').AsCurrency;
end;
function TDataE2.GetMacAddress(index: integer): string;
var
ncb : TNCB; //NetBios控制块
AdapterS : TAdapterStatus; //网卡状态结构
LanaNum : TLanaeNum; //Netbios Lana
i: integer;
rc : Char; //NetBios的返回代码
str : String;
begin
Result := '';
try
ZeroMemory(@ncb, SizeOf(ncb)); //NetBios控制块清零
ncb.ncb_command := chr(NCBENUM); //ENUM
rc := NetBios(@ncb); //取返回代码
ncb.ncb_buffer := @LanaNum; //再一次处理ENUM命令
ncb.ncb_length := Sizeof(LanaNum);
rc := NetBios(@ncb); //取返回代码
if ord(rc)<>0 then
exit;
ZeroMemory(@ncb, Sizeof(ncb)); //NetBios控制块清零
ncb.ncb_command := chr(NCBRESET);
ncb.ncb_lana_num := LanaNum.lana[index];
rc := NetBios(@ncb);
if ord(rc)<>0 then
exit;
//取网卡的状态
ZeroMemory(@ncb, Sizeof(ncb));
ncb.ncb_command := chr(NCBASTAT);
ncb.ncb_lana_num := LanaNum.lana[index];
StrPCopy(ncb.ncb_callname,'*');
ncb.ncb_buffer := @AdapterS;
ncb.ncb_length := SizeOf(AdapterS);
rc := NetBios(@ncb);
//将MAC地址转换成字符串
str := '';
for i:=0 to 5 do
//str := str + IntToHex(Integer(AdapterS.adapter_address[i]),2); 改用下面的语句,不然注册有错。
str := str + char(Integer(AdapterS.adapter_address[i]));
Result := str;
finally
end;
end;
procedure TDataE2.QueryRptAfterScroll(DataSet: TDataSet);
begin
if gTableid=89 then
begin
if QueryTmp.active then QueryTmp.Close;
QueryTmp.sql.clear;
QueryTmp.sql.add('select a.Units,a.qty,a.price,b.code,b.name from o_outstored a');
QueryTmp.sql.add('left outer join goods b on a.goodsid=b.goodsid');
QueryTmp.sql.add('where a.billid=:billid');
QueryTmp.Parameters[0].Value:=QueryRpt.FieldByName('Billid').AsInteger;
QueryTmp.Open;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -