⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_sjzdsc.pas

📁 试卷管理系统
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit U_sjzdsc;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, Buttons, DB, DBTables, OleCtnrs, ExtCtrls;

type
  Tfrm_sjzdsc = class(TForm)
    BitBtn2: TBitBtn;
    tbl_khdx: TTable;
    tbl_gwzl: TTable;
    tbl_gwlb: TTable;
    tbl_zy: TTable;
    tbl_sjscfa: TTable;
    tbl_sjk: TTable;
    tbl_sjscfanr: TTable;
    tbl_stk: TTable;
    Query1: TQuery;
    Query2: TQuery;
    tbl_sttx: TTable;
    tbl_tmp_stlb: TTable;
    OleContainer1: TOleContainer;
    GroupBox2: TGroupBox;
    Label2: TLabel;
    Label6: TLabel;
    Label4: TLabel;
    ComboBox1: TComboBox;
    BitBtn1: TBitBtn;
    edt_sjts: TEdit;
    UpDown1: TUpDown;
    DateTimePicker1: TDateTimePicker;
    btn_ok: TBitBtn;
    GroupBox4: TGroupBox;
    TreeView1: TTreeView;
    procedure FormCreate(Sender: TObject);
    procedure btn_okClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
    procedure CopyDirectory(AHandle:THandle;AFromDir,AToDir:String);
    procedure WordQuit(Sender: TObject);
  public
    { Public declarations }
  end;

var
  frm_sjzdsc: Tfrm_sjzdsc;

implementation

uses U_progressfrm,P_RES,Math,ShellAPI,U_scfanr,Word97,AutoImpl;

type
PMyRec = ^TMyRec;
TMyRec = record
  flag:boolean;
  zyxh:integer;
  gwlbxh:integer;
  gwzlxh:integer;
  khdxxh:integer;
end;

{$R *.dfm}
var
  MyRecPtr: PMyRec;
  ptrlist:TList;
  WordObject:TWordObject;
  
procedure Tfrm_sjzdsc.FormCreate(Sender: TObject);
var
  MyTreeNode1,MyTreeNode2,MyTreeNode3: TTreeNode;
begin
  ptrlist:=TList.Create;
  tbl_zy.First;
  while not tbl_zy.Eof do
  begin
    New(MyRecPtr);

    MyRecPtr^.flag:=false;
    MyRecPtr^.zyxh:=tbl_zy.FieldByName('zyxh').AsInteger;
    MyRecPtr^.gwlbxh:=0;
    MyRecPtr^.gwzlxh:=0;
    MyRecPtr^.khdxxh:=0;
    ptrlist.Add(MyRecPtr);

    MyTreeNode1:=TreeView1.Items.AddObject(nil,tbl_zy.FieldByName('zymc').AsString,MyRecPtr);
    tbl_gwlb.Filter:='zyxh='+inttostr(tbl_zy.FieldByName('zyxh').AsInteger);
    tbl_gwlb.First;
    if tbl_gwlb.RecordCount<>0 then //区分岗位类别
    begin
      while not tbl_gwlb.Eof do //添加岗位类别
      begin
        New(MyRecPtr);

        MyRecPtr^.flag:=false;
        MyRecPtr^.zyxh:=tbl_zy.FieldByName('zyxh').AsInteger;
        MyRecPtr^.gwlbxh:=tbl_gwlb.FieldByName('gwlbxh').AsInteger;
        MyRecPtr^.gwzlxh:=0;
        MyRecPtr^.khdxxh:=0;
        ptrlist.Add(MyRecPtr);

        MyTreeNode2:=TreeView1.Items.AddChildObject(MyTreeNode1,tbl_gwlb.FieldByName('gwlbmc').AsString,MyRecPtr);
        tbl_gwzl.Filter:='check=true and zyxh='+inttostr(tbl_zy.FieldByName('zyxh').AsInteger)+' and gwlbxh='+inttostr(tbl_gwlb.FieldByName('gwlbxh').AsInteger);
        tbl_gwzl.First;
        while not tbl_gwzl.Eof do
        begin
          tbl_khdx.Filter:='zyxh='+inttostr(tbl_zy.FieldByName('zyxh').AsInteger)+' and gwlbxh='+inttostr(tbl_gwlb.FieldByName('gwlbxh').AsInteger)+' and gwzlxh='+inttostr(tbl_gwzl.FieldByName('gwzlxh').AsInteger);
          tbl_khdx.First;
          if tbl_gwzl.FieldByName('gwjblxxh').AsInteger=0 then //不区分级别,则直接添加岗位种类名称作为考核对象
          begin
            New(MyRecPtr);

            MyRecPtr^.flag:=true;
            MyRecPtr^.zyxh:=tbl_zy.FieldByName('zyxh').AsInteger;
            MyRecPtr^.gwlbxh:=tbl_gwlb.FieldByName('gwlbxh').AsInteger;
            MyRecPtr^.gwzlxh:=tbl_gwzl.FieldByName('gwzlxh').AsInteger;
            MyRecPtr^.khdxxh:=1;

            ptrlist.Add(MyRecPtr);
            TreeView1.Items.AddChildObject(MyTreeNode2,tbl_gwzl.FieldByName('gwzlmc').AsString,MyRecPtr);
          end
          else//区分级别,则分别添加岗位种类相应级别的考核对象
          begin
            New(MyRecPtr);

            MyRecPtr^.flag:=false;
            MyRecPtr^.zyxh:=tbl_zy.FieldByName('zyxh').AsInteger;
            MyRecPtr^.gwlbxh:=tbl_gwlb.FieldByName('gwlbxh').AsInteger;
            MyRecPtr^.gwzlxh:=tbl_gwzl.FieldByName('gwzlxh').AsInteger;
            MyRecPtr^.khdxxh:=0;

            ptrlist.Add(MyRecPtr);
            MyTreeNode3:=TreeView1.Items.AddChildObject(MyTreeNode2,tbl_gwzl.FieldByName('gwzlmc').AsString,MyRecPtr);
            while not tbl_khdx.Eof do
              begin
                New(MyRecPtr);

                MyRecPtr^.flag:=true;
                MyRecPtr^.zyxh:=tbl_zy.FieldByName('zyxh').AsInteger;
                MyRecPtr^.gwlbxh:=tbl_gwlb.FieldByName('gwlbxh').AsInteger;
                MyRecPtr^.gwzlxh:=tbl_gwzl.FieldByName('gwzlxh').AsInteger;
                MyRecPtr^.khdxxh:=tbl_khdx.FieldByName('khdxxh').AsInteger;

                ptrlist.Add(MyRecPtr);
                TreeView1.Items.AddChildObject(MyTreeNode3,tbl_khdx.FieldByName('khdxmc').AsString,MyRecPtr);
                tbl_khdx.Next;
              end;
            end;
          tbl_gwzl.Next;
        end;
        tbl_gwlb.Next;
      end;
    end
    else//不区分岗位类别
    begin
      tbl_gwzl.Filter:='check=true and zyxh='+inttostr(tbl_zy.FieldByName('zyxh').AsInteger);
      tbl_gwzl.First;
      while not tbl_gwzl.Eof do
      begin
        tbl_khdx.Filter:='zyxh='+inttostr(tbl_zy.FieldByName('zyxh').AsInteger)+' and gwzlxh='+inttostr(tbl_gwzl.FieldByName('gwzlxh').AsInteger);
        tbl_khdx.First;
        if tbl_gwzl.FieldByName('gwjblxxh').AsInteger=0 then //不区分级别,则直接添加岗位种类名称作为考核对象
          begin
            New(MyRecPtr);

            MyRecPtr^.flag:=true;
            MyRecPtr^.zyxh:=tbl_zy.FieldByName('zyxh').AsInteger;
            MyRecPtr^.gwlbxh:=0;
            MyRecPtr^.gwzlxh:=tbl_gwzl.FieldByName('gwzlxh').AsInteger;
            MyRecPtr^.khdxxh:=1;

            ptrlist.Add(MyRecPtr);
            TreeView1.Items.AddChildObject(MyTreeNode1,tbl_gwzl.FieldByName('gwzlmc').AsString,MyRecPtr);
          end
          else//区分级别,则分别添加岗位种类相应级别的考核对象
          begin
            New(MyRecPtr);
            MyRecPtr^.flag:=false;
            MyRecPtr^.zyxh:=tbl_zy.FieldByName('zyxh').AsInteger;
            MyRecPtr^.gwlbxh:=0;
            MyRecPtr^.gwzlxh:=tbl_gwzl.FieldByName('gwzlxh').AsInteger;
            MyRecPtr^.khdxxh:=0;
            ptrlist.Add(MyRecPtr);

            MyTreeNode2:=TreeView1.Items.AddChildObject(MyTreeNode1,tbl_gwzl.FieldByName('gwzlmc').AsString,MyRecPtr);
            while not tbl_khdx.Eof do
              begin
                New(MyRecPtr);
                MyRecPtr^.flag:=true;
                MyRecPtr^.zyxh:=tbl_zy.FieldByName('zyxh').AsInteger;
                MyRecPtr^.gwlbxh:=0;
                MyRecPtr^.gwzlxh:=tbl_gwzl.FieldByName('gwzlxh').AsInteger;
                MyRecPtr^.khdxxh:=tbl_khdx.FieldByName('khdxxh').AsInteger;
                ptrlist.Add(MyRecPtr);

                TreeView1.Items.AddChildObject(MyTreeNode2,tbl_khdx.FieldByName('khdxmc').AsString,MyRecPtr);
                tbl_khdx.Next;
              end;
            end;
        tbl_gwzl.Next;
      end;
    end;
    tbl_zy.Next;
  end;

  tbl_sjscfa.First;
  while not tbl_sjscfa.Eof do
  begin
    ComboBox1.Items.Add(tbl_sjscfa.fieldbyname('faname').AsString);
    tbl_sjscfa.Next;
  end;

  if ComboBox1.Items.Count<>0 then ComboBox1.ItemIndex:=0;

  tbl_gwlb.Close;
  tbl_gwzl.Close;
  tbl_khdx.Close;


  DateTimePicker1.DateTime:=now;
end;

procedure Tfrm_sjzdsc.btn_okClick(Sender: TObject);
type
  PMyList = ^AList;
  AList = record
    zyxh:integer;
    gwlbxh:integer;
    gwzlxh:integer;
    khdxxh:integer;
    khdxmc:string;
  end;
var
  Save_Cursor:TCursor;
  n,max,i,j,m,r,k,sjxh,ntotal,nzdtsl,stcount,ncount,nrecordno,ntemp:integer;
  ifzdt:boolean;
  zycdarray:array of boolean;
  qrystring,qrystring0,zwcdstr:string;
  treenode1,treenode2,treenode3,treenode4:TTreeNode;
  wDoc1,wDoc2,wDoc:OleVariant;
  strfrom,strto1,strto2:string;
  txxhhz:array[1..10] of string;
  blobstream:Tblobstream;
  st_sjnr,st_sjda:TStringStream;
  MyList: TList;
  ARecord: PMyList;
  v1,v2,v3:OleVariant;
  khdxlist:TStringList;
begin
  if treeview1.SelectionCount=0 then
  begin
    MessageBox(Handle,'请首先选择考核对象!','试卷生成',MB_OK+MB_ICONSTOP);
    exit;
  end;

  MyList:=TList.Create;
  for i:=0 to treeview1.SelectionCount-1 do
  begin
    if treeview1.Selections[i].HasChildren then  // 1 level
    begin
      treenode1:=treeview1.Selections[i].getFirstChild;
      while treenode1<>nil do
      begin
        if treenode1.HasChildren then   // 2 level
        begin
          treenode2:=treenode1.getFirstChild;
          while treenode2<>nil do
          begin
            if treenode2.HasChildren then   // 3 level
            begin
              treenode3:=treenode2.getFirstChild;
              while treenode3<>nil do
              begin
                if treenode3.HasChildren then
                begin
                  treenode4:=treenode3.getFirstChild;
                  while treenode4<>nil do
                  begin
                    if PMyRec(treenode4.Data)^.flag then
                    begin
                      New(ARecord);
                      ARecord^.zyxh := PMyRec(treenode4.Data)^.zyxh;
                      ARecord^.gwlbxh := PMyRec(treenode4.Data)^.gwlbxh;
                      ARecord^.gwzlxh:=PMyRec(treenode4.Data)^.gwzlxh;
                      ARecord^.khdxxh:=PMyRec(treenode4.Data)^.khdxxh;
                      ARecord^.khdxmc:=treenode4.Text;
                      MyList.Add(ARecord);
                    end;
                    treenode4:=treenode4.getNextSibling;
                  end;
                end
                else
                begin
                  if PMyRec(treenode3.Data)^.flag then
                  begin
                    New(ARecord);
                    ARecord^.zyxh := PMyRec(treenode3.Data)^.zyxh;
                    ARecord^.gwlbxh := PMyRec(treenode3.Data)^.gwlbxh;
                    ARecord^.gwzlxh:=PMyRec(treenode3.Data)^.gwzlxh;
                    ARecord^.khdxxh:=PMyRec(treenode3.Data)^.khdxxh;
                    ARecord^.khdxmc:=treenode3.Text;
                    MyList.Add(ARecord);
                  end;
                end;
                treenode3:=treenode3.getNextSibling;
              end;
            end
            else
            begin
              if PMyRec(treenode2.Data)^.flag then
              begin
                New(ARecord);
                ARecord^.zyxh := PMyRec(treenode2.Data)^.zyxh;
                ARecord^.gwlbxh := PMyRec(treenode2.Data)^.gwlbxh;
                ARecord^.gwzlxh:=PMyRec(treenode2.Data)^.gwzlxh;
                ARecord^.khdxxh:=PMyRec(treenode2.Data)^.khdxxh;
                ARecord^.khdxmc:=treenode2.Text;
                MyList.Add(ARecord);
              end;
            end;
            treenode2:=treenode2.getNextSibling;
          end;
        end
        else
        begin
          if PMyRec(treenode1.Data)^.flag then
          begin
            New(ARecord);
            ARecord^.zyxh := PMyRec(treenode1.Data)^.zyxh;
            ARecord^.gwlbxh := PMyRec(treenode1.Data)^.gwlbxh;

⌨️ 快捷键说明

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