📄 global.pas
字号:
{功能描述: 常用的一些过程和功能函数
创建人员:wangzhihong
创建日期: 2005-07-25
调用的过程与函数:
修改人员:
修改日期:
修改原因:
修改结果:
版本说明: 1.0}
unit Global;
interface
uses
SysUtils,windows,Forms,Classes,Dialogs,//dxDBGrid,
Registry,DBGridEh,Sockets,DBGridEhImpExp,WinSock, WinInet,Clipbrd,DB, ADODB;
{常用对话框的定义}
procedure Prompt(StrMsg : String);
procedure Alert(StrMsg : String);
function Confirm(StrMsg : String) : Boolean;
function ConfirmEx(StrMsg : String; DefaultButton : Integer) : Integer;
//打开DataSet 指定query和SQL语句
function OpenDataSetEx(DataSet: TADOQuery; szSql: string): Boolean;
//返回数据库是否为空
function GetDataSetEmptyEx(sSql: string): Boolean;
//高级执行Sql
function ExecSqlEx(DataSet: TADOQuery; var sSql: string): Boolean;
{取得计算机IP地址}
function LocalIp: String;
{根据IP地址取得计算机名}
function GetMyComputerName(IP: String): String;
{取得计算机的IP地址--2}
function GetIpAddress():String;
{取得计算机名--2}
function GetMyPCName():string;
{列出所有工作组名称}
Function GetServerList( var List : TStringList ) : Boolean;
{列出当前工作组中所有计算机名称}
Function GetUsers(GroupName : string; var List : TStringList ) : Boolean;
{小写转为大写}
function NumToChar(const n: currency): string;
{金额五舍六入}
function Round5to6(const value:currency):currency;
{根据身份证号取得出生日期 }
function GetBirthdayByIdNo(const PersonalID:string):string;
{写日志文件 }
procedure ActionLog(showtime:boolean;Msg:string);
{汉字转换为拼音 }
function GetHzPy(const AHzStr: string): string;
//将dbgrid中的数据导出,支持多种格式
procedure ExportToExcel(DBGridEh:TDBGridEh);overload;
//2005-08-10定义通用多格式导出
procedure ChinYinOutput(const dialogfilename:string;DBGrideh:TDBGridEh);overload;
//----------------------------------------------------------------------------------------------------------------------------------
implementation
type
PNetResources = ^TNetReSource;
//****************常用对话框的定义**********************************************
procedure Prompt(StrMsg : String);
begin
Application.MessageBox(PChar(StrMsg), 'ChinYin - 提示', MB_ICONINFORMATION or MB_SYSTEMMODAL);
end;
Procedure Alert(StrMsg : String);
begin
Application.MessageBox(PChar(StrMsg), 'ChinYin - 警告', MB_ICONWARNING or MB_SYSTEMMODAL);
end;
Function Confirm(StrMsg : String) : Boolean;
begin
Result := ID_YES = Application.MessageBox(pChar(strMsg), 'ChinYin - 确认', MB_ICONQUESTION + MB_YESNO + MB_SYSTEMMODAL);
end;
function ConfirmEx(StrMsg : String; DefaultButton : Integer) : Integer;
var
nDefaultButton : Integer;
begin
if DefaultButton = 1 then
nDefaultButton := mb_DefButton1
else if DefaultButton = 2 then
nDefaultButton := mb_DefButton2
else
nDefaultButton := mb_DefButton3;
//according to the return values to set focus 2005-08-03adding
Result := Application.MessageBox(PChar(StrMsg),'ChinYin - 请确认',MB_ICONQUESTION + MB_YESNOCANCEL + MB_SYSTEMMODAL + nDefaultButton);
end;
//**********************小写转为大写*******************************************
function NumToChar(const n: currency): string; //可以到万亿,并且可以随便扩大范围
const
cNum: WideString = '零壹贰叁肆伍陆柒捌玖--万仟佰拾亿仟佰拾万仟佰拾元角分';
cCha:array[0..1, 0..12]of string =
(( '零元','零拾','零佰','零仟','零万','零亿','亿万','零零零','零零','零万','零亿','亿万','零元'),
( '元','零','零','零','万','亿','亿','零','零','万','亿','亿','元'));
var
i : Integer;
sNum,sTemp : WideString;
begin
result :='';
sNum := format('%15d',[round(n * 100)]);
for i := 0 to 14 do
begin
stemp := copy(snum,i+1,1);
if stemp=' ' then continue
else result := result + cNum[strtoint(stemp)+1] + cNum[i+13];
end;
for i:= 0 to 12 do
Result := StringReplace(Result, cCha[0,i], cCha[1,i], [rfReplaceAll]);
if pos('零分',result)=0
then Result := StringReplace(Result, '零角', '零', [rfReplaceAll])
else Result := StringReplace(Result, '零角','整', [rfReplaceAll]);
Result := StringReplace(Result, '零分','', [rfReplaceAll]);
end;
//***************** ****金额五舍六入********************************************
function Round5to6(const value:currency):currency;
begin
result:=Trunc(abs(value)*10+0.4)/10
end;
//*******************根据身份证号取得日期***************************************
function GetBirthdayByIdNo(const PersonalID:string):string;
begin
if (Length(PersonalID)<>15) and (Length(PersonalID)<>18) then
begin
Prompt('身份证位数不对,请重新输入!');
Exit;
end;
if PersonalID <> '' then
begin
if Length(PersonalID) = 15 then
result := '19' + Copy(PersonalID,7,2) + '-' + Copy(PersonalID,9,2) + '-' + Copy(PersonalID,11,2)
else
result := Copy(PersonalID,7,4)+ '-' + Copy(PersonalID,11,2) + '-'+ Copy(PersonalID,13,2);
end;
end;
//*********************写日志文件***********************************************
procedure ActionLog(showtime:boolean;Msg:string);
var
filename:string;
logfile:Textfile;
begin
filename:=changefileext(ExtractFilePath(Application.ExeName)+'AppSys\'+formatdatetime('YYYYMMDD',date()),'.log');
try
assignfile(logfile,filename);
if FileExists(filename) then
append(logfile)
else
rewrite(logfile);
if(showtime) then
writeln(logfile,datetimetostr(now)+':'+msg)
else
writeln(logfile,msg);
finally
closefile(logfile);
end;
end;
//**************************汉字转拼音******************************************
function GetHzPy(const AHzStr: string): string;
const
ChinaCode: array[0..25, 0..1] of Integer = ((1601, 1636), (1637, 1832), (1833, 2077),
(2078, 2273), (2274, 2301), (2302, 2432), (2433, 2593), (2594, 2786), (9999, 0000),
(2787, 3105), (3106, 3211), (3212, 3471), (3472, 3634), (3635, 3722), (3723, 3729),
(3730, 3857), (3858, 4026), (4027, 4085), (4086, 4389), (4390, 4557), (9999, 0000),
(9999, 0000), (4558, 4683), (4684, 4924), (4925, 5248), (5249, 5589));
var
i, j, HzOrd: integer;
begin
i := 1;
while i <= Length(AHzStr) do
begin
if (AHzStr[i] >= #160) and (AHzStr[i + 1] >= #160) then
begin
HzOrd := (Ord(AHzStr[i]) - 160) * 100 + Ord(AHzStr[i + 1]) - 160;
for j := 0 to 25 do
begin
if (HzOrd >= ChinaCode[j][0]) and (HzOrd <= ChinaCode[j][1]) then
begin
Result := Result + char(byte('A') + j);
break;
end;
end;
Inc(i);
end else Result := Result + AHzStr[i];
Inc(i);
end;
end;
//*************************利用RX导出多种数据格式*******************************
{procedure ExportToExcel(dxDBGrid:TdxDBGrid);
var
dlg:TSaveDialog;
begin
dlg:=TSaveDialog.Create(nil);
try
dlg.DefaultExt:='xls';
dlg.Filter:='Excel Files(*.xls)|*.XLS';
if dlg.Execute then
dxDBGrid.SaveToXLS(dlg.FileName,True);
finally
dlg.Free;
end;
end; }
//*************************数据库操作相关的函数********************************
function OpenDataSetEx(DataSet: TADOQuery; szSql: string): Boolean;
begin
Result := True;
try
if DataSet.Active then
DataSet.Close;
DataSet.SQL.Clear;
DataSet.Parameters.Clear;
DataSet.SQL.Add(szSql);
DataSet.Open;
except
Result := False;
end;
end;
//返回数据库是否为空数据库
function GetDataSetEmptyEx(sSql: string): Boolean;
var
ADOSetTmp: TADOQuery;
begin
ADOSetTmp := TADOQuery.Create(nil);
OpenDataSetEx(ADOSetTmp, sSql);
Result := ADOSetTmp.IsEmpty;
ADOSetTmp.Close;
ADOSetTmp.Free;
end;
function ExecSqlEx(DataSet: TADOQuery; var sSql: string): Boolean;
var
TempCommand: TADOCommand;
begin
TempCommand := nil;
if Trim(sSql) = '' then
begin
Result := False;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -