项目总结

来源:互联网 发布:js代码在线格式化 编辑:程序博客网 时间:2024/04/28 20:06
      从北京回来有一个星期了,想想刚刚做完的这个项目,其实也有很多东西要总结的。
  1、作为一个安全类的软件系统,有几种功能是不能缺少的。其实这几个功能也不算很难,但是如果没有,就很难通过测评中心(国家级)的评测。
     a、超时认证保护功能
     在系统间隔某端时间,无人使用,系统将自动切换至登陆界面。
     function fGetKXTime   //得到当前空闲的时间,ms
     var
       t :TLastInputInfo;
     begin 
       t.cbSize := SizeOf(TLastInputInfo); 
       GetLastInputInfo(t);  
       result := GetTickCount - t.dwTime;
     end;
     b、密码强度的问题
     口令长度要够,不能是全数字或全字母,要数字和字母的组合。
     c、登陆口令错误次数限制
     当口令错误几次后,必须锁定系统一段时间,然后,才能再试。
     d、角色要分开
     系统必须有管理员和审计员两个角色,审计员一定能看到管理员的操作日志。
     e、导入导出
     能够自由导出数据,及导入数据
     f、数据库空间报警
     对使用sql server的数据库来说,这一功能应该也不能少。
    
     以上这些都是基础功能,但是对于一个安全类的软件,是不能缺少的。
   2、ehlib控件的使用(二)
     上一篇博客写了使用(一),这一次接着写。
     a、点击列标题排序
     procedure  SortDBGridEh(Sender :TObject; ACol :Integer; Column :TColumnEh);
   var
     FieldName, SortStr: string;
   begin
     Screen.Cursor := crHourGlass;
     try
       if (Sender is TDBGridEh) and
         ((Sender as TDBGridEh).DataSource.DataSet <> nil) then
       begin
         if not ((Sender as TDBGridEh).DataSource.DataSet is TCustomADODataSet) then
           Exit;
   
         if not (Sender as TDBGridEh).DataSource.DataSet.Active then
           Exit;
   
         FieldName := Column.FieldName;
         if (Sender as TDBGridEh).DataSource.DataSet.FindField(FieldName).IsBlob then
           Exit;
   
         if (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).FieldKind =
           fkData then
           SortStr := FieldName
         else if (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).FieldKind =
           fkLookup then
           FieldName := (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).KeyFields
         else
           FieldName := '';
   
         if (FieldName = '') or (Pos(';', FieldName) > 0) then
           Exit;
         case Column.Title.SortMarker of
           smNoneEh:
             begin
               Column.Title.SortMarker := smUpEh;
               TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort :=
                 FieldName;
   
             end;
           smUpEh:
             begin
               Column.Title.SortMarker := smDownEh;
               TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort :=
                 FieldName + ' DESC';
             end;
           smDownEh:
             begin
               Column.Title.SortMarker := smNoneEh;
               TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort := '';
             end;
         end;
       end;
     finally
       Screen.Cursor := crDefault;
     end;
   end; 
       首先要设置列标题为按钮,其次在单击事件中调用上面的代码
       b、打印表格
       首先放一个PrintDbGridEh控件到form上,然后设置属性prnt1.DBGridEh := dbgrid2;最后再prnt2.Preview;就可以了。
       如果需要打印表头,需要设置BeforGridText属性。
       c、输出数据
       procedure pExport(grid1 :TDBGridEh);
    var
      ExpClass :TDBGridEhExportClass;
      ext :String;
      dlg : TSaveDialog;
    begin
      dlg := TSaveDialog.Create(nil);
      dlg.Filter := 'txt文件(*.txt)|*.txt|csv文件(*.csv)|*.csv|htm文件(*.htm)|*.htm|rtf文件(*.rtf)|*.rtf|xls文件(*.xls)|*.xls';
      if dlg.Execute then
      begin
         case dlg.FilterIndex of
            1: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end;
            2: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;
            3: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'html'; end;
            4: begin ExpClass := TDBGridEhExportAsRTF; Ext := 'rtf'; end;
            5: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xls'; end;
            6: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xml'; end;
          else
            ExpClass := nil; Ext := '';
          end;
          if ExpClass <> nil then
          begin
            if UpperCase(Copy(dlg.FileName,Length(dlg.FileName)-2,3)) <> UpperCase(Ext) then
               dlg.FileName := dlg.FileName + '.' + Ext;
             SaveDBGridEhToExportFile(ExpClass,grid1,dlg.FileName,True);
          end;
       end;
       dlg.Free;
    end;
原创粉丝点击