📄 ustadetail.pas
字号:
unit uStadetail;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TeEngine, Series, TeeProcs, Chart, Buttons, ToolWin, ComCtrls,
StdCtrls, DBCtrls, Grids, DBGridEh, jpeg, DBCtrlsEh, Mask, ExtCtrls, DB,
ADODB, DateUtils, ExtDlgs;
type
TOperType = (otEdit, otAdd, otView);
TStatType = (stDep, stSex, stLevel, stCap, stAge, stYear, stMonth);
TfraStaDetail = class(TFrame)
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;
Label46: TLabel;
pnlimg: TPanel;
imgi: TImage;
btnEditi: TButton;
btnDeli: TButton;
deStano: TDBEdit;
deName: TDBEdit;
edtProvi: TDBEdit;
edtCardno: TDBEdit;
edtRecno: TDBEdit;
edtSlevel: TDBEdit;
edtPcode: TDBEdit;
edtAddress: TDBEdit;
dcbLevel: TDBComboBox;
dcbMarried: TDBComboBox;
edtDes: TDBEdit;
dcbDep: TDBComboBox;
deInDate: TDBDateTimeEditEh;
deBarstart: TDBDateTimeEditEh;
deBarend: TDBDateTimeEditEh;
dcbSpecial: TDBComboBox;
edtBarYear: TDBEdit;
dcbSex: TDBComboBox;
deBirth: TDBDateTimeEditEh;
cboPoli: TDBComboBox;
dcbFolk: TDBComboBox;
dcbSort: TDBComboBox;
dcbCap: TDBComboBox;
tsExper: TTabSheet;
Label25: TLabel;
Label26: TLabel;
Label27: TLabel;
Label28: TLabel;
Label29: TLabel;
imgexper: TImage;
Label48: TLabel;
deDuty: TDBEdit;
deCom: TDBEdit;
deSDate: TDBDateTimeEditEh;
deEdate: TDBDateTimeEditEh;
deDep: TDBEdit;
dgExper: TDBGridEh;
deLeftr: TDBEdit;
tsFami: TTabSheet;
imghome: TImage;
Label30: TLabel;
Label31: TLabel;
Label32: TLabel;
Label33: TLabel;
Label34: TLabel;
dbeName: TDBEdit;
dbeCom: TDBEdit;
dbeTel: TDBEdit;
dbFami: TDBComboBox;
dgFami: TDBGridEh;
dmDesf: TDBMemo;
tsAP: TTabSheet;
Label35: TLabel;
Label36: TLabel;
Label37: TLabel;
Label38: TLabel;
Label39: TLabel;
Image1: TImage;
deTopic: TDBEdit;
dbSort: TDBComboBox;
dmDes: TDBMemo;
dbDep: TDBComboBox;
deDate: TDBDateTimeEditEh;
dgAP: TDBGridEh;
tsTrain: TTabSheet;
Label40: TLabel;
Label41: TLabel;
Label42: TLabel;
Label43: TLabel;
Label44: TLabel;
imgtrain: TImage;
Label45: TLabel;
deCourse: TDBEdit;
deTrcom: TDBEdit;
deDLimit: TDBEdit;
deCerti: TDBEdit;
dteSDate: TDBDateTimeEditEh;
dteEDate: TDBDateTimeEditEh;
dgTrain: TDBGridEh;
tsStat: TTabSheet;
cbStatTop: TCoolBar;
Label47: TLabel;
sbDep: TSpeedButton;
sbSex: TSpeedButton;
sbElevel: TSpeedButton;
sbAge: TSpeedButton;
sbYear: TSpeedButton;
sbMonth: TSpeedButton;
sbSaveAs: TSpeedButton;
sbCap: TSpeedButton;
dgStat: TDBGridEh;
chrStaInfo: TChart;
Series1: TPieSeries;
aqStaDetail: TADOQuery;
dsStat: TDataSource;
spdChart: TSavePictureDialog;
odImg: TOpenDialog;
Label50: TLabel;
deTel: TDBEdit;
Label51: TLabel;
deMobile: TDBEdit;
Label52: TLabel;
dcbDutyState: TDBComboBox;
Label53: TLabel;
deDutyDate: TDBDateTimeEditEh;
Label54: TLabel;
deStaDate: TDBDateTimeEditEh;
Label55: TLabel;
deLeftDate: TDBDateTimeEditEh;
Label56: TLabel;
deMail: TDBEdit;
Label57: TLabel;
deSchool: TDBEdit;
Label58: TLabel;
deGraDate: TDBEdit;
Label59: TLabel;
deBirthf: TDBEdit;
Label60: TLabel;
dcbPolif: TDBComboBox;
dcbBody: TDBComboBox;
procedure btnEditiClick(Sender: TObject);
procedure btnDeliClick(Sender: TObject);
procedure pcStaChange(Sender: TObject);
procedure sbDepClick(Sender: TObject);
procedure sbSexClick(Sender: TObject);
procedure sbElevelClick(Sender: TObject);
procedure sbAgeClick(Sender: TObject);
procedure sbCapClick(Sender: TObject);
procedure sbYearClick(Sender: TObject);
procedure sbMonthClick(Sender: TObject);
procedure sbSaveAsClick(Sender: TObject);
private
{ Private declarations }
FID: Integer;
procedure BeforeShow;
procedure AfterShow(AIndex: Integer = 0);
procedure SetID(AValue: Integer = 0);
procedure AddStatData(AStatType: TStatType = stDep);
public
{ Public declarations }
sWhr: string;
procedure SetState(AIndex: Integer; ViewState: Boolean); overload;
procedure SetState(AIndex: Integer; AOperType: TOperType); overload;
published
procedure FillData;
procedure Append;
procedure Edit;
procedure UpdateData;
function Delete: Boolean;
procedure Cancel;
procedure Print(AIds: string);
property ID: Integer read FID write SetID;
end;
implementation
uses ustainfo, uglobal, udata, uprint;
{$R *.dfm}
{ TfraStaDetail }
procedure TfraStaDetail.FillData;
procedure FillDBComboBox(ADataSet: TADOQuery; ADBComboBox: TDBComboBox);
begin
ADBComboBox.Items.Clear;
while not ADataSet.Eof do
begin
ADBComboBox.Items.Add(ADataSet.FieldByName('sname').AsString);
ADataSet.Next;
end;
end;
var
aqFillData: TADOQuery;
begin
if not dmPer.aqDept.Active then dmPer.OpenDept;
aqFillData := TADOQuery.Create(Self);
aqFillData.Clone(dmPer.aqDept, ltReadOnly);
dcbDep.Clear;
dbDep.Clear;
while not aqFillData.Eof do
begin
dcbDep.Items.add(aqFillData.FieldByName('dep').AsString);
dbDep.Items.add(aqFillData.FieldByName('dep').AsString);
aqFillData.Next;
end;
dmPer.OpenQuery(aqFillData, 'select sname, iflag from oinfo');
FilterData(aqFillData, 'iflag = 1');
FillDBComboBox(aqFillData, dcbSort);
FilterData(aqFillData, 'iflag = 2');
FillDBComboBox(aqFillData, dcbCap);
FilterData(aqFillData, 'iflag = 3');
FillDBComboBox(aqFillData, dcbFolk);
FilterData(aqFillData, 'iflag = 4');
FillDBComboBox(aqFillData, dcbLevel);
FilterData(aqFillData, 'iflag = 5');
FillDBComboBox(aqFillData, dcbSpecial);
end;
procedure TfraStaDetail.SetID(AValue: Integer);
begin
if (AValue = 0) or (FID = AValue) or (pcSta.ActivePageIndex = 5) then Exit;
FID := AValue;
pcStaChange(pcSta);
if pcSta.ActivePageIndex = 0 then
begin
aqStaDetail.Locate('id', IntToStr(ID), []);
if FileExists(App.Path + 'images\' + aqStaDetail.FieldByName('image').AsString) then
imgi.Picture.LoadFromFile(App.Path + 'images\' + aqStaDetail.FieldByName('image').AsString)
else imgi.Picture.LoadFromFile(App.Path + 'images\imgd.jpg');
end
else FilterData(aqStaDetail, 'sid=' + IntToStr(ID));
end;
procedure TfraStaDetail.SetState(AIndex: Integer; ViewState: Boolean);
var
i: Integer;
tsCur: TTabSheet;
begin
tsCur := pcSta.Pages[AIndex];
if ViewState then
begin
for i := 0 to tsCur.ControlCount - 1 do
if tsCur.Controls[i] is TDBEdit then
begin
TDBEdit(tsCur.Controls[i]).ReadOnly := True;
TDBEdit(tsCur.Controls[i]).Color := ViewColor;
end
else if tsCur.Controls[i] is TDBComboBox then
begin
TDBComboBox(tsCur.Controls[i]).ReadOnly := True;
TDBComboBox(tsCur.Controls[i]).Color := ViewColor;
end
else if tsCur.Controls[i] is TDBDateTimeEditEh then
begin
TDBDateTimeEditEh(tsCur.Controls[i]).ReadOnly := True;
TDBDateTimeEditEh(tsCur.Controls[i]).Color := ViewColor;
end
else if tsCur.Controls[i] is TDBMemo then
begin
TDBMemo(tsCur.Controls[i]).ReadOnly := True;
TDBMemo(tsCur.Controls[i]).Color := ViewColor;
end;
end
else
for i := 0 to tsCur.ControlCount - 1 do
if tsCur.Controls[i] is TDBEdit then
begin
TDBEdit(tsCur.Controls[i]).ReadOnly := False;
TDBEdit(tsCur.Controls[i]).Color := clWindow;
end
else if tsCur.Controls[i] is TDBComboBox then
begin
TDBComboBox(tsCur.Controls[i]).ReadOnly := False;
TDBComboBox(tsCur.Controls[i]).Color := clWindow;
end
else if tsCur.Controls[i] is TDBDateTimeEditEh then
begin
TDBDateTimeEditEh(tsCur.Controls[i]).ReadOnly := False;
TDBDateTimeEditEh(tsCur.Controls[i]).Color := clWindow;
end
else if tsCur.Controls[i] is TDBMemo then
begin
TDBMemo(tsCur.Controls[i]).ReadOnly := False;
TDBMemo(tsCur.Controls[i]).Color := clWindow;
end;
case AIndex of
0:
begin
if ViewState then
begin
btnEditi.Enabled := True;
btnDeli.Enabled := True;
end
else
begin
if aqStaDetail.State = dsInsert then
begin
deStano.SetFocus;
deBirth.Value := IncYear(Date, -20);
deInDate.Value := Date;
deBarstart.Value := Date;
deBarend.Value := IncYear(Date, 1);
end
else
begin
deStano.ReadOnly := True;
deStano.Color := ViewColor;
deName.SetFocus;
end;
end;
end;
1:
begin
dgExper.Enabled := ViewState;
if not ViewState and (aqStaDetail.State = dsInsert) then
begin
deSDate.Value := IncYear(Date, -1);
deEdate.Value := Date;
end;
end;
2:
begin
dgFami.Enabled := ViewState;
if not ViewState then
begin
dgFami.Enabled := False;
dbeName.SetFocus
end;
end;
3:
begin
dgap.Enabled := ViewState;
if not ViewState then
begin
dbSort.SetFocus;
if aqStaDetail.State = dsInsert then
deDate.Value := Date;
end;
end;
4:
begin
dgTrain.Enabled := ViewState;
if not ViewState then
begin
deCourse.SetFocus;
if aqStaDetail.State = dsInsert then
begin
dteSDate.Value := IncYear(Date, -1);
dteEDate.Value := IncYear(Date, -1);
end;
end;
end;
end;
end;
procedure TfraStaDetail.SetState(AIndex: Integer; AOperType: TOperType);
begin
case AOperType of
otAdd, otEdit:
SetState(AIndex, False);
otView:
begin
SetState(AIndex, True);
if aqStaDetail.State in [dsEdit, dsInsert] then aqStaDetail.CancelBatch;
end;
end;
end;
procedure TfraStaDetail.btnDeliClick(Sender: TObject);
var
aqImg: TADOQuery;
begin
if MessageBox(Handle, '真的要删除此员工照片吗?', '提示', mb_IconQuestion + mb_YesNo) = idYes then
begin
aqImg := TADOQuery.Create(Self);
dmPer.OpenQuery(aqImg, 'select image from stainfo where id=' + IntToStr(ID));
if FileExists(App.Path + 'images\' + aqImg.Fieldbyname('image').AsString) then
begin
DeleteFile(App.Path + 'images\' + aqImg.Fieldbyname('image').AsString);
imgi.Picture.LoadFromFile(App.Path + 'images\imgd.jpg');
end
else MessageBox(Handle, '没有此员工照片!', '提示', mb_IconInformation + mb_Ok);
aqImg.Free;
end;
end;
procedure TfraStaDetail.Append;
begin
if pcSta.ActivePageIndex = 5 then pcSta.ActivePageIndex := 0;
aqStaDetail.Append;
SetState(pcSta.ActivePageIndex, otAdd);
end;
function TfraStaDetail.Delete: Boolean;
begin
Result := False;
if pcSta.ActivePageIndex = 5 then pcSta.ActivePageIndex := 0;
if not aqStaDetail.Active then Exit;
try
if pcSta.ActivePageIndex = 0 then
begin
if MessageBox(handle, '真的要删除此员工记录么?', '提示', mb_IconQuestion + mb_YesNo) = idYes then
begin
if FileExists(App.Path + 'images\' + aqStaDetail.Fieldbyname('image').AsString) then
DeleteFile(App.Path + 'images\' + aqStaDetail.Fieldbyname('image').AsString);
aqStaDetail.Delete;
aqStaDetail.UpdateBatch();
Result := True;
end
end
else if MessageBox(Handle, '真的要删除此记录么?', '提示', mb_IconQuestion + mb_YesNo) = idYes then
begin
aqStaDetail.Delete;
aqStaDetail.UpdateBatch();
end;
except
on E: Exception do
begin
MessageBox(Handle, PAnsiChar('删除失败,信息为:' + E.Message), '提示', mb_Ok + mb_IconInformation);
if pcSta.ActivePageIndex = 0 then Result := False;
end;
end;
end;
procedure TfraStaDetail.Edit;
begin
if pcSta.ActivePageIndex = 5 then pcSta.ActivePageIndex := 0;
aqStaDetail.Edit;
SetState(pcSta.ActivePageIndex, otEdit);
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -