📄 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, stCap, stAge, stYear, stMonth);
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;
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;
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;
dcbSex: TDBComboBox;
deBirth: TDBDateTimeEditEh;
cboPoli: TDBComboBox;
dcbFolk: 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;
dcbSort: TDBComboBox;
dcbCap: TDBComboBox;
sbCap: TSpeedButton;
Image1: TImage;
dmDesf: TDBMemo;
Label48: TLabel;
deLeftr: TDBEdit;
meoBirth: TMemo;
Label49: TLabel;
dcbSDep: TDBComboBox;
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 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);
procedure tvPerChange(Sender: TObject; Node: TTreeNode);
procedure sbCapClick(Sender: TObject);
procedure tvPerMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCreate(Sender: TObject);
procedure dcbDepExit(Sender: TObject);
private
{ Private declarations }
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);
procedure BeforeShow;
procedure AfterShow(aStatType: TSetState = ssSta);
procedure GetBrithStaff(IsMonth: Boolean);
public
{ Public declarations }
ID: Integer;
sWhr: string;
procedure FillData;
procedure DrawTree(aSql: string = '');
end;
var
frmStainfo: TfrmStainfo;
sm, sd: string;
iCur: Integer = 0;
type
Psid = ^TNodeData;
TNodeData = record
ID: Integer;
sNo, sEn: string;
end;
implementation
uses umain, udata, uglobal, udep, uprint;
var
nIndex: Integer = 0;
{$R *.dfm}
procedure TfrmStainfo.DrawTree(aSql: string);
procedure SetBtnState(aState: Boolean);
begin
btnEdit.Enabled := aState;
btnAdd.Enabled := aState;
btnInqu.Enabled := aState;
btnPrior.Enabled := aState;
btnNext.Enabled := aState;
btnDel.Enabled := aState;
btnPrint.Enabled := aState;
end;
var
aqDep, aqSDep, aqSta: TADOQuery;
i, j, k: Integer;
Nodeo, Nodep, Nodec: TTreeNode;
sid: Psid;
begin
if aSql = '' then aSql := 'select id, stano, [name], ename, dep, sdep from stainfo order by [name]';
tvPer.Items.Clear;
aqDep := TADOQuery.Create(self);
with aqDep do
begin
Connection := dmPer.acPer;
SQL.Text := 'select dep from dept order by ornum';
Open;
end;
aqSDep := TADOQuery.Create(self);
with aqSDep do
begin
Connection := dmPer.acPer;
SQL.Text := 'select sdep, dep from sdep order by ornum';
Open;
end;
aqSta := TADOQuery.Create(self);
with aqSta do
begin
Connection := dmPer.acPer;
SQL.Text := aSql;
Open;
end;
if not aqDep.Eof then
begin
SetBtnState(true);
tvPer.AutoExpand := true;
tvPer.ReadOnly := true;
Nodeo := tvPer.Items.AddFirst(nil, '公司机构[' + IntToStr(aqSta.RecordCount) + '人]');
for i := 0 to aqDep.RecordCount - 1 do
begin
with aqSta do
begin
Filtered := false;
Filter := 'dep = ' + QuotedStr(aqDep.FieldByName('dep').AsString);
Filtered := true;
end;
Nodep := tvPer.Items.AddChild(Nodeo, aqDep.FieldByName('dep').Asstring+'[' + IntToStr(aqSta.RecordCount) + ']');
with aqSta do
begin
Filtered := false;
Filter := '(dep = ' + QuotedStr(aqDep.FieldByName('dep').AsString);
Filter := Filter + ' and sdep = '''')';
Filter := Filter + ' or (dep = ' + QuotedStr(aqDep.FieldByName('dep').AsString);
Filter := Filter + ' and sdep = null)';
Filtered := true;
end;
if not aqSta.Eof then
for j := 0 to aqSta.RecordCount - 1 do
begin
New(sid);
sid^.ID := StrToInt(aqSta.FieldByName('id').AsString);
sid^.sNo := aqSta.FieldByName('stano').AsString;
sid^.sEn := aqSta.FieldByName('ename').AsString;
tvPer.Items.AddChildObject(Nodep, aqSta.FieldByName('name').AsString, sid);
aqSta.Next;
end;
{添加单位b}
with aqSDep do
begin
Filtered := false;
Filter := 'dep = ' + QuotedStr(aqDep.FieldByName('dep').AsString);
Filtered := true;
end;
if not aqSDep.Eof then
for j := 0 to aqSDep.RecordCount - 1 do
begin
Nodec := tvPer.Items.AddChild(Nodep, aqSDep.FieldByName('sdep').AsString);
with aqSta do
begin
Filtered := false;
Filter := 'sdep = ' + QuotedStr(aqSDep.FieldByName('sdep').AsString);
Filtered := true;
end;
if not aqSta.Eof then
for k := 0 to aqSta.RecordCount - 1 do
begin
New(sid);
sid^.ID := StrToInt(aqSta.FieldByName('id').AsString);
sid^.sNo := aqSta.FieldByName('stano').AsString;
sid^.sEn := aqSta.FieldByName('ename').AsString;
tvPer.Items.AddChildObject(Nodec, aqSta.FieldByName('name').AsString, sid);
aqSta.Next;
end;
aqSDep.Next;
end;
{添加单位e}
aqDep.Next;
end;
end
else
begin
tvPer.Items.AddFirst(nil, '请先添加部门!');
SetBtnState(false);
end;
aqSta.Close;
FreeAndNil(aqSta);
aqDep.Close;
FreeAndNil(aqDep);
if tvPer.Enabled then tvPer.SetFocus;
meoBirth.Clear;
GetBrithStaff(true);
GetBrithStaff(false);
for i := 0 to tvPer.Items.Count - 1 do
if tvPer.Items[i].Data <> nil then
begin
tvPer.Selected := tvPer.Items[i];
Exit;
end;
btnEdit.Enabled := false;
btnDel.Enabled := false;
if tvPer.Items.Count > 0 then tvPer.Items.GetFirstNode.Expanded := true;
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
begin
if Node.Data <> nil then
Node.ImageIndex := 2
else
if Node.Expanded then
Node.ImageIndex := 1
else
Node.ImageIndex := 0;
end
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(const CnString: string): string;
const
ChinaCode: array[0..25, 0..1] of Integer = ((1601, 1636), (1637, 1832), (1833, 2077),
(2078, 2273), (2274, 2301), (2302, 2432), (2433, 2593), (2594, 2786), (9999, 0000),
(2787, 3105), (3106, 3211), (3212, 3471), (3472, 3634), (3635, 3722), (3723, 3729),
(3730, 3857), (3858, 4026), (4027, 4085), (4086, 4389), (4390, 4557), (9999, 0000),
(9999, 0000), (4558, 4683), (4684, 4924), (4925, 5248), (5249, 5589));
var
i, j, HzOrd: integer;
begin
i := 1;
while i <= Length(CnString) do
begin
if (CnString[i] >= #160) and (CnString[i + 1] >= #160) then
begin
HzOrd := (Ord(CnString[i]) - 160) * 100 + Ord(CnString[i + 1]) - 160;
for j := 0 to 25 do
begin
if (HzOrd >= ChinaCode[j][0]) and (HzOrd <= ChinaCode[j][1]) then
begin
Result := Result + char(byte('a') + j);
break;
end;
end;
Inc(i);
end else Result := Result + CnString[i];
Inc(i);
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -