⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 altercomm.pas.svn-base

📁 一个用Delphi开发的ERP软件
💻 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 + -