📄 ustainfo.pas
字号:
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 + -