departmentfrm.~pas

来自「一个电力企业的后台管理程序」· ~PAS 代码 · 共 629 行 · 第 1/2 页

~PAS
629
字号
unit DepartmentFrm;

interface            

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ActnList, TB97Ctls, TB97, TB97Tlbr, ExtCtrls, ComCtrls, Menus, Buttons,
  StdCtrls, Mask, DBCtrls, Db, DbTables;

type
  TNewCounselLevelOne=record
    OeName:string;
    OeID:string;
    OeList:TList;
  end;
  PNewCounselLevelOne=^TNewCounselLevelOne;

  TNewCounselLevelThree=record
    OeName:string;
    OeID:string;
  end;
  PNewCounselLevelThree=^TNewCounselLevelThree;

  TForm_Department = class(TForm)
    Dock971: TDock97;
    Image1: TImage;
    tbar97_Dept: TToolbar97;
    ToolbarButton971: TToolbarButton97;
    TB_edit: TToolbarButton97;
    TB_add: TToolbarButton97;
    TB_delete: TToolbarButton97;
    tbar97_Deptquit: TToolbar97;
    ToolbarButton975: TToolbarButton97;
    ActionList1: TActionList;
    Act_add: TAction;
    Act_delete: TAction;
    Act_edit: TAction;
    Act_refresh: TAction;
    Act_quit: TAction;
    TreeView1: TTreeView;
    PopupMenu1: TPopupMenu;
    N_add: TMenuItem;
    N_delete: TMenuItem;
    N_edit: TMenuItem;
    N_refresh: TMenuItem;
    Splitter1: TSplitter;
    Panel1: TPanel;
    Panel2: TPanel;
    Label1: TLabel;
    DBEdit1: TDBEdit;
    Label2: TLabel;
    DBEdit2: TDBEdit;
    Label3: TLabel;
    DBEdit3: TDBEdit;
    Label4: TLabel;
    Label5: TLabel;
    Panel3: TPanel;
    Spd_save: TSpeedButton;
    Spd_cancel: TSpeedButton;
    DBMemo1: TDBMemo;
    DBEdit4: TDBEdit;
    PopupMenu2: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    Label6: TLabel;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure Act_quitExecute(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Act_addExecute(Sender: TObject);
    procedure Act_deleteExecute(Sender: TObject);
    procedure Act_editExecute(Sender: TObject);
    procedure Spd_cancelClick(Sender: TObject);
    procedure Spd_saveClick(Sender: TObject);
    procedure Act_refreshExecute(Sender: TObject);
    procedure TreeView1Click(Sender: TObject);
    procedure PopupMenu2Popup(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
  private
    { Private declarations }
    AoeRecordOne:PNewCounselLevelOne;
    AoeRecordTwo:PNewCounselLevelOne;
    AoeRecordThree:PNewCounselLevelThree;
    NewCounselingOptionList:TList;
    OneList:array of TList;
    TwoList:array of TList;
    FFlag:boolean;
    procedure ShowTreeNode;
    procedure LoadNewCounselingOption;
    procedure FreeNewCounselingOption;
  public
    { Public declarations }
    Flag:boolean;
    function GetSerialNoQry(AnyQuery:TQuery;SerialName:string):integer;
                                                        //SerialName字段必须排序
  end;

var
  Form_Department: TForm_Department;

implementation
uses systemDM,ManagData,EcscMain,SystemPH;
{$R *.DFM}

function TForm_Department.GetSerialNoQry(AnyQuery: TQuery;
  SerialName: string): integer;
var
  i,No,LastNO,CurNo:integer;
begin
   i:=0;      
   No:=1;
   with Self do
   begin
      AnyQuery.First;
      LastNo:=AnyQuery.Fieldbyname(SerialName).asinteger;

      while not AnyQuery.Eof do  //给BitNo字段分配序号,
      begin
         if AnyQuery.Bof then
         begin
            if LastNo>1 then
            begin
               No:=1;
               break;
            end;
         end;
         AnyQuery.Next;
         CurNo:=AnyQuery.Fieldbyname(SerialName).asinteger;
         if (CurNo-LastNo)>1 then
         begin
            No:=LastNo+1;
            break;
         end else
         begin
            LastNo:=CurNo;
         end;
         i:=i+1;
      end;
      if i>=AnyQuery.RecordCount then
         No:=AnyQuery.Fieldbyname(SerialName).asinteger+1;
   end;
   Result:=No;
end;

procedure TForm_Department.ShowTreeNode;
var
  B,B1,B2:Word;
  varnode,tempnode,optnode:TTreeNode;
begin
  treeview1.Items.Clear;
  varnode:=Treeview1.Items.Add(nil,'工作部门');
  try
    if NewCounselingOptionList.Count>0 then
      for B:=0 to NewCounselingOptionList.Count-1 do
      begin
        AoeRecordOne:=NewCounselingOptionList.Items[B];
        tempnode:=Treeview1.Items.AddChildObject(varnode,AoeRecordOne^.OeName,AoeRecordOne);
        if Assigned(AoeRecordOne^.OeList) then
          if AoeRecordOne^.OeList.Count>0 then
            for B1:=0 to AoeRecordOne^.OeList.Count-1 do
            begin
              AoeRecordTwo:=AoeRecordOne^.OeList.Items[B1];
              optnode:=TreeView1.Items.AddChildObject(tempnode,AoeRecordTwo^.OeName,AoeRecordTwo);
              if Assigned(AoeRecordTwo^.OeList) then
                if AoeRecordTwo^.OeList.Count>0 then
                  for B2:=0 to AoeRecordTwo^.OeList.Count-1 do
                  begin
                    AoeRecordThree:=AoeRecordTwo^.OeList.Items[B2];
                    TreeView1.Items.AddChildObject(optnode,AoeRecordThree^.OeName,AoeRecordThree);
                  end;
            end;
      end;
    except
    end;
end;

procedure TForm_Department.LoadNewCounselingOption;
var
  i,j,m,n:integer;
begin
  NewCounselingOptionList:=TList.Create;
  with ManagDM do
  begin
    //SqlExec(departqry,'select * from department');
    SqlExec(anyqry,'select * from department_Info where twolevelno=0 and threelevelno=0');
    setlength(OneList,anyqry.RecordCount);
    m:=0;
    while not anyqry.Eof do
    begin
      new(AoeRecordone);
      AoeRecordone^.OeName:=anyqry.fieldbyname('departmentname').AsString;
      AoeRecordone^.OeID:=anyqry.fieldbyname('departmentno').AsString;
      AoeRecordOne^.OeList:=nil;
      i:=anyqry.fieldbyname('OneLevelNo').AsInteger;
      SqlExec(ranqry,'select * from department_Info where onelevelno='+IntToStr(i)+' and twolevelno<>0 and threelevelno=0');
      SetLength(TwoList,ranqry.RecordCount);
      n:=0;
      OneList[m]:=TList.Create;
      while not ranqry.Eof do
      begin
        new(AoeRecordTwo);
        AoeRecordTwo^.OeName:=ranqry.fieldbyname('departmentname').AsString;
        AoeRecordTwo^.OeID:=ranqry.fieldbyname('departmentno').AsString;
        AoeRecordTwo^.OeList:=nil;
        j:=ranqry.fieldbyname('twolevelno').AsInteger;
        SqlExec(optqry,'select * from department_Info where onelevelno='+IntToStr(i)+' and twolevelno='+IntToStr(j)+' and threelevelno<>0');
        TwoList[n]:=TList.Create;
        while not optqry.Eof do
        begin
          new(AoeRecordThree);
          AoeRecordThree^.OeName:=optqry.fieldbyname('departmentname').AsString;
          AoeRecordThree^.OeID:=optqry.fieldbyname('departmentno').AsString;
          TwoList[n].Add(AoerecordThree);
          AoeRecordTwo^.OeList:=TwoList[n];
          optqry.Next;
        end;
        OneList[m].Add(AoeRecordTwo);
        AoeRecordOne^.OeList:=OneList[m];
        ranqry.Next;
        n:=n+1;
      end;
      NewCounselingOptionList.Add(AoeRecordOne);
      anyqry.Next;
      m:=m+1;
    end;

  end;
end;

procedure TForm_Department.FreeNewCounselingOption;
var
  B:word;
  B21,B22:word;
  B11,B12:word;
begin
  try
    if High(TwoList)>=Low(TwoList) then
      for B21:=Low(TwoList) to High(TwoList) do
      begin
        if Assigned(TwoList[B21]) then
        begin
          if TwoList[B21].Count >0 then
              for B22:=0 to TwoList[B21].Count-1 do
              begin
                AoeRecordThree:=TwoList[B21].Items[B22];
                dispose(AoeRecordThree);
              end;
        end;
        TwoList[B21].Free ;
      end;

    if High(OneList)>=Low(OneList) then
      for B11:=Low(OneList) to High(OneList) do
      begin
        if Assigned(OneList[B11]) then
        begin
          if OneList[B11].Count>0 then
            for B12:=0 to OneList[B11].Count-1 do
            begin
              AoeRecordTwo:=OneList[B11].Items[B12];
              dispose(AoeRecordTwo);
            end;
        end;
        OneList[B11].Free;
      end;

    if assigned(NewCounselingOptionList) then
      if NewCounselingOptionList.Count>0 then
        for B:=0 to NewCounselingOptionList.Count-1 do
        begin
          AoeRecordOne:=NewCounselingOptionList.Items[B];
          dispose(AoeRecordOne);
        end;
  finally
  end;
end;

procedure TForm_Department.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  //if screen.FormCount=2 then
  WebIsHide(0);
  with ManagDM do
  begin
    Tbl_depart.close;
    anyqry.close;
    ranqry.close;
    optqry.Close;
  end;
  Action:=CaFree;
  Form_Department:=nil;
end;

procedure TForm_Department.FormCreate(Sender: TObject);
begin
  {tbar97_Dept.AddDockForm(Application.MainForm);
  tbar97_Dept.DockedTo:=TForm_Main(Application.MainForm).dk97_Home;
  tbar97_DeptQuit.AddDockForm(Application.MainForm);
  tbar97_DeptQuit.DockedTo:=TForm_Main(Application.MainForm).dk97_Home;}

  ManagDM.Tbl_Depart.Active:=true;
  flag:=false;
  fflag:=false;
  LoadNewCounselingOption;
  ShowTreeNode;
end;

procedure TForm_Department.Act_quitExecute(Sender: TObject);
begin
  close;

⌨️ 快捷键说明

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