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

📄 ustainfo.pas

📁 在在一原封不动硒鼓二可耕地z经理可耕地可耕地枯草杆菌二期工程二枯枯树可耕地票面苛
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit ustainfo;

interface        

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls, XPMenu, StdCtrls, Mask, DBCtrls, ADODB,
  ImgList, DB, Buttons, Grids, DBGrids, jpeg, Menus, DBCtrlsEh, DateUtils,
  DBGridEh, ToolWin, TeEngine, Series, TeeProcs, Chart, ExtDlgs;

type
  TSetState = (ssSta, ssExper, ssFami, ssAP, ssTrain);
  TOpeType = (otEdit, otAdd, otCancel);
  TStatType = (stDep, stSex, stLevel, stAge, stYear, stMonth);

type
  TfrmStainfo = class(TForm)
    tvPer: TTreeView;
    sptsta: TSplitter;
    ilTree: TImageList;
    gbPer: TGroupBox;
    pcSta: TPageControl;
    tsStainfo: TTabSheet;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label23: TLabel;
    Label22: TLabel;
    Label24: TLabel;
    pnlimg: TPanel;
    imgi: TImage;
    btnEditi: TButton;
    btnDeli: TButton;
    edtStano: TDBEdit;
    edtName: TDBEdit;
    edtSorts: TDBEdit;
    edtDuty: TDBEdit;
    edtProvi: TDBEdit;
    edtCardno: TDBEdit;
    edtRecno: TDBEdit;
    edtSlevel: TDBEdit;
    edtHealth: TDBEdit;
    edtPcode: TDBEdit;
    edtAddress: TDBEdit;
    dcbLevel: TDBComboBox;
    dcbMarried: TDBComboBox;
    edtDes: TDBEdit;
    dcbDep: TDBComboBox;
    tsExper: TTabSheet;
    tsFami: TTabSheet;
    tsAP: TTabSheet;
    tsTrain: TTabSheet;
    btnEdit: TButton;
    btnAdd: TButton;
    btnPrior: TButton;
    btnNext: TButton;
    btnDel: TButton;
    btnClose: TButton;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    deDuty: TDBEdit;
    deCom: TDBEdit;
    imgexper: TImage;
    imghome: TImage;
    Label30: TLabel;
    dbeName: TDBEdit;
    Label31: TLabel;
    dbeCom: TDBEdit;
    Label32: TLabel;
    dbeTel: TDBEdit;
    Label33: TLabel;
    Label34: TLabel;
    dbeDes: TDBEdit;
    dbFami: TDBComboBox;
    deTopic: TDBEdit;
    Label35: TLabel;
    Label36: TLabel;
    Label37: TLabel;
    Label38: TLabel;
    dbSort: TDBComboBox;
    Label39: TLabel;
    dmDes: TDBMemo;
    deCourse: TDBEdit;
    Label40: TLabel;
    Label41: TLabel;
    Label42: TLabel;
    deTrcom: TDBEdit;
    deDLimit: TDBEdit;
    Label43: TLabel;
    Label44: TLabel;
    imgtrain: TImage;
    deCerti: TDBEdit;
    Label45: TLabel;
    btnInqu: TButton;
    imgb: TImage;
    imgr: TImage;
    odimg: TOpenDialog;
    pmTree: TPopupMenu;
    pniinqu: TMenuItem;
    pmiadd: TMenuItem;
    pmiedit: TMenuItem;
    pmidel: TMenuItem;
    mnuexpand: TMenuItem;
    mnuclose: TMenuItem;
    btnPrint: TButton;
    aqStaInfo: TADOQuery;
    deInDate: TDBDateTimeEditEh;
    deBarstart: TDBDateTimeEditEh;
    deBarend: TDBDateTimeEditEh;
    dcbSpecial: TDBComboBox;
    edtBarYear: TDBEdit;
    Label46: TLabel;
    deSDate: TDBDateTimeEditEh;
    deEdate: TDBDateTimeEditEh;
    deDep: TDBEdit;
    xmStaInfo: TXPMenu;
    dbDep: TDBComboBox;
    deDate: TDBDateTimeEditEh;
    dteSDate: TDBDateTimeEditEh;
    dteEDate: TDBDateTimeEditEh;
    dgExper: TDBGridEh;
    dgFami: TDBGridEh;
    dgAP: TDBGridEh;
    dgTrain: TDBGridEh;
    cboSex: TDBComboBox;
    deBirth: TDBDateTimeEditEh;
    cboPoli: TDBComboBox;
    cbFolk: TDBComboBox;
    tsStat: TTabSheet;
    cbStatTop: TCoolBar;
    Label47: TLabel;
    sbDep: TSpeedButton;
    sbSex: TSpeedButton;
    sbElevel: TSpeedButton;
    sbAge: TSpeedButton;
    sbYear: TSpeedButton;
    sbMonth: TSpeedButton;
    dgStat: TDBGridEh;
    chrStaInfo: TChart;
    Series1: TPieSeries;
    dsStat: TDataSource;
    sbSaveAs: TSpeedButton;
    spdChart: TSavePictureDialog;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure tvPerGetImageIndex(Sender: TObject; Node: TTreeNode);
    procedure tvPerCollapsed(Sender: TObject; Node: TTreeNode);
    procedure tvPerGetSelectedIndex(Sender: TObject; Node: TTreeNode);
    procedure FormActivate(Sender: TObject);
    procedure tvPerChanging(Sender: TObject; Node: TTreeNode;
      var AllowChange: Boolean);
    procedure tsStainfoShow(Sender: TObject);
    procedure btnEditClick(Sender: TObject);
    procedure btnAddClick(Sender: TObject);
    procedure btnInquClick(Sender: TObject);
    procedure btnPriorClick(Sender: TObject);
    procedure btnNextClick(Sender: TObject);
    procedure btnDelClick(Sender: TObject);
    procedure btnPrintClick(Sender: TObject);
    procedure btnCloseClick(Sender: TObject);
    procedure tsExperShow(Sender: TObject);
    procedure tsFamiShow(Sender: TObject);
    procedure tsAPShow(Sender: TObject);
    procedure tsTrainShow(Sender: TObject);
    procedure tvPerClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure btnEditiClick(Sender: TObject);
    procedure btnDeliClick(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure mnuexpandClick(Sender: TObject);
    procedure mnucloseClick(Sender: TObject);
    procedure tsStatShow(Sender: TObject);
    procedure sbDepClick(Sender: TObject);
    procedure sbSexClick(Sender: TObject);
    procedure sbElevelClick(Sender: TObject);
    procedure sbAgeClick(Sender: TObject);
    procedure sbYearClick(Sender: TObject);
    procedure sbMonthClick(Sender: TObject);
    procedure sbSaveAsClick(Sender: TObject);
  private
    { Private declarations }
    procedure DrawTree;
    procedure FreeTree;
    procedure SetState(aCon: TSetState = ssSta; aState: Boolean = true); overload;
    procedure SetState(aCon: TSetState = ssSta; aOtype: TOpeType = otEdit); overload;
    procedure AddData(aCon: TSetState = ssSta);
    procedure UpdateData(aCon: TSetState = ssSta);
    procedure AddStatData(aStatType: TStatType = stDep);
  public
    { Public declarations }
    ID: Integer;
  end;

var
  frmStainfo: TfrmStainfo;
  
type
  Psid = ^TNodeData;
  TNodeData = record
    ID: integer;
    sNo, sEn: string;
end;

implementation

uses umain, udata, uglobal, udep, uprint;

{$R *.dfm}

procedure TfrmStainfo.DrawTree;
var
  aqM01, aqM02: TADOQuery;
  i, j: integer;
  Nodeo, Nodep: TTreeNode;
  sid: Psid;
begin
  tvPer.Items.Clear;
  aqM01 := TADOQuery.Create(nil);
  with aqM01 do
  begin
    Connection := dmper.acPer;
    Sql.Clear;
    SQL.Text := 'select dep from dept order by ornum';
    Open;
  end;
  aqM02 := TADOQuery.Create(nil);
  aqM02.Connection := dmper.acper;
  if not aqM01.Eof then
  begin
    tvPer.AutoExpand := true;
    tvPer.ReadOnly := true;
    Nodeo := tvPer.Items.AddFirst(nil, '公司机构');
    for i := 0 to aqM01.RecordCount - 1 do
    begin
      Nodep := tvPer.Items.AddChild(Nodeo, aqM01.FieldByName('dep').Asstring);
      with aqM02 do
      begin
        Close;
        SQL.Clear;
        SQL.Text := 'select id, stano, name, ename from stainfo where dep ="' + aqM01.FieldByName('dep').Value + '" order by name';
        Open;
      end;
      if not aqM02.Eof then
        for j := 0 to aqM02.RecordCount - 1 do
        begin
          New(sid);
          sid^.ID := StrToInt(aqM02.FieldByName('id').AsString);
          sid^.sNo := aqM02.FieldByName('stano').AsString;
          sid^.sEn := aqM02.FieldByName('ename').AsString;
          tvPer.Items.AddChildObject(Nodep, aqM02.FieldByName('name').AsString, sid);
          aqM02.Next;
        end;
      aqM01.Next;
    end;
  end;
  aqM02.Close;
  FreeAndNil(aqM02);
  aqM01.Close;
  FreeAndNil(aqM01);
  if tvPer.Enabled then
    tvPer.SetFocus;

  for i := 0 to tvPer.Items.Count - 1 do
    if tvPer.Items[i].Data = nil then
      tvPer.Selected := tvPer.Items[i + 1]
    else
      Break;
end;

procedure Tfrmstainfo.tvperGetImageIndex(Sender: TObject; Node: TTreeNode);
begin
  if not node.IsFirstNode then
  begin
    if node.HasChildren then
    begin
      if node.Expanded then
        node.ImageIndex := 1
      else
        node.ImageIndex := 0;
    end
    else
      if node.Level > 1 then
        node.ImageIndex := 2
      else
      if node.Expanded then
        node.ImageIndex := 1
      else
        node.ImageIndex := 0;
  end
  else
  begin
    if node.HasChildren then
      if node.Expanded then
        node.ImageIndex := 4
      else
        node.ImageIndex := 3;
  end;
end;

procedure Tfrmstainfo.tvperGetSelectedIndex(Sender: TObject;
  Node: TTreeNode);
begin
  Node.SelectedIndex := Node.ImageIndex;
end;

procedure TfrmStainfo.FreeTree;
var
  i: integer;
begin
  for i := 0 to tvPer.Items.Count - 1 do
    if tvPer.Items[i].data <> nil then
      Dispose(tvPer.Items[i].data);
end;

function GetEn(CnString: string): string;
  function GetEnChar(cnchar: string): char;
  begin
    case Word(cnchar[1]) shl 8 + Word(cnchar[2]) of
      $B0A1..$B0C4: result := 'a';
      $B0C5..$B2C0: result := 'b';
      $B2C1..$B4ED: result := 'c';
      $B4EE..$B6E9: result := 'd';
      $B6EA..$B7A1: result := 'e';
      $B7A2..$B8C0: result := 'f';
      $B8C1..$B9FD: result := 'g';
      $B9FE..$BBF6: result := 'h';
      $BBF7..$BFA5: result := 'j';
      $BFA6..$C0AB: result := 'k';
      $C0AC..$C2E7: result := 'l';
      $C2E8..$C4C2: result := 'm';
      $C4C3..$C5B5: result := 'n';
      $C5B6..$C5BD: result := 'o';
      $C5BE..$C6D9: result := 'p';
      $C6DA..$C8BA: result := 'q';
      $C8BB..$C8F5: result := 'r';
      $C8F6..$CBF9: result := 's';
      $CBFA..$CDD9: result := 't';
      $CDDA..$CEF3: result := 'w';
      $CEF4..$D188: result := 'x';
      $D1B9..$D4D0: result := 'y';
      $D4D1..$D7F9: result := 'z';
    else
      result := char(0);
    end;
  end;
var
  i, len: integer;
begin
  CnString := StringReplace(CnString, ' ', '', [rfReplaceAll]);  //删除空格
  len := Length(CnString) - Length(WideString(CnString));        //汉字个数
  For i :=1 to len do
    result := result + GetEnChar(copy(CnString, 2*i-1, 2));
end;

procedure TfrmStainfo.SetState(aCon: TSetState; aState: Boolean);
var
  i, j: Integer;
begin
  case aCon of
    ssSta:
    begin
      if aState = true then
      begin
        btnEditi.Enabled := true;
        btnDeli.Enabled := true;
        for i := 0 to tsStainfo.ControlCount - 1 do
          if tsStainfo.Controls[i] is TDBEdit then
          begin
            TDBEdit(tsStainfo.Controls[i]).ReadOnly := true;
            TDBEdit(tsStainfo.Controls[i]).Color := clSkyBlue;
          end
          else if tsStainfo.Controls[i] is TDBComboBox then
          begin
            TDBComboBox(tsStainfo.Controls[i]).ReadOnly := true;
            TDBComboBox(tsStainfo.Controls[i]).Color := clSkyBlue;
          end
          else if tsStainfo.Controls[i] is TDBDateTimeEditEh then
          begin
            TDBDateTimeEditEh(tsStainfo.Controls[i]).ReadOnly := true;
            TDBDateTimeEditEh(tsStainfo.Controls[i]).Color := clSkyBlue;
          end;
      end
      else
      begin
        for j := 0 to tsStainfo.ControlCount - 1 do
          if tsStainfo.Controls[j] is TDBEdit then
          begin
            TDBEdit(tsStainfo.Controls[j]).ReadOnly := false;
            TDBEdit(tsStainfo.Controls[j]).Color := clWindow;
          end
          else if tsStainfo.Controls[j] is TDBComboBox then
          begin
            TDBComboBox(tsStainfo.Controls[j]).ReadOnly := false;
            TDBComboBox(tsStainfo.Controls[j]).Color := clWindow;
          end
          else if tsStainfo.Controls[j] is TDBDateTimeEditEh then
          begin
            TDBDateTimeEditEh(tsStainfo.Controls[j]).ReadOnly := false;
            TDBDateTimeEditEh(tsStainfo.Controls[j]).Color := clWindow;
          end;

        if aqStaInfo.State = dsInsert then
        begin
          btnEditi.Enabled := false;
          btnDeli.Enabled := false;
          edtStano.SetFocus;
          deBirth.Value := IncYear(Date(), -20);
          deInDate.Value := Date();
          deBarstart.Value := Date();
          deBarend.Value := IncYear(Date(), 1);
        end
        else
        begin
          edtStano.ReadOnly := true;
          edtStano.Color := clSkyBlue;
          edtName.SetFocus;
        end;
      end;
    end;

    ssExper:
    begin
      deSDate.ReadOnly := aState;
      deEdate.ReadOnly := aState;
      deCom.ReadOnly := aState;
      deDep.ReadOnly := aState;
      deDuty.ReadOnly := aState;
      if aState = true then
      begin
        dgExper.Enabled := true;
        deSDate.Color := clSkyBlue;
        deEdate.Color := clSkyBlue;
        deCom.Color := clSkyBlue;
        deDep.Color := clSkyBlue;
        deDuty.Color := clSkyBlue;
      end
      else
      begin
        dgExper.Enabled := false;

        deSDate.SetFocus;
        deSDate.Color := clWindow;
        deEdate.Color := clWindow;
        deCom.Color := clWindow;
        deDep.Color := clWindow;
        deDuty.Color := clWindow;
        if aqStaInfo.State = dsInsert then
        begin
          deSDate.Value := IncYear(Date(), -1);
          deEdate.Value := Date();
        end; 
      end;
    end;

    ssFami:
    begin
      dbeName.ReadOnly := aState;
      dbFami.ReadOnly := aState;
      dbeTel.ReadOnly := aState;
      dbeCom.ReadOnly := aState;
      dbeDes.ReadOnly := aState;
      if aState = true then
      begin
        dgFami.Enabled := true;
        dbeName.Color := clSkyBlue;
        dbFami.Color := clSkyBlue;
        dbeTel.Color := clSkyBlue;
        dbeCom.Color := clSkyBlue;
        dbeDes.Color := clSkyBlue;
      end
      else
      begin
        dgFami.Enabled := false;
        dbeName.SetFocus;
        dbeName.Color := clWindow;
        dbFami.Color := clWindow;
        dbeTel.Color := clWindow;
        dbeCom.Color := clWindow;
        dbeDes.Color := clWindow;
      end;
    end;

    ssAP:
    begin
      dbSort.ReadOnly := aState;
      deTopic.ReadOnly := aState;
      dbDep.ReadOnly := aState;
      deDate.ReadOnly := aState;
      dmDes.ReadOnly := aState;
      if aState = true then
      begin
        dgap.Enabled := true;
        dbSort.Color := clSkyBlue;
        deTopic.Color := clSkyBlue;
        dbDep.Color := clSkyBlue;
        deDate.Color := clSkyBlue;
        dmDes.Color := clSkyBlue;
      end
      else
      begin
        dgap.Enabled := false;
        dbSort.SetFocus;
        dbSort.Color := clWindow;
        deTopic.Color := clWindow;
        dbDep.Color := clWindow;
        deDate.Color := clWindow;
        dmDes.Color := clWindow;
        if aqStaInfo.State = dsInsert then
          deDate.Value := Date();
      end;
    end;

    ssTrain:
    begin
      deCourse.ReadOnly := aState;
      deDLimit.ReadOnly := aState;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -