📄 u_sjzdsc.pas
字号:
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 + -