?? 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 + -