• delphi 常用函数库(2)


    isParadox:=(pos('.db',tempTableName)>0) and (tempTableName[length(tempTableName)]='b');
         isDbase:=pos('.dbf',tempTableName)>0;
       end
      else
       begin
         isParadox:=TableType=ttParadox;
         isDbase:=TableType=ttDbase;
       end;
      if isparadox or isDbase then
       begin
         bExclusive:=Exclusive;
         bActive:=Active;
         DisableControls;
    //     Close;
         Exculsive:=true;
       end
      else
       begin
         StatusMsg:='无效的数据表类型。';
         Exit;
       end;
      if isParadox then
       begin
         if wwMemAvail(Sizeof(CRTblDesc)) then
          begin
            StatusMsg:='内存不足,压缩表失败。';
          end
         else
          begin
            GetMem(pTblDesc,Sizeof(CRTblDesc));
            fillchar(pTblDesc^,Sizeof(CRTblDesc),0);
            with pTblDesc^ do
            begin
             strCopy(szTblName,Tablename);
             strCopy(szTblType,szParadox);
             Active:=True;
             Check(DbiGetCursorProps(handle,Props));//检测是否右口令保护
             bProtected:=props.bProtected;
             Active:=False;
             bPack:=True;
            end;
            Screen.Cursor:=crHourGlass;
            SetDBFlag(dbfOpened,True);
            rslt:=DBIdoRestructure(DBHandle,1,pTblDesc,nil,nil,nil,False);
            if rslt<>DBIERR_NONE then
             begin
               DBiGetErrorString(rslt,SzErrMsg);
               StatusMsg:=SzErrMsg;
             end
            else
             Result:=True;
            SetDBFlag(dbfOpened,False);
            FreeMem(pTblDesc,Sizeof(CRTlDesc));
            Screen.Cursor:=crDefault;
          end;
       end
      else
       if isDbase then
         begin
          Screen.Cursor:=crHourGlass;
          OPen;
          rslt:=dbiPacktable(DBHandle,Handle,nil,nil,True);
          Screen.Cursor:=crDefault;
          if rslt<>DBIERR_NONE then
            begin
             DBiGetERRorString(rslt,szErrMsg);
             StatusMSg:=SzErrMsg;
            end
          else
            Result:=True;
         end;
       Close;
       Exculsive:=bExclusive;
       Active:=bActive;
       EnableControls;
    end;}


    {procedure CompactDb(DbName, NewDbName: string);
    var
      dao: OLEVariant;
    begin
      dao := CreateOleObject('DAO.DBEngine.35');
      dao.CompactDatabase(DbName, NewDbName);
    end;}

    //修复Access表
    procedure RepairDb(DbName: string);
    var
      Dao: OLEVariant;
    begin
      Dao := CreateOleObject('DAO.DBEngine.35');
      Dao.RepairDatabase(DbName);
    end;

    //通过注册表创建ODBC配置[创建在系统DSN页下]
    function CreateODBCCfgInRegistry(ODBCSourceName:WideString; ServerName, DataBaseDescription:String):boolean;
    var
     Reg: TRegistry;
     LPT_systemDir:array [1..255] of char;
     P:Pchar;
     DriverString:String;
    begin
      Reg := TRegistry.Create;
      Reg.RootKey := HKEY_LOCAL_MACHINE;
      try
       try
         if not Reg.KeyExists('\Software\ODBC\ODBC.INI\'+trim(ODBCSourceName)) then
         begin
          //创建并打开主键。
          if Reg.OpenKey('\Software\ODBC\ODBC.INI\'+trim(ODBCSourceName),True) then
          begin
            //写入键值
            Reg.WriteString('DataBase', ODBCSourceName);
            Reg.WriteString('Description',Trim(DataBaseDescription));

            GetSystemDirectory(@LPT_systemDir,255) ;
            P:=@LPT_systemDir;
            DriverString:=StrCat(P,Pchar('\SQLSRV32.DLL')) ;
            Reg.WriteString('Driver', DriverString);

            Reg.WriteString('LastUser', 'Administrator');
            Reg.WriteString('Server', trim(ServerName));
            Reg.WriteString('Trusted_Connection', 'Yes');
            reg.CloseKey;
          end;

          //加入ODBCDataSource
          if Reg.OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources\',True) then
          begin
            Reg.DeleteValue(ODBCSourceName);
            Reg.WriteString(ODBCSourceName, 'SQL Server');
            Reg.CloseKey;
          end;
         end;
         Result:=True;
       except
         Result:=False;
       end;
      finally
       Reg.Free;
      end;
    end;

    function ADOConnectSysBase(Const Adocon:TadoConnection):boolean;
    {* 用Ado连接SysBase数据库函数}
    begin
      with Adocon do
       begin
         Close;
         LoginPrompt:=False;  //若数据库不存在时,进行判断。。。。。。
         ConnectionString:='Provider=MSDASQL.1;'+
                  'Password="";'+
                  'Persist Security Info=True;'+
                  'Data Source=Sy_Finalact';
         try
           KeepConnection:=True;
           Screen.Cursor:=crHourGlass;
           Connected:=True;
           Open;
           Screen.Cursor:=crDefault;
           ADOConnectSysBase:=True;
         except
           ADOConnectSysBase:=False;
         end;
       end;
    end;

    //Ado连接数据库函数
    function ADOConnectLocalDB(Const Adocon:TAdoConnection;Const Dbname,DBServerName:String;ValidateMode:Integer):boolean;
    begin
      with Adocon do
       begin
         Close;
         LoginPrompt:=False;  //若数据库不存在时,进行判断。。。。。。
         if ValidateMode=0 then//使用Windows NT验证模式
           ConnectionString:='Provider=SQLOLEDB.1;'+
                    'Password="";'+
                    'Integrated Security=SSPI;'+ //集成安全
                    'Persist Security Info=False;'+
                    'User ID=sa;Initial Catalog='+''''+dbname+''''+';'+
                    'Data Source='+''''+DBServerName+'''';

         if ValidateMode=1 then//使用SQL SERVER验证模式
           ConnectionString:='Provider=SQLOLEDB.1;'+
                    'Password="";'+
                    'Persist Security Info=True;'+
                    'User ID=sa;Initial Catalog='+''''+Dbname+''''+';'+
                    'Data Source='+''''+DBServerName+'''';
         try
           KeepConnection:=True;
           Screen.Cursor:=crHourGlass;
           Connected:=True;
           Open;
           Screen.Cursor:=crDefault;
           ADOConnectLocalDB:=True;
         except
           ADOConnectLocalDB:=False;
         end;
       end;
    end;

    //Ado与ODBC共同连接数据库函数
    function ADOODBCConnectLocalDB(Const Adocon:TAdoConnection;Const Dbname:String;ValidateMode:Integer):boolean;
    begin
      with Adocon do
       begin
         Close;
         LoginPrompt:=False;  //若数据库不存在时,进行判断。。。。。。
         if ValidateMode=0 then//使用Windows NT验证模式
           ConnectionString:='Provider=MSDASQL.1;'+
                    'Password="";'+
                    'Persist Security Info=False;'+
                    'User ID=sa;Data Source='+''''+DBName+''''+';'+
                    'Initial Catalog='+''''+DBname+'''';

         if ValidateMode=1 then//使用SQL SERVER验证模式
           ConnectionString:='Provider=MSDASQL.1;'+
                    'Password="";'+
                    'Persist Security Info=True;'+
                    'User ID=sa;Data Source='+''''+DBName+''''+';'+
                    'Initial Catalog='+''''+DBname+'''';
         try
           KeepConnection:=True;
           Screen.Cursor:=crHourGlass;
           Connected:=True;
           Open;
           Screen.Cursor:=crDefault;
           ADOODBCConnectLocalDB:=True;
         except
           ADOODBCConnectLocalDB:=False;
         end;
       end;
    end;

    ///在指定的数据库中建立表
    function CreatTable(LpDataBaseName,LpTableName,LpSentence:string):Boolean;//建立新表
    Var
      CreatTableQuery:TQuery;
      SQLsentence:string;
      Successed:Boolean;//成功否
    begin
      Successed:=False;
      SQLsentence:='CREATE TABLE "'+ LpTableName +'" ' + LpSentence;
      CreatTableQuery:=TQuery.Create(nil);
      try
       try
         with CreatTableQuery do
         begin
          UniDirectional:=True;
          Active:=False;
          Sql.Clear;
          DataBaseName := LpDataBaseName; //数据库名
          Sql.Add(SQLsentence);
          ExecSQL;
          Successed:=True;
         end;
       except
         MessageBox(Application.Handle,Pchar(' 在建立数据库 '+Trim(LpDataBaseName)+' 中的 '+Trim(LpTableName)+' 表出错,建立未能成功 !'),'建立失败',0+16);
         Successed:=False;
       end;
      finally
       CreatTableQuery.Free;//释放建立的Query
       if Successed then
         Result:=True//建立成功
       else
         Result:=False;//建立失败
      end;
    end;

    //在指定的表中新填字段
    function AddField(LpFieldName:string; LpDataType: TFieldType; LpSize: Word):string;//建立新表
    var
      Sentence,SQLsentence : string;
    begin
      Sentence:= '';
      SQLsentence:='';
      if LpFieldName = '' then
       raise EDBUpdateErr.Create('字段名不能为空');
      if Pos(' ', LpFieldName) <> 0 then
       raise EDBUpdateErr.Create('字段名中不能含有空格字符');
      if LpDataType = ftString then
       sentence := 'ADD '+LpFieldName+' Char('+ IntToStr( LpSize ) + ')';
      if LpDataType = ftInteger then
       sentence := 'ADD '+LpFieldName+' Integer';
      if LpDataType = ftSmallInt then
       sentence := 'ADD '+LpFieldName+' SmallInt';
      if LpDataType = ftFloat then
       sentence := 'ADD '+LpFieldName+' Float('+ IntToStr( LpSize ) +',0)';
      if LpDataType = ftDate then
       sentence := 'ADD '+LpFieldName+' Date';
      if LpDataType = ftTime then
       sentence := 'ADD '+LpFieldName+' Time';
      if LpDataType = ftDateTime then
       sentence := 'ADD '+LpFieldName+' TimeStamp';
      if sentence = '' then
       raise EDBUpdateErr.Create('无效的字段类型');
      if SQLSentence = '' then
       SQLSentence := sentence
      else
       SQLSentence := SQLSentence + ', ' + sentence;
      Result:=SQLSentence;//返回SQL句体
    end;

    //在指定的表中删除字段
    function KillField(LpFieldName:string):String;//删除表中的字段
    var
      SQLsentence : string;
    begin
      if LpFieldName = '' then
       raise EDBUpdateErr.Create('字段名不能为空');
      if Pos(' ', LpFieldName) <> 0 then
       raise EDBUpdateErr.Create('字段名中不能含有空格字符');
      if SQLSentence = '' then
       SQLSentence := 'DROP COLUMN ' + LpFieldName
      else
       SQLSentence := SQLSentence + ', DROP ' + LpFieldName;
      Result:=SQLSentence;
    end;

    //修改表结构的SQL语句执行体
    function AlterTableExec(LpDataBaseName,LpSentence:string):Boolean;//修改表结构
    var
      AlterQueryTable:TQuery;
      Successed:Boolean;//成功否
    begin
      Successed:=False;
      AlterQueryTable:= TQuery.Create(nil);
      try
       try
         with AlterQueryTable do
         begin
          DataBaseName:=LpDataBaseName;//数据库名
          UniDirectional:=True;
          Active:=False;
          Sql.Clear;
          Sql.Add(LpSentence);
          ExecSQL;
          Successed:=True;
         end;
       except
         Successed:=False;
       end;
      finally
       AlterQueryTable.Free;
       if successed then
         Result:=True
       else
         Result:=False;
      end;
    end;

    //修改、添加、删除表结构时的SQL句体
    function GetSQLSentence(LpTableName,LpSQLsentence:string): string;
    begin
     Result := 'ALTER TABLE "'+ LpTableName +'" ' + LpSQLSentence + ';';
    end;


    //▎============================================================▎//
    //▎======================⑾进制函数及过程======================▎//
    //▎============================================================▎//

    //字符转化成十六进制
    function StrToHex(AStr: string): string;
    var
      I : Integer;
    //  Tmp: string;
      begin
       Result := '';
       For I := 1 to Length(AStr) do
       begin
         Result := Result + Format('%2x', [Byte(AStr[I])]);
       end;
       I := Pos(' ', Result);
       While I <> 0 do
       begin
         Result[I] := '0';
         I := Pos(' ', Result);
       end;
    end;

    //十六进制转化成字符
    function HexToStr(AStr: string): string;
    var
      I : Integer;
      CharValue: Word;
      begin
      Result := '';
      for I := 1 to Trunc(Length(Astr)/2) do
      begin
       Result := Result + ' ';
       CharValue := TransChar(AStr[2*I-1])*16 + TransChar(AStr[2*I]);
       Result[I] := Char(CharValue);
      end;
    end;

    function TransChar(AChar: Char): Integer;
    begin
      if AChar in ['0'..'9'] then
       Result := Ord(AChar) - Ord('0')
      else
       Result := 10 + Ord(AChar) - Ord('A');
      end;

    //▎============================================================▎//
    //▎=====================⑿其它函数及过程=======================▎//
    //▎============================================================▎//

    // 输出限制在Min..Max之间
    function TrimInt(Value, Min, Max: Integer): Integer; overload;
    begin
     if Value > Max then
      Result := Max
     else if Value < Min then
      Result := Min
     else
      Result := Value;
    end;

    // 输出限制在0..255之间
    function IntToByte(Value: Integer): Byte; overload;
    asm
        OR   EAX, EAX
        JNS  @@Positive
        XOR  EAX, EAX
        RET

    @@Positive:
        CMP  EAX, 255
        JBE  @@OK
        MOV  EAX, 255
    @@OK:
    end;

    // 由TRect分离出坐标、宽高
    procedure DeRect(Rect: TRect; var x, y, Width, Height: Integer);
    begin
     x := Rect.Left;
     y := Rect.Top;
     Width := Rect.Right - Rect.Left;
     Height := Rect.Bottom - Rect.Top;
    end;

    // 比较两个Rect
    function RectEqu(Rect1, Rect2: TRect): Boolean;
    begin
     Result := (Rect1.Left = Rect2.Left) and (Rect1.Top = Rect2.Top) and
      (Rect1.Right = Rect2.Right) and (Rect1.Bottom = Rect2.Bottom);
    end;

    // 产生TSize类型
    function EnSize(cx, cy: Integer): TSize;
    begin
     Result.cx := cx;
     Result.cy := cy;
    end;

    // 计算Rect的宽度
    function RectWidth(Rect: TRect): Integer;
    begin
     Result := Rect.Right - Rect.Left;
    end;

    // 计算Rect的高度
    function RectHeight(Rect: TRect): Integer;
    begin
     Result := Rect.Bottom - Rect.Top;
    end;

    // 判断范围
    function InBound(Value: Integer; Min, Max: Integer): Boolean;
    begin
     Result := (Value >= Min) and (Value <= Max);
    end;

    // 交换两个数
    procedure CnSwap(var A, B: Byte); overload;
    var
     Tmp: Byte;
    begin
     Tmp := A;
     A := B;
     B := Tmp;
    end;

    procedure CnSwap(var A, B: Integer); overload;
    var
     Tmp: Integer;
    begin
     Tmp := A;
     A := B;
     B := Tmp;
    end;

    procedure CnSwap(var A, B: Single); overload;
    var
     Tmp: Single;
    begin
     Tmp := A;
     A := B;
     B := Tmp;
    end;

    procedure CnSwap(var A, B: Double); overload;
    var
     Tmp: Double;
    begin
     Tmp := A;
     A := B;
     B := Tmp;
    end;

    // 延时
    procedure Delay(const uDelay: DWORD);
    var
     n: DWORD;
    begin
     n := GetTickCount;
     while ((GetTickCount - n) <= uDelay) do
      Application.ProcessMessages;
    end;

    // 在Win9X下让喇叭发声
    procedure BeepEx(const Freq: WORD = 1200; const Delay: WORD = 1);
    const
     FREQ_SCALE = 93180;
    var
     Temp: WORD;
    begin
     Temp := FREQ_SCALE div Freq;
     asm
      in al,61h;
      or al,3;
      out 61h,al;
      mov al,$b6;
      out 43h,al;
      mov ax,temp;
      out 42h,al;
      mov al,ah;
      out 42h,al;
     end;
     Sleep(Delay);
     asm
      in al,;
      and al,$fc;
      out ,al;
     end;
    end;

    // 显示Win32 Api运行结果信息
    procedure ShowLastError;
    var
     ErrNo: Integer;
     Buf: array[0..255] of Char;
    begin
     ErrNo := GetLastError;
     FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, ErrNo, 0, Buf, 255, nil);
     if Buf = '' then StrCopy(@Buf, PChar(SUnknowError));
     MessageBox(Application.Handle, PChar(string(Buf) + #10#13 +
      SErrorCode + IntToStr(ErrNo)),
      SCnInformation, MB_OK + MB_ICONINFORMATION);
    end;

    //将字体Font.Style写入INI文件
    function writeFontStyle(FS: TFontStyles; inifile: string; write: boolean):string;
    var
     Mystyle : string;
     Myini : Tinifile;
    begin
     Mystyle := '[';
     if fsBold in FS then MyStyle := MyStyle + 'fsBold';
     if fsItalic in FS then
     if MyStyle = '[' then
      MyStyle := MyStyle + 'fsItalic'
     else
      MyStyle := MyStyle + ',fsItalic';
     if fsUnderline in FS then
      if MyStyle = '[' then
        MyStyle := MyStyle + 'fsUnderline'
      else
        MyStyle := MyStyle + ',fsUnderline';
     if fsStrikeOut in FS then
      if MyStyle = '[' then
       MyStyle := MyStyle + 'fsStrikeOut'
      else
       MyStyle := MyStyle + ',fsStrikeOut';
     MyStyle := MyStyle + ']';
     if write then
     begin
      Myini := TInifile.Create(inifile);
      Myini.WriteString('FontStyle', 'style', MyStyle);
      Myini.free;
     end;
     Result := MyStyle;
    end;

    //从INI文件中读取字体Font.Style文件
    function readFontStyle(inifile: string): TFontStyles;
    var
     MyFontStyle : TFontStyles;
     MyStyle : string;
     Myini : Tinifile;
    begin
     MyFontStyle := [];
     Myini := TInifile.Create(inifile);
     Mystyle := Myini.ReadString('Fontstyle', 'style', '[]');
     if pos('fsBold', Mystyle) > 0 then MyFontStyle := MyFontStyle +  [fsBold];
     if Pos('fsItalic', MyStyle) > 0 then MyFontStyle := MyFontStyle + [fsItalic];
     if Pos('fsUnderline', MyStyle) > 0 then
      MyFontStyle := MyFontStyle + [fsUnderline];
     if Pos('fsStrikeOut', MyStyle) > 0 then
      MyFontStyle := MyFontStyle + [fsStrikeOut];
     MyIni.free;
     Result := MyFontStyle;
    end;

    //*取得TMemo 控件当前光标的行和列信息到Tpoint中
    //function ReadCursorPos(SourceMemo: TMemo): TPoint;
    function ReadCursorPos(SourceMemo: TMemo): string;
    var
      //  Point: TPoint;
      X,Y:integer;
    begin
    //  point.y := SendMessage(SourceMemo.Handle, EM_LINEFROMCHAR,SourceMemo.SelStart,0);
    //  point.x := SourceMemo.SelStart- SendMessage(SourceMemo.Handle,EM_LINEINDEX,point.y,0);
      y := SendMessage(SourceMemo.Handle, EM_LINEFROMCHAR,SourceMemo.SelStart,0);
      x := SourceMemo.SelStart- SendMessage(SourceMemo.Handle,EM_LINEINDEX,y,0);
      Result := '行:'+inttostr(y+1)+' '+'列:'+inttostr(x+1);
    end;

    //*检查Tmemo控件能否Undo功能
    function CanUndo(AMemo: TMemo): Boolean;
    begin
      Result :=AMemo.Perform(EM_CANUNDO, 0, 0)<>0;
    end;

    //* 实现Undo功能
    procedure Undo(Amemo: Tmemo);
    begin
      Amemo.Perform(EM_UNDO, 0, 0);
    end;

    //* 实现ComBoBox自动下拉
    procedure AutoListDisplay(ACombox:TComboBox);
    begin
      SendMessage(ACombox.handle, CB_SHOWDROPDOWN, Integer(True), 0);
    end;

    //* 小写金额转换为大写
    function UpperMoney(small:real):string;
    var
      SmallMonth,BigMonth:string;
      wei1,qianwei1:string[2];
      qianwei,dianweizhi,qian:integer;
      ObjSmall:real;
    begin
      {------- 修改参数令值更精确 -------}
      ObjSmall:=Abs(small);
      qianwei:=-2;
      Smallmonth:=formatfloat('0.00',ObjSmall);
     
      dianweizhi :=pos('.',Smallmonth);
      for qian:=length(Smallmonth) downto 1 do
      begin
       if qian<>dianweizhi then
         begin
          case strtoint(copy(Smallmonth,qian,1)) of
          1:wei1:='壹';
          2:wei1:='贰';
          3:wei1:='叁';
          4:wei1:='肆';
          5:wei1:='伍';
          6:wei1:='陆';
          7:wei1:='柒';
          8:wei1:='捌';
          9:wei1:='玖';
          0:wei1:='零';
          end;
          case qianwei of
          -3:qianwei1:='厘';
          -2:qianwei1:='分';
          -1:qianwei1:='角';
          0 :qianwei1:='元';
          1 :qianwei1:='拾';
          2 :qianwei1:='佰';
          3 :qianwei1:='千';
          4 :qianwei1:='万';
          5 :qianwei1:='拾';
          6 :qianwei1:='佰';
          7 :qianwei1:='千';
          8 :qianwei1:='亿';
          9 :qianwei1:='十';
          10:qianwei1:='佰';
          11:qianwei1:='千';
          end;
          inc(qianwei);
          if Small<0 then
            BigMonth :='负'+wei1+qianwei1+BigMonth
          else
            BigMonth :=wei1+qianwei1+BigMonth
         end;
      end;
      Result:=BigMonth;
    end;

    //利用系统时间产生随机数
    function Myrandom(Num: Integer): integer;
    var
      T: _SystemTime;
      X: integer;
      I: integer;
    begin
      Result := 0;
      If Num = 0 then Exit;;
       GetSystemTime(T);
       X := Trunc(T.wMilliseconds/10) * T.wSecond * 1231;
       X := X + random(1);
       if X<>0 then
         X := -X;
       X := Random(X);
       X := X mod num;
       for I := 0 to X do
         X := Random(Num);
       Result := X;
    end;

    //打开输入法
    procedure OpenIME(ImeName: string);
    var
     i: integer;
     MyHKL: hkl;
    begin
     if ImeName <> '' then begin
      if Screen.Imes.Count <> 0 then begin
       i := Screen.Imes.IndexOf(ImeName);
       if i >= 0 then MyHKL := hkl(Screen.Imes.Objects[i]);
       ActivateKeyboardLayout(MyHKL, KLF_ACTIVATE);
      end;
     end;
    end;

    //关闭输入法
    procedure CloseIME;
    var
     MyHKL: hkl;
    begin
     MyHKL := GetKeyboardLayout(0);
     if ImmIsIme(MyHKL) then
      ImmSimulateHotKey(Application.Handle, IME_CHOTKEY_IME_NONIME_TOGGLE);
    end;

    //打开中文输入法
    procedure ToChinese(hWindows: THandle; bChinese: boolean);
    begin
     if ImmIsIME(GetKeyboardLayOut(0)) <> bChinese then
      ImmSimulateHotKey(hWindows, IME_THotKey_IME_NonIME_Toggle);
    end;

    //数据备份
    procedure BackUpData(LpBackDispMessTitle:String);
    var
      i,j:integer;
      Source,Dest:array[0..200]of char;
      s1:string;
      Lp:_SHFILEOPSTRUCTA;
      Success:Integer;
    begin
      if MessageBox(Application.Handle,' 您确认要备份数据吗?','询问窗口',4+32+256)=6 then
      begin
       with LP do
       begin
       Lp.wnd:=Application.Handle;
         wFunc:=FO_COPY;
         s1:='DATA\*.*';
         i:=Length(s1);
         StrCopy(Source,PChar(s1));
         Source[i]:=#0;
         Source[i+1]:=#0;
         Source[i+2]:=#0;
         pFrom:=Source;
         s1:='BACKUP';
         j:=Length(s1);
         StrCopy(Dest,PChar(s1));
         Dest[j]:='\';
         Dest[j+1]:=#0;
         Dest[j+2]:=#0;
         Dest[j+3]:=#0;
         pTo:=Dest;
         fFlags:=FOF_ALLOWUNDO;
         fAnyOperationsAborted:=False;
         lpszProgressTitle:=PChar(LpBackDispMessTitle);
       end;
       Success:=SHFileOperation(LP);
       case Success of
         0:
          MessageBox(Application.Handle,' 所有数据已备份完成 !','提示窗口',0+48);
         117:
          MessageBox(Application.Handle,Pchar(' 您未创建“'+ExtractFilePath(Application.ExeName)+'BACKUP”目录所以不能完成数据备份 !'),'提示窗口',0+16)
         else
          MessageBox(Application.Handle,' 在备份数据的过程中被用户中途中断 !','提示窗口',0+16);
       end;
      end;
    end;




    ////////////////////////////////////////////////////////////////////////////////
    //                                      //
    //             从文件中读取Ado连接字串              //
    //                                      //
    ////////////////////////////////////////////////////////////////////////////////
    function GetConnectionString(DataBaseName:string):string;
    var FileStringList:Tstringlist;
      TempString: ansistring;
      TheReg:TRegistry;KeyName,fAppPath:string;
      i:Integer;
    begin

     TheReg:=TRegistry.Create;

     try
      TheReg.RootKey:=HKEY_LOCAL_MACHINE;
      KeyName:='Software\政府采购管理系统';
      if TheReg.OpenKey(KeyName,False) then
       fAppPath:=TheReg.ReadString('ApplicationPath');
     finally
      TheReg.Free;
     end;

     FileStringList:=Tstringlist.Create;
     //先判断connection.txt是否存在,存在就调入
     if FileExists(fAppPath+'\connection.txt') then
       FileStringList.LoadFromFile(fAppPath+'\connection.txt')
     else
     begin

       application.MessageBox('在系统所在目录中没有检测到连接文件(connection.txt),无法启动系统。','提示',MB_IconError+mb_ok);

       Result:='';
       FileStringList.Free;
       Exit;
     end;
     //组成一个符串,好进行处理。
     TempString:='';
     for i:=0 to FileStringList.Count-1 do
     begin
      TempString:=TempString+FileStringList.strings[i];
     end;

     
     TempString:=Replace(TempString,'DataBaseName',DataBaseName,False);

     Result:=TempString;

    end;



    {function GetRemoteServerName:返回远程服务器的机器名称}
    function GetRemoteServerName:string;
    var iniServer:TIniFile;
      TheReg:TRegistry;KeyName,fAppPath,RServerName:string;
    begin

     TheReg:=TRegistry.Create;

     try
      TheReg.RootKey:=HKEY_LOCAL_MACHINE;
      KeyName:='Software\政府采购管理系统';

      if TheReg.OpenKey(KeyName,False) then
       fAppPath:=TheReg.ReadString('ApplicationPath');
     finally
      TheReg.Free;
     end;

     
     try
      iniServer:=TIniFile.Create(fAppPath+'\RemoteServerName.ini');
      with iniServer do
       RServerName:=ReadString('Option','RServerName','');
      iniServer.Free;
     except
      raise exception.Create('致命错误:未找到包含Com服务器配置的信息文件,初始化失败。');
     end;
     Result:=RServerName;

    end;



    initialization
     WndLong := GetWindowLong(Application.Handle, GWL_EXSTYLE);
    end.

    {▎ 觉得还一般 请关注 http://www.cdsunco.com/down.htm  还有更多的好东西   ▎}
  • 相关阅读:
    Golang string slice
    Golang 切片
    Golang 数组
    Golang随机数
    如何才能轻松地分析日志?
    Linux 环境下 gzip 的加解密命令
    谁掳走了 nginx.pid 文件?
    这个 'ip' 竟然把我搞蒙圈了……
    Mysql 连接路径 url 参数解析
    C# 接口生成工具Swagger用法
  • 原文地址:https://www.cnblogs.com/shf/p/363655.html
Copyright © 2020-2023  润新知