📄 u_sjgl.~pas
字号:
unit U_sjgl;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, DB, DBTables, Grids, DBGrids, OleCtnrs;
type
Tfrm_sjgl = class(TForm)
GroupBox1: TGroupBox;
TreeView1: TTreeView;
DBGrid1: TDBGrid;
tbl_sjk: TTable;
DataSource1: TDataSource;
tbl_khdx: TTable;
tbl_gwzl: TTable;
tbl_gwlb: TTable;
tbl_zy: TTable;
OleContainer1: TOleContainer;
btn_delete: TButton;
btn_ksj: TButton;
btn_close: TButton;
btn_daj: TButton;
Query1: TQuery;
OleContainer2: TOleContainer;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
procedure btn_ksjClick(Sender: TObject);
procedure btn_dajClick(Sender: TObject);
procedure btn_deleteClick(Sender: TObject);
procedure btn_closeClick(Sender: TObject);
private
{ Private declarations }
ptrlist:TList;
sjdaj:integer;
procedure WordQuit(Sender: TObject);
procedure DocClose(Sender: TObject);
public
{ Public declarations }
end;
var
frm_sjgl: Tfrm_sjgl;
implementation
uses P_RES,AutoImpl,Word2000;
type
PMyRec = ^TMyRec;
TMyRec = record
flag:boolean;
zyxh:integer;
gwlbxh:integer;
gwzlxh:integer;
khdxxh:integer;
end;
var
MyRecPtr: PMyRec;
WordObject:TWordObject;
wdoc1:OleVariant;
{$R *.dfm}
procedure Tfrm_sjgl.FormCreate(Sender: TObject);
var
MyTreeNode1,MyTreeNode2,MyTreeNode3: TTreeNode;
begin
tbl_sjk.Open;
ptrlist:=TList.Create;
tbl_zy.First;
while not tbl_zy.Eof do
begin
New(MyRecPtr);
ptrlist.Add(MyRecPtr);
MyRecPtr^.flag:=false;
MyRecPtr^.zyxh:=tbl_zy.FieldByName('zyxh').AsInteger;
MyRecPtr^.gwlbxh:=0;
MyRecPtr^.gwzlxh:=0;
MyRecPtr^.khdxxh:=0;
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);
ptrlist.Add(MyRecPtr);
MyRecPtr^.flag:=false;
MyRecPtr^.zyxh:=tbl_zy.FieldByName('zyxh').AsInteger;
MyRecPtr^.gwlbxh:=tbl_gwlb.FieldByName('gwlbxh').AsInteger;
MyRecPtr^.gwzlxh:=0;
MyRecPtr^.khdxxh:=0;
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);
ptrlist.Add(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;
TreeView1.Items.AddChildObject(MyTreeNode2,tbl_gwzl.FieldByName('gwzlmc').AsString,MyRecPtr);
end
else//区分级别,则分别添加岗位种类相应级别的考核对象
begin
New(MyRecPtr);
ptrlist.Add(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;
MyTreeNode3:=TreeView1.Items.AddChildObject(MyTreeNode2,tbl_gwzl.FieldByName('gwzlmc').AsString,MyRecPtr);
while not tbl_khdx.Eof do
begin
New(MyRecPtr);
ptrlist.Add(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;
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);
ptrlist.Add(MyRecPtr);
MyRecPtr^.flag:=true;
MyRecPtr^.zyxh:=tbl_zy.FieldByName('zyxh').AsInteger;
MyRecPtr^.gwlbxh:=0;
MyRecPtr^.gwzlxh:=tbl_gwzl.FieldByName('gwzlxh').AsInteger;
MyRecPtr^.khdxxh:=1;
TreeView1.Items.AddChildObject(MyTreeNode1,tbl_gwzl.FieldByName('gwzlmc').AsString,MyRecPtr);
end
else//区分级别,则分别添加岗位种类相应级别的考核对象
begin
New(MyRecPtr);
ptrlist.Add(MyRecPtr);
MyRecPtr^.flag:=false;
MyRecPtr^.zyxh:=tbl_zy.FieldByName('zyxh').AsInteger;
MyRecPtr^.gwlbxh:=0;
MyRecPtr^.gwzlxh:=tbl_gwzl.FieldByName('gwzlxh').AsInteger;
MyRecPtr^.khdxxh:=0;
MyTreeNode2:=TreeView1.Items.AddChildObject(MyTreeNode1,tbl_gwzl.FieldByName('gwzlmc').AsString,MyRecPtr);
while not tbl_khdx.Eof do
begin
New(MyRecPtr);
ptrlist.Add(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;
TreeView1.Items.AddChildObject(MyTreeNode2,tbl_khdx.FieldByName('khdxmc').AsString,MyRecPtr);
tbl_khdx.Next;
end;
end;
tbl_gwzl.Next;
end;
end;
tbl_zy.Next;
end;
end;
procedure Tfrm_sjgl.FormClose(Sender: TObject; var Action: TCloseAction);
var
i:integer;
begin
if Assigned(WordObject) then begin
WordObject.Free;
WordObject := nil;
end;
tbl_zy.Close;
tbl_gwlb.Close;
tbl_gwzl.Close;
tbl_khdx.Close;
tbl_sjk.Close;
for i:=0 to ptrlist.Count-1 do
begin
dispose(ptrlist.Items[i]);
end;
ptrlist.Free;
end;
procedure Tfrm_sjgl.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
tbl_sjk.Filter:='zyxh=-999';
if treeview1.Selected.HasChildren then exit;
if treeview1.Selected.IsFirstNode then exit;
tbl_sjk.Filter:='zyxh='+inttostr(PMyRec(TreeView1.Selected.Data)^.zyxh)
+' and gwlbxh='+inttostr(PMyRec(TreeView1.Selected.Data)^.gwlbxh)
+' and gwzlxh='+inttostr(PMyRec(TreeView1.Selected.Data)^.gwzlxh)
+' and khdxxh='+inttostr(PMyRec(TreeView1.Selected.Data)^.khdxxh);
end;
procedure Tfrm_sjgl.btn_ksjClick(Sender: TObject);
var
blobstream:Tblobstream;
v1,v2,v3:OleVariant;
begin
if tbl_sjk.RecordCount=0 then exit;
if not Assigned(WordObject) then
begin
WordObject := TWordObject.Create;
with WordObject do begin
OnSaveDocument:=DocClose;
OnQuit := WordQuit;
end;
end;
WordObject.Visible:=true;
v1:=WdDoNotSaveChanges;
v2:=Unassigned;
v3:=Unassigned;
if WordObject.Application.Documents.Count>0 then
begin
WordObject.Application.Documents.Close(v1,v2,v3);
end;
blobStream := TBlobStream.Create(TBlobField(tbl_sjk.FieldByName('sjnr')), bmRead);
blobstream.position:=0;
olecontainer1.DestroyObject;
olecontainer1.loadfromstream(blobstream);
BlobStream.Free;
olecontainer1.SaveAsDocument(Pb_runpath+'\temp\考试卷.doc');
try
wdoc1:=WordObject.OpenDoc(Pb_runpath+'\temp\考试卷.doc');
except
if Assigned(WordObject) then
begin
WordObject.Free;
WordObject := nil;
end;
exit;
end;
sjdaj:=1;
WordObject.Application.ActiveWindow.ActivePane.View.type_ := 3;
SetWindowPos(Handle,HWND_BOTTOM,0,0,0,0,SWP_NOMOVE+SWP_NOSIZE);
WordObject.Application.Activate;
end;
procedure Tfrm_sjgl.btn_dajClick(Sender: TObject);
var
blobstream:Tblobstream;
v1,v2,v3:OleVariant;
begin
if tbl_sjk.RecordCount=0 then exit;
if not Assigned(WordObject) then
begin
WordObject := TWordObject.Create;
with WordObject do begin
OnSaveDocument:=DocClose;
OnQuit := WordQuit;
end;
end;
WordObject.Visible:=true;
v1:=WdDoNotSaveChanges;
v2:=Unassigned;
v3:=Unassigned;
if WordObject.Application.Documents.Count>0 then
begin
WordObject.Application.Documents.Close(v1,v2,v3);
end;
blobStream := TBlobStream.Create(TBlobField(tbl_sjk.FieldByName('sjda')), bmRead);
blobstream.position:=0;
olecontainer1.DestroyObject;
olecontainer1.loadfromstream(blobstream);
BlobStream.Free;
olecontainer1.SaveAsDocument(Pb_runpath+'\temp\答案卷.doc');
try
wdoc1:=WordObject.OpenDoc(Pb_runpath+'\temp\答案卷.doc');
except
if Assigned(WordObject) then
begin
WordObject.Free;
WordObject := nil;
end;
exit;
end;
sjdaj:=2;
WordObject.Application.ActiveWindow.ActivePane.View.type_ := 3;
SetWindowPos(Handle,HWND_BOTTOM,0,0,0,0,SWP_NOMOVE+SWP_NOSIZE);
WordObject.Application.Activate;
end;
procedure Tfrm_sjgl.btn_deleteClick(Sender: TObject);
begin
if tbl_sjk.RecordCount=0 then exit;
if MessageBox(Handle,'确实要删除此试卷吗?','试卷管理',MB_YESNO+MB_ICONQUESTION)=IDYES then
begin
tbl_sjk.Delete;
end;
end;
procedure Tfrm_sjgl.btn_closeClick(Sender: TObject);
begin
close;
end;
procedure Tfrm_sjgl.WordQuit(Sender: TObject);
begin
WordObject.Free;
WordObject := nil;
end;
procedure Tfrm_sjgl.DocClose(Sender: TObject);
var
olestream:TStringstream;
begin
wdoc1.Save;
tbl_sjk.Edit;
if sjdaj=1 then
begin
olecontainer1.CreateObjectFromFile(Pb_runpath+'\temp\考试卷.doc',true);
olestream:=Tstringstream.Create('');
olecontainer1.savetostream(olestream);
olestream.position:=0;
tbl_sjk.FieldByName('sjnr').AsString:=olestream.DataString;
end
else
begin
olecontainer1.CreateObjectFromFile(Pb_runpath+'\temp\答案卷.doc',true);
olestream:=Tstringstream.Create('');
olecontainer1.savetostream(olestream);
olestream.position:=0;
tbl_sjk.FieldByName('sjda').AsString:=olestream.DataString;
end;
tbl_sjk.Post;
olestream.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -