📄 common.pas
字号:
unit common;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Forms, ExtCtrls, StdCtrls,
RzPanel,DateUtils, RzButton, DB, ADODB, RzDBCmbo, RzGrids, Graphics, Grids,
Controls, Dialogs, RzCmboBx, ImgList;
procedure ShowPanel(const ChildFormPanel,MainFormPanel:TRzPanel);
procedure EmptyAdoTable(const tblTableName:TADOTable);
function Base64Encode(const s: string): string;
function Base64Decode(const s: string): string;
function GetADOTableFieldValue(const tblTableName:TADOTable;strFieldName: string):TStrings;
function GetADOQueryFieldValue(const tblTableName:TADOQuery;strFieldName: string):TStrings;
function GetPrestr(Substr: string; i,j:integer):string; //获取字符串中指定字节
function GettwoFieldValue(const tblTableName:TADOTable;strFieldName1,strFieldName2: string):TStrings;
function SumADOQueryField(const tblTableName:TADOQuery;SqlStr:string;strFieldName1: string;SearchStr: string):Real;
procedure AddRenYuan(const cmbbx:TRzDBComboBox);
function FormatMonth(i:integer):string;
function SumField(const tblTableName:TADOQuery;FieldName:string):string;
procedure StrGrdSum(const StrGrd:TRzstringGrid);
function MonthDays(iYear,iMonth:Word):Word;
Function Formatvalue(s:string):double; //假如为空值则保存 0
Function CheckStrGrdInfo(const StrGrd:TRzStringGrid):Boolean;
procedure ClearStrGrd(const StrGrd:TRzstringGrid);
implementation
uses frmdata, frmhomepage;
procedure ShowPanel(const ChildFormPanel,MainFormPanel: TRzPanel);
var
I,J:Integer;
panChildPanelName:TRzPanel;
begin
for I:= 0 to MainFormPanel.ControlCount-1 do
begin
if MainFormPanel.Controls[I].Name = 'panChild' then
begin
panChildPanelName:=(MainFormPanel.controls[I] as TRzPanel);
for J:=0 to panChildPanelName.ControlCount-1 do
if panChildPanelName.Controls[J].Name='cmdClose' then
(panChildPanelName.Controls[J] as TRzButton).Click;
end
else
Exit;
end;
ChildFormPanel.Parent := MainFormPanel;
ChildFormPanel.Left := 0;
ChildFormPanel.Top := 0;
end;
function Base64Encode(const s: string): string;
var
i,c1,c2,c3: Integer;
m,n: Integer;
const
Base64: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
begin
Result := '';
m:=1;
n:=0;
for i := 1 to (Length(s) div 3) do
begin
c1 := Ord(s[m]);
c2 := Ord(s[m+1]);
c3 := Ord(s[m+2]);
m:=m+3;
Result := Result+base64[(c1 shr 2)and $3F+1];
Result := Result+base64[((c1 shl 4)and $30) or ((c2 shr 4)and $0F)+1];
Result := Result+base64[((c2 shl 2)and $3C) or ((c3 shr 6)and $03)+1];
Result := Result+base64[c3 and $3F+1];
n:=n+4;
if(n = 76)then
begin
n:=0;
Result := Result+#13#10;
end;
end;
if (Length(s) mod 3)=1 then
begin
c1 := Ord(s[m]);
Result := Result+base64[(c1 shr 2)and $3F+1];
Result := Result+base64[(c1 shl 4)and $30+1];
Result := Result+'=';
Result := Result+'=';
end;
if (Length(s) mod 3)=2 then
begin
c1 := Ord(s[m]);
c2 := Ord(s[m+1]);
Result := Result+ base64[(c1 shr 2)and $3F+1];
Result := Result+ base64[((c1 shl 4)and $30) or ((c2 shr 4)and $0F)+1];
Result := Result+base64[(c2 shl 2)and $3C+1];
Result := Result+ '=';
end;
end;
function Base64Decode(const s: string): string;
var
i,m,n: Integer;
c1,c2,c3,c4: Integer;
const
Base64: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
begin
Result := '';
n:=1;
m:=Length(s);
if s[m]='='then m:=m-1;
if s[m]='='then m:=m-1;
for i:=1 to m div 4 do
begin
c1:=Pos(s[n],Base64)-1;
c2:=Pos(s[n+1],Base64)-1;
c3:=Pos(s[n+2],Base64)-1;
c4:=Pos(s[n+3],Base64)-1;
n:=n+4;
Result:=Result+Chr(((c1 shl 2)and $FC)or((c2 shr 4)and $3));
Result:=Result+Chr(((c2 shl 4)and $F0)or((c3 shr 2)and $0F));
Result:=Result+Chr(((c3 shl 6)and $C0)or c4);
end;
if m mod 4=2 then
begin
c1:=Pos(s[n],Base64)-1;
c2:=Pos(s[n+1],Base64)-1;
Result:=Result+Chr(((c1 shl 2)and $FC)or((c2 shr 4)and $3));
end;
if m mod 4=3 then
begin
c1:=Pos(s[n],Base64)-1;
c2:=Pos(s[n+1],Base64)-1;
c3:=Pos(s[n+2],Base64)-1;
Result:=Result+Chr(((c1 shl 2)and $FC)or((c2 shr 4)and $3));
Result:=Result+Chr(((c2 shl 4)and $F0)or((c3 shr 2)and $0F));
end;
end;
function GetADOTableFieldValue(const tblTableName:TADOTable;strFieldName: string):TStrings;
var
CurrentTableRecordNum: Integer;
begin
Result:=TStringList.Create;
Result.Clear;
CurrentTableRecordNum := tblTableName.RecNo;
tblTableName.First;
while not tblTableName.EOF do
begin
Result.Add(tblTableName[strFieldName]);
tblTableName.Next;
end;
tblTableName.MoveBy(CurrentTableRecordNum);
end;
function GetADOQueryFieldValue(const tblTableName:TADOQuery;strFieldName: string):TStrings;overload;
var
CurrentTableRecordNum: Integer;
begin
Result:=TStringList.Create;
Result.Clear;
CurrentTableRecordNum := tblTableName.RecNo;
tblTableName.First;
while not tblTableName.EOF do
begin
Result.Add(tblTableName[strFieldName]);
tblTableName.Next;
end;
tblTableName.MoveBy(CurrentTableRecordNum);
end;
function GetPrestr(Substr: string; i,j:integer):string;
var
PrevStr:string;
begin
PrevStr:=Copy(Substr,i,j);
Result:=PrevStr;
end;
function GettwoFieldValue(const tblTableName:TADOTable;strFieldName1,strFieldName2: string):TStrings;
var
CurrentTableRecordNum: Integer;
begin
Result:=TStringList.Create;
Result.Clear;
CurrentTableRecordNum := tblTableName.RecNo;
tblTableName.First;
while not tblTableName.EOF do
begin
Result.Add(tblTableName[strFieldName1]+'-'+tblTableName[strFieldName2]);
tblTableName.Next;
end;
tblTableName.MoveBy(CurrentTableRecordNum);
end;
function SumADOQueryField(const tblTableName:TADOQuery;SqlStr:string;strFieldName1: string;SearchStr: string): Real;
var
CurrentTableRecordNum: Integer;
begin
with tblTableName do
begin
SQL.Clear;
SQL.Add(SqlStr);
Open;
CurrentTableRecordNum :=RecNo;
First;
Result:=0;
while not EOF do
begin
if tblTableName[strFieldName1]=Trim(SearchStr) then
Result:=Result+tblTableName['金额'];
Next;
end;
MoveBy(CurrentTableRecordNum);
end;
end;
procedure EmptyAdoTable(const tblTableName:TADOTable);
begin
with tblTableName do
begin
close;
Open;
First;
while not EOF do
begin
Delete;
end;
end;
end;
procedure AddRenYuan(const cmbbx:TRzDBComboBox);
begin
cmbbx.Items.Clear;
cmbbx.Items.AddStrings(GetADOTableFieldValue(dataFm.Tbl_family_option,'xm'));
//cmbbx.Text:=cmbbx.Items[0];
end;
function FormatMonth(i:integer):string;
begin
if i<10 then Result:='0'+inttostr(i) else Result:=inttostr(i);
end;
function SumField(const tblTableName:TADOQuery;FieldName:string):string;
var TableRecordNum: Integer;
jinee:real;
begin
if tblTableName.Active=true then
begin
with tblTableName do
begin
TableRecordNum :=RecNo;
First;
jinee:=0;
while not EOF do
begin
jinee:=jinee+FieldByName(FieldName).asfloat;
Next;
end;
MoveBy(TableRecordNum);
end;
Result:=floattostr(jinee);
end;
end;
procedure StrGrdSum(const StrGrd:TRzstringGrid);
var colx,rowx,coli,rowj,coly,rowy,z:integer;
colvalue,rowvalue,sumvalue:double;
begin
colx:=StrGrd.ColCount;
rowx:=StrGrd.RowCount;
colvalue:=0;
rowvalue:=0;
sumvalue:=0;
if (colx>2) and (rowx>2) then
begin
for coli :=1 to colx-2 do
begin
for rowj:=1 to rowx-2 do
begin
colvalue:=colvalue+strtofloat(StrGrd.Cells[coli,rowj]);
//StrGrd.Cells[coli,rowj]:=floattostr(colvalue);
end;
StrGrd.Cells[coli,rowx-1]:=floattostr(colvalue);
colvalue:=0;
end;
for coly:=1 to rowx-2 do
begin
for rowy:=1 to colx-2 do
begin
rowvalue:=rowvalue+strtofloat(StrGrd.Cells[rowy,coly]);
//StrGrd.Cells[rowy,coly]:=floattostr(rowvalue);
end;
StrGrd.Cells[colx-1,coly]:=floattostr(rowvalue);
rowvalue:=0;
end;
for z:=1 to colx-2 do
begin
sumvalue:=sumvalue+strtofloat(StrGrd.Cells[z,rowx-1]);
end;
StrGrd.Cells[colx-1,rowx-1]:=floattostr(sumvalue);
end;
end;
function MonthDays(iYear,iMonth:Word):Word;
begin
case iMonth of
1,3,5,7,8,10,12: Result:=31;
4,6,9,11: Result:=30;
2://如果是闰年
if IsLeapYear(iYear) then
Result:=29
else
Result:=28
else
Result:=0;
end;
end;
Function Formatvalue(s:string):double; //假如为空值则保存 0
begin
if s='' then result:=0 else Result:=strtofloat(s);
end;
Function CheckStrGrdInfo(const StrGrd:TRzStringGrid):Boolean; //判断支出列表有没有输入
var Rowx,i:integer;
GrdValue:double;
begin
//Colx:= StrGrd.ColCount;
Rowx:= StrGrd.RowCount;
GrdValue:=0;
if Rowx>1 then
begin
for I := 1 to Rowx - 1 do
begin
GrdValue:=GrdValue+Formatvalue(StrGrd.Cells[1,i]); //
end;
//showmessage(floattostr(GrdValue));
if GrdValue<>0 then Result:=true else Result:=false;
end
else
begin
Result:=false;
end;
end;
procedure ClearStrGrd(const StrGrd:TRzstringGrid);
var Colx,Rowx:integer;
begin
for Rowx := 0 to StrGrd.RowCount-1 do //清空编辑框
begin
for Colx := 0 to StrGrd.ColCount-1 do
begin
StrGrd.Cells[Colx,Rowx]:='';
end;
end;
StrGrd.ColCount:=2;
StrGrd.RowCount:=2;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -