📄 ryfz.pas
字号:
unit RYFZ;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Grids, DBGrids, Db, Buttons, ComCtrls;
type
TFrmRyFz = class(TForm)
Panel1: TPanel;
Label1: TLabel;
CbDept: TComboBox;
LbNoLbbh: TListBox;
Label2: TLabel;
LbLbbh: TListBox;
BtnSelect: TBitBtn;
BtnUnselect: TBitBtn;
BtnSure: TBitBtn;
BtnExit: TBitBtn;
BtnCancel: TBitBtn;
GroupBox1: TGroupBox;
TVFzLbxx: TTreeView;
PFzmc: TPanel;
procedure CbDeptChange(Sender: TObject);
procedure BtnSelectClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BtnUnselectClick(Sender: TObject);
procedure LbNoLbbhClick(Sender: TObject);
procedure LbLbbhClick(Sender: TObject);
procedure BtnSureClick(Sender: TObject);
procedure BtnCancelClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure TVFzLbxxChange(Sender: TObject; Node: TTreeNode);
procedure TVFzLbxxChanging(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
procedure FormShow(Sender: TObject);
private
MyStatus : String;
MyBmnoNoLbdm : TStrings;
MyBmnoLbdm : TStrings;
MySourceBmnoLbdm : TStrings;
procedure InitLbList();
procedure ShowMyButton();
{ Private declarations }
public
{ Public declarations }
end;
type
PMyRec = ^TMyRec;
TMyRec = record
FLbbh: integer;
FFzbh: Integer;
end;
var
FrmRyFz: TFrmRyFz;
implementation
uses DGSDM, mycommon;
{$R *.DFM}
procedure TFrmRyFz.InitLbList();
begin
LbNoLbbh.Items.Clear;
LbLbbh.Items.Clear;
With DM_GSGL do
begin
if (TVFzLbxx.Selected.Level=1) Then
begin
if (QryBmLb.Active = True) Then
QryBmLb.Close;
if (CbDept.Items.Count = 0) Then
QryBmLb.Params[0].AsString := 'nobm'
else
QryBmLb.Params[0].AsString := MyGsbm[CbDept.ItemIndex]+'%';
QryBmLb.Params[1].Asinteger := PMyRec(TVFzLbxx.Selected.Data)^.FLbbh;
QryBmLb.Open;
while (not QryBmLb.Eof) do
begin
LbNoLbbh.Items.Add(QryBmLb.FieldByName('工号').AsString+'-'+QryBmLb.FieldByName('姓名').AsString
+ StringOfChar(' ', 11-Length(QryBmLb.FieldByName('姓名').AsString))
+ QryBmLb.FieldByName('分组名称').AsString);
QryBmLb.Next;
end;
end
else
begin
MyBmnoNoLbdm.Clear;
MyBmnoLbdm.Clear;
//产生不属于部门某一分组的所有人员
if (QryNoLbbh.Active = True) Then
QryNoLbbh.Close;
if (CbDept.Items.Count = 0) Then
QryNoLbbh.Params[0].AsString := 'nobm'
else
QryNoLbbh.Params[0].AsString := MyGsbm[CbDept.ItemIndex]+'%';
QryNoLbbh.Params[1].AsInteger := PMyRec(TVFzLbxx.Selected.Data)^.FFzbh;
QryNoLbbh.Open;
while (not QryNoLbbh.Eof) do
begin
LbNoLbbh.Items.Add(QryNoLbbh.FieldByName('工号').AsString+'-'+QryNoLbbh.FieldByName('姓名').AsString
+ StringOfChar(' ', 11-Length(QryNoLbbh.FieldByName('姓名').AsString))
+ QryNoLbbh.FieldByName('分组名称').AsString);
MyBmnoNoLbdm.Add(QryNoLbbh.FieldByName('工号').AsString);
QryNoLbbh.Next;
end;
//产生属于部门某一分组的所有人员
if (QryLbbh.Active = True) Then
QryLbbh.Close;
if (CbDept.Items.Count = 0) Then
QryLbbh.Params[0].AsString := 'a'
else
QryLbbh.Params[0].AsString := MyGsbm[CbDept.ItemIndex]+'%';
QryLbbh.Params[1].AsInteger := PMyRec(TVFzLbxx.Selected.Data)^.FFzbh;
QryLbbh.Open;
while (not QryLbbh.Eof) do
begin
LbLbbh.Items.Add(QryLbbh.FieldByName('工号').AsString+'-'+QryLbbh.FieldByName('姓名').AsString
+ StringOfChar(' ', 11-Length(QryLbbh.FieldByName('姓名').AsString)));
MyBmnoLbdm.Add(QryLbbh.FieldByName('工号').AsString);
QryLbbh.Next;
end;
MySourceBmnoLbdm.Assign(MyBmnoLbdm);
end;
end;
end;
procedure TFrmRyFz.CbDeptChange(Sender: TObject);
begin
InitLbList;
ShowMyButton;
end;
procedure TFrmRyFz.BtnSelectClick(Sender: TObject);
var
I:Integer;
begin
I := LbNoLbbh.Items.Count - 1;
while I >= 0 do
begin
if LbNoLbbh.Selected[i] Then
begin
LbLbbh.Items.Insert(0,Copy(LbNoLbbh.Items[I],0,11));
MyBmnoLbdm.Insert(0,MyBmnoNoLbdm[i]);
LbNoLbbh.Items.Delete(i);
MyBmnoNoLbdm.Delete(i);
end;
I := I-1;
end;
MyStatus := '编辑';
ShowMyButton;
end;
procedure TFrmRyFz.FormClose(Sender: TObject; var Action: TCloseAction);
var
i : Integer;
begin
with DM_GSGL do
begin
if (QryTemp.Active = True) Then
QryTemp.Close;
if (QryTemp1.Active = True) Then
QryTemp1.Close;
if (QryBmLb.Active = True) Then
QryBmLb.Close;
if (QryNoLbbh.Active = True) Then
QryNoLbbh.Close;
if (QryLbbh.Active = True) Then
QryLbbh.Close;
end;
for i:=0 to TVFzLbxx.Items.Count-1 do
Dispose(PMyRec(TVFzLbxx.Items[i].Data));
MyBmnoNoLbdm.Free;
MyBmnoLbdm.Free;
end;
procedure TFrmRyFz.BtnUnselectClick(Sender: TObject);
var
I:Integer;
begin
I := LbLbbh.Items.Count - 1;
while I >= 0 do
begin
if LbLbbh.Selected[i] Then
begin
LbNoLbbh.Items.Insert(0,Copy(LbLbbh.Items[I],0,11));
MyBmnoNoLbdm.Insert(0,MyBmnoLbdm[i]);
LbLbbh.Items.Delete(i);
MyBmnoLbdm.Delete(i);
end;
I := I-1;
end;
MyStatus := '编辑';
ShowMyButton;
end;
procedure TFrmRyFz.ShowMyButton();
begin
if (TVFzLbxx.Selected.Level=2) then
begin
if (MyStatus='编辑') Then
begin
CbDept.Enabled := false;
BtnSure.Enabled := true;
BtnCancel.Enabled := true;
BtnExit.Enabled := false;
end
else
begin
CbDept.Enabled := true;
BtnSure.Enabled := false;
BtnCancel.Enabled := false;
BtnExit.Enabled := true;
end;
if LbNoLbbh.SelCount>=1 Then
BtnSelect.Enabled := True
else
BtnSelect.Enabled := False;
if LbLbbh.SelCount>=1 Then
BtnUnSelect.Enabled := True
else
BtnUnSelect.Enabled := False;
end
else
begin
BtnSelect.Enabled := False;
BtnUnSelect.Enabled := False;
BtnSure.Enabled := False;
BtnCancel.Enabled := False;
BtnExit.Enabled := True;
end;
end;
procedure TFrmRyFz.LbNoLbbhClick(Sender: TObject);
begin
ShowMyButton;
end;
procedure TFrmRyFz.LbLbbhClick(Sender: TObject);
begin
ShowMyButton;
end;
procedure TFrmRyFz.BtnSureClick(Sender: TObject);
var
I : Integer;
begin
With DM_GSGL do
begin
//扫描原来排当前轮班的人员工号List,如不在MyBmnoLbdm中,则置该工号轮班和分组为NULL
for I := 0 to MySourceBmnoLbdm.Count - 1 do
begin
if (MyBmnoLbdm.IndexOf(MySourceBmnoLbdm[i])=-1) then
begin //不在现列表
if QryTemp.Active=true then
QryTemp.Close;
QryTemp.SQL.Clear;
QryTemp.SQL.Add('UPDATE 员工信息 SET 分组编号=NULL WHERE 工号=:pgh');
QryTemp.Parambyname('pgh').AsString := MySourceBmnoLbdm[i];
QryTemp.ExecSql;
end;
end;
//扫描排当前分组的人员工号List,如不在MySourceBmnoLbdm中,则置该工号分组为当前分组
for I := 0 to MyBmnoLbdm.Count - 1 do
begin
if (MySourceBmnoLbdm.IndexOf(MyBmnoLbdm[i])=-1) then
begin //不在原来的列表
if QryTemp.Active=true then
QryTemp.Close;
QryTemp.SQL.Clear;
QryTemp.SQL.Add('UPDATE 员工信息 SET 分组编号=:pfzbh WHERE 工号=:pgh');
QryTemp.Parambyname('pfzbh').Asinteger := PMyRec(TVFzLbxx.Selected.Data)^.FFzbh;
QryTemp.Parambyname('pgh').AsString := MyBmnoLbdm[i];
QryTemp.ExecSql();
end;
end;
end;
MyStatus := '浏览';
ShowMyButton;
end;
procedure TFrmRyFz.BtnCancelClick(Sender: TObject);
begin
InitLbList;
MyStatus := '浏览';
ShowMyButton;
end;
procedure TFrmRyFz.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
UserSelect : Word;
begin
if (MyStatus='编辑') then
begin
UserSelect := MessageDlg('是否保存对 '+CbDept.Items[CbDept.ItemIndex]+'-'
+TVFzLbxx.Selected.Text+' 的修改?',mtConfirmation, [mbYes, mbNo, mbCancel],0);
case UserSelect of
mrYes: BtnSureClick(Sender);
mrNo: BtnCancelClick(Sender);
mrCancel: CanClose := False ;
end;
end;
end;
procedure TFrmRyFz.TVFzLbxxChange(Sender: TObject; Node: TTreeNode);
begin
InitLbList;
if (TVFzLbxx.Selected.Level=0) Then
PFzmc.Caption := TVFzLbxx.Selected.Text
else
PFzmc.Caption := TVFzLbxx.Selected.Parent.Text+':'+TVFzLbxx.Selected.Text;
ShowMyButton;
end;
procedure TFrmRyFz.TVFzLbxxChanging(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
begin
if (MyStatus <> '浏览') then
AllowChange := False;
end;
procedure TFrmRyFz.FormShow(Sender: TObject);
var
RootNode: TTreeNode;
MyTreeNode: TTreeNode;
MyRecPtr: PMyRec;
begin
with DM_GSGL do
begin
if QryTemp.Active=true then
QryTemp.Close;
QryTemp.SQL.Clear;
QryTemp.SQL.Add('select *');
QryTemp.SQL.Add('from 轮班信息');
QryTemp.Open;
if QryTemp1.Active=true then
QryTemp1.Close;
QryTemp1.SQL.Clear;
QryTemp1.SQL.Add('select *');
QryTemp1.SQL.Add('from 轮班分组信息');
QryTemp1.SQL.Add('where 分组管理员工号 like '+''''+'%'+userName+'%'+'''');
QryTemp1.Open;
end;
with TVFzLbxx.Items do
begin
Clear; { remove any existing nodes }
New(MyRecPtr);
MyRecPtr^.FLbbh := -1;
MyRecPtr^.FFzbh := -1;
RootNode := AddObject(nil,'所有轮班',MyRecPtr); { Add a root node }
while (not DM_GSGL.QryTemp.Eof) do
begin
New(MyRecPtr);
MyRecPtr^.FLbbh := DM_GSGL.QryTemp.FieldByName('轮班编号').AsInteger;
MyRecPtr^.FFzbh := -1;
MyTreeNode := AddChildObject(RootNode,DM_GSGL.QryTemp.FieldByName('轮班名称').AsString,MyRecPtr);
DM_GSGL.QryTemp1.First;
while (not DM_GSGL.QryTemp1.Eof) do
begin
if (DM_GSGL.QryTemp.FieldByName('轮班编号').AsString = DM_GSGL.QryTemp1.FieldByName('轮班编号').AsString) Then
begin
New(MyRecPtr);
MyRecPtr^.FLbbh := DM_GSGL.QryTemp1.FieldByName('轮班编号').AsInteger;
MyRecPtr^.FFzbh := DM_GSGL.QryTemp1.FieldByName('分组编号').AsInteger;
AddChildObject(MyTreeNode,DM_GSGL.QryTemp1.FieldByName('分组名称').AsString,MyRecPtr);
end;
DM_GSGL.QryTemp1.Next;
end;
DM_GSGL.QryTemp.Next;
end;
end;
MyBmnoNoLbdm := TStringList.Create; //For use in InitLbList
MyBmnoLbdm := TStringList.Create; //For use in InitLbList
MySourceBmnoLbdm := TStringList.Create;
MyStatus := '浏览';
CbDept.Items.Assign(MyGSNo);
if (CbDept.Items.Count > 0) Then
CbDept.ItemIndex := 0;
TVFzLbxx.Selected := TVFzLbxx.Items.GetFirstNode;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -