📄 altercomm.pas.svn-base
字号:
unit AlterComm;
interface
uses
Classes, SysUtils, Controls, Windows, Forms, ComCtrls,CommCtrl,DBGrids,
Messages, Graphics, ADODB, IniFiles;
var
ALanguageID:integer; //语言编号(2052=简体中文,1028=繁体中文,1033=英文)
ALangTable:string; //语言表
AFontName:string;
ACharset:string; //字符集
ARegPath:string; //注册表路径
ADatabase:Integer; //0=Access,1=SQL
//取得数据库中的字符串
function GetDBString(ID:String;AFlag:Integer=1):String;
//错误信息显示
function ShowMsg(AMsg:string;AType:Integer=0):Integer;
//显示确认对话框
function ShowDialog(AMsg:string;AType:Integer=0):Integer;
//连接数据库 0=Access,1=SQL Server
procedure ConnectDB(ADOC:TADOConnection;AType:Integer;AServer,ADBName,AUser,APass:string);
//替换字符串
procedure ReplaceString(ASubStr,ARepStr:string; var AString:string);
//AFileName=ini文件名
//ASection=小节名
//AKey=关键字
//AType=数据类型,1=String,2=Integer,3=Boolean,4=DateTime
function ReadIniFile(AFileName,ASection,AKey:string;AType:Integer):Variant;
//AFileName=ini文件名
//ASection=小节名
//AKey=关键字
//AType=数据类型,1=String,2=Integer,3=Boolean,4=DateTime
//AValue=数值
procedure WriteIniFile(AFileName,ASection,AKey:string;AType:Integer;AValue:Variant);
//取服务器的当前时间
function GetServerDate:TDateTime;
//进行big5转GB内码
function Big52GB(BIG5Str : String): AnsiString;
//进行GB转BIG5内码
function GB2Big5(GBStr : String): AnsiString;
//进行GBK繁体转简体
function GBCht2Chs(GBStr : String): AnsiString;
//进行GBK简体转繁体
function GBChs2Cht(GBStr : String): AnsiString;
//取得某月的第一天的日期
function GetMonthFirstDate(ADate:TDate):TDate;
//取得某月的最后一天的日期
function GetMonthEndDate(ADate:TDate):TDate;
implementation
uses TSCDATA;
//取得数据库中的字符串
function GetDBString(ID:String;AFlag:Integer=1):String;
var
AName,AHint:string;
begin
TSCDM.qryLangs.Close;
TSCDM.qryLangs.SQL.Clear;
TSCDM.qryLangs.SQL.Add('select * from '+ALangTable+' where LangID='+''''+ID+'''');
TSCDM.qryLangs.Open;
AName:=trim(TSCDM.qryLangs.FieldByName('Name').AsString);
AHint:=trim(TSCDM.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 ShowMsg(AMsg:string;AType:Integer=0):Integer;
var
AText,ACaption:string;
begin
case AType of
0:AText:=GetDBString(AMsg);
1:AText:=AMsg;
end;
ACaption:=GetDBString('UMS10000001'); //系统信息
Result:=Application.Messagebox(PChar(AText),PChar(ACaption),
MB_OK+MB_ICONINFORMATION);
end;
//显示确认对话框
function ShowDialog(AMsg:string;AType:Integer=0):Integer;
var
AText,ACaption:string;
begin
case AType of
0:AText:=GetDBString(AMsg);
1:AText:=AMsg;
end;
ACaption:=GetDBString('UMS10000001'); //系统信息
Result:=Application.Messagebox(PChar(AText),PChar(ACaption),
MB_YESNO+MB_ICONQUESTION+MB_DEFBUTTON2);
end;
//连接数据库 0=Access,1=SQL Server
procedure ConnectDB(ADOC:TADOConnection;AType:Integer;AServer,ADBName,AUser,APass:string);
begin
ADOC.Connected:=False;
case AType of
0:ADOC.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
ADBName+';Jet OLEDB:Database Password=HowWell19740507;Persist Security Info=False';
1:
begin
if APass='' then
ADOC.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=True;User ID='+AUser+
';Initial Catalog='+ADBName+';Data Source='+AServer
else
ADOC.ConnectionString:='Provider=SQLOLEDB.1;Password='+APass+';Persist Security Info=True;User ID='+AUser+
';Initial Catalog='+ADBName+';Data Source='+AServer;
end;
end;
try
ADOC.Connected:=True;
except
ShowMsg(ADOC.Errors[0].Description,1);
Abort;
end;
end;
//替换字符串
procedure ReplaceString(ASubStr,ARepStr:string; var AString:string);
var
I:Integer;
begin
while Pos(ASubStr,AString)<>0 do //取得目标字串的位置
begin
I:=Pos(ASubStr,AString);
Delete(AString,I,Length(ASubStr)); //删除目标字串
Insert(ARepStr,AString,I);
end;
end;
//AFileName=ini文件名
//ASection=小节名
//AKey=关键字
//AType=数据类型,1=String,2=Integer,3=Boolean,4=DateTime
function ReadIniFile(AFileName,ASection,AKey:string;AType:Integer):Variant;
var
AIniFile:TIniFile;
begin
AIniFile:=TIniFile.Create(AFileName);
case AType of
1:Result:=AIniFile.ReadString(ASection,AKey,'');
2:Result:=AIniFile.ReadInteger(ASection,AKey,0);
3:Result:=AIniFile.ReadBool(ASection,AKey,False); //1=True,0=False
4:Result:=AIniFile.ReadDateTime(ASection,AKey,0);
end;
AIniFile.Destroy;
end;
//AFileName=ini文件名
//ASection=小节名
//AKey=关键字
//AType=数据类型,1=String,2=Integer,3=Boolean,4=DateTime
//AValue=数值
procedure WriteIniFile(AFileName,ASection,AKey:string;AType:Integer;AValue:Variant);
var
AIniFile:TIniFile;
begin
AIniFile:=TIniFile.Create(AFileName);
case AType of
1:AIniFile.WriteString(ASection,AKey,AValue);
2:AIniFile.WriteInteger(ASection,AKey,AValue);
3:AIniFile.WriteBool(ASection,AKey,AValue); //1=True,0=False
4:AIniFile.WriteDateTime(ASection,AKey,AValue);
end;
AIniFile.Destroy;
end;
//取服务器的当前时间
function GetServerDate:TDateTime;
begin
TSCDM.qryQuery.Close;
TSCDM.qryQuery.SQL.Clear;
case ADataBase of //0=Access, 1=SQL Server
0:TSCDM.qryQuery.SQL.Add('select now()'); //Access
1:TSCDM.qryQuery.SQL.Add('select getdate()'); //SQL Server
end;
TSCDM.qryQuery.Open;
Result:=TSCDM.qryQuery.Fields[0].Value;
end;
//进行big5转GB内码
function Big52GB(BIG5Str : String): AnsiString;
var
Len: Integer;
pBIG5Char: PChar;
pGBCHSChar: PChar;
pGBCHTChar: PChar;
pUniCodeChar: PWideChar;
begin
//String -> PChar
pBIG5Char := PChar(BIG5Str);
Len := MultiByteToWideChar(950,0,pBIG5Char,-1,nil,0);
GetMem(pUniCodeChar,Len*2);
ZeroMemory(pUniCodeChar,Len*2);
//Big5 -> UniCode
MultiByteToWideChar(950,0,pBIG5Char,-1,pUniCodeChar,Len);
Len := WideCharToMultiByte(936,0,pUniCodeChar,-1,nil,0,nil,nil);
GetMem(pGBCHTChar,Len*2);
GetMem(pGBCHSChar,Len*2);
ZeroMemory(pGBCHTChar,Len*2);
ZeroMemory(pGBCHSChar,Len*2);
//UniCode->GB CHT
WideCharToMultiByte(936,0,pUniCodeChar,-1,pGBCHTChar,Len,nil,nil);
//GB CHT -> GB CHS
LCMapString($804,LCMAP_SIMPLIFIED_CHINESE,pGBCHTChar,-1,pGBCHSChar,Len);
Result := String(pGBCHSChar);
FreeMem(pGBCHTChar);
FreeMem(pGBCHSChar);
FreeMem(pUniCodeChar);
end;
//进行GB转BIG5内码
function GB2Big5(GBStr : String): AnsiString;
var
Len: Integer;
pGBCHTChar: PChar;
pGBCHSChar: PChar;
pUniCodeChar: PWideChar;
pBIG5Char: PChar;
begin
pGBCHSChar := PChar(GBStr);
Len := MultiByteToWideChar(936,0,pGBCHSChar,-1,nil,0);
GetMem(pGBCHTChar,Len*2+1);
ZeroMemory(pGBCHTChar,Len*2+1);
//GB CHS -> GB CHT
LCMapString($804,LCMAP_TRADITIONAL_CHINESE,pGBCHSChar,-1,pGBCHTChar,Len*2);
GetMem(pUniCodeChar,Len*2);
ZeroMemory(pUniCodeChar,Len*2);
//GB CHT -> UniCode
MultiByteToWideChar(936,0,pGBCHTChar,-1,pUniCodeChar,Len*2);
Len := WideCharToMultiByte(950,0,pUniCodeChar,-1,nil,0,nil,nil);
GetMem(pBIG5Char,Len);
ZeroMemory(pBIG5Char,Len);
//UniCode -> Big5
WideCharToMultiByte(950,0,pUniCodeChar,-1,pBIG5Char,Len,nil,nil);
Result := String(pBIG5Char);
FreeMem(pBIG5Char);
FreeMem(pGBCHTChar);
FreeMem(pUniCodeChar);
end;
//进行GBK繁体转简体
function GBCht2Chs(GBStr : String): AnsiString;
var
Len: Integer;
pGBCHTChar: PChar;
pGBCHSChar: PChar;
begin
pGBCHTChar := PChar(GBStr);
Len := MultiByteToWideChar(936,0,pGBCHTChar,-1,nil,0);
GetMem(pGBCHSChar,Len*2+1);
ZeroMemory(pGBCHSChar,Len*2+1);
//GB CHS -> GB CHT
LCMapString($804,LCMAP_SIMPLIFIED_CHINESE,pGBCHTChar,-1,pGBCHSChar,Len*2);
Result := String(pGBChsChar);
//FreeMem(pGBCHTChar);
FreeMem(pGBCHSChar);
end;
//进行GBK简体转繁体
function GBChs2Cht(GBStr : String): AnsiString;
var
Len: Integer;
pGBCHTChar: PChar;
pGBCHSChar: PChar;
begin
pGBCHSChar := PChar(GBStr);
Len := MultiByteToWideChar(936,0,pGBCHSChar,-1,nil,0);
GetMem(pGBCHTChar,Len*2+1);
ZeroMemory(pGBCHTChar,Len*2+1);
//GB CHS -> GB CHT
LCMapString($804,LCMAP_TRADITIONAL_CHINESE,pGBCHSChar,-1,pGBCHTChar,Len*2);
Result := String(pGBCHTChar);
FreeMem(pGBCHTChar);
//FreeMem(pGBCHSChar);
end;
//取得某月的第一天的日期
function GetMonthFirstDate(ADate:TDate):TDate;
var
AFirstDay:string;
begin
AFirstDay:=FormatDateTime('yyyy-mm-dd',ADate);
Delete(AFirstDay,9,2);
Insert('01',AFirstDay,9);
Result:=StrToDate(AFirstDay);
end;
//取得某月的最后一天的日期
function GetMonthEndDate(ADate:TDate):TDate;
var
AFirstDay,ANextFirstDay:string;
begin
AFirstDay:=FormatDateTime('yyyy-mm-dd',GetMonthFirstDate(ADate));
if StrToInt(copy(AFirstDay,6,2))<12 then
begin
//取当月第一天的日期
ANextFirstDay:=IntToStr(StrToInt(Copy(AFirstDay,6,2))+1);
//取下月第一天的日期
Delete(AFirstDay,6,2); //删除字串中的月份
Insert(ANextFirstDay,AFirstDay,6); //插入当月的月份到字串中
Result:=StrToDate(AFirstDay)-1; //取得当月最后一天的日期
end else
begin
Result:=StrToDate(copy(AFirstDay,1,4)+'-12-31');
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -