?? main_form.pas
字號:
SJ_WA.Connect;
except
MessageBox(handle,'無法連接,也許沒有安裝Word','連接出錯', MB_Ok or MB_ICONERROR);
RateProcess_F.Close;
Abort;
end;
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+10;
//SJ_WA.Visible := False;
//SJ_WA.Caption := '題庫系統(tǒng)與試卷生成';
//建立一個新文檔
{Template := EmptyParam;
NewTemplate := false;}
ItemIndex := 1;
NewDocument:=SJ_WA.Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam);
RateProcess_F.CZ_P.Caption:='正在新建Microsoft Office Word 文檔......';
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+5;
RateProcess_F.Repaint;
//建立WordDocument連接, 用第二種方法不容易出錯
//SJ_WD.ConnectTo(SJ_WA.Documents.Item(ItemIndex));
SJ_WD.ConnectTo(NewDocument);
SJ_WD.Windows.Item(ItemIndex).Caption:='數(shù)據(jù)庫原理與應(yīng)用期末試卷';//此文檔的第一個窗口的標(biāo)題
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+5;
RateProcess_F.Repaint;
//因為Word進(jìn)行拼寫檢查需要很多時間,所以首先關(guān)閉檢查
SJ_WA.Options.CheckSpellingAsYouType := False;
SJ_WA.Options.CheckGrammarAsYouType := False;
//設(shè)置Word的字體
SetFont(1,0,0,22);
//設(shè)置段落對齊方式
//SJ_WA.Documents.Item(ItemIndex).Paragraphs.Alignment :=wdAlignParagraphCenter;
SJ_WD.Range.InsertAfter('數(shù)據(jù)庫原理與應(yīng)用期末試卷'+#13);
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+5;
RateProcess_F.Repaint;
//SJ_WA.Documents.Item(ItemIndex).Paragraphs.Alignment:=wdAlignParagraphLeft;
SJ_WD.Range.InsertAfter('學(xué)校___________ 班級________ 姓名___________ 得分_____ ' +#13);
SetFont(0,0,0,14);
RateProcess_F.CZ_P.Caption:='正在輸出選擇題......'; //試卷題信息-----選擇題部分
RateProcess_F.Repaint;
SJTXX_ADOQ.Close;
SJTXX_ADOQ.SQL.Clear;
SJTXX_ADOQ.SQL.Add('SELECT * FROM SJT WHERE SJDH=:DH AND TypeID=1');
SJTXX_ADOQ.Parameters.ParamByName('DH').Value:=SJDH;
SJTXX_ADOQ.Open;
SJ_WD.Range.InsertAfter(' '+#13);
SetFont(0,0,0,10);
BF:=1; //題型在試卷中屬于哪一部分
STH:=1; //每種題型開始的題號
TL:=SJTXX_ADOQ.RecordCount;
if TL>0 then
begin
SJTXX_ADOQ.First;
FZ:=SJTXX_ADOQ.FieldValues['FZ'];
temp:=Format('%s單選題( 共%d小題每題%d分, 小計%d分 )',[BF_Name[BF],TL,FZ,TL*FZ]);
SJ_WD.Range.InsertAfter(temp+#13+#13);
SJDA.Add('#'+temp); //為答案記下部分說明
SJTXX_ADOQ.First;
while not SJTXX_ADOQ.Eof do
begin
XT_ADOQ.Close;
XT_ADOQ.SQL.Clear;
XT_ADOQ.SQL.Add('SELECT * FROM XuanZeTi WHERE BH=:BH');
XT_ADOQ.Parameters.ParamByName('BH').Value:=SJTXX_ADOQ.FieldValues['BH'];
XT_ADOQ.Open;
temp:=Format('%d. %s',[STH,XT_ADOQ.FieldValues['TM']]); //輸出選擇題題目
SJ_WD.Range.InsertAfter(temp+#13+#13);
temp:=Format('%sA. %s',[JG,XT_ADOQ.FieldValues['A']]); //依次輸出四個選項
SJ_WD.Range.InsertAfter(temp+#13);
temp:=Format('%sB. %s',[JG,XT_ADOQ.FieldValues['B']]); //依次輸出四個選項
SJ_WD.Range.InsertAfter(temp+#13);
temp:=XT_ADOQ.FieldValues['C']; //有的題沒有C,D選項
if trim(temp)<>'' then
begin
temp:=Format('%sC. %s',[JG,temp]); //依次輸出四個選項
SJ_WD.Range.InsertAfter(temp+#13);
end;
temp:=XT_ADOQ.FieldValues['D']; //有的題沒有C,D選項
if trim(temp)<>'' then
begin
temp:=Format('%sD. %s',[JG,temp]); //依次輸出四個選項
SJ_WD.Range.InsertAfter(temp+#13);
end;
SJDA.Add(XT_ADOQ.FieldValues['DA']); //記下每一小題的答案
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+1;
RateProcess_F.Repaint;
STH:=STH+1;
SJTXX_ADOQ.Next;
end;
end;
RateProcess_F.CZ_P.Caption:='正在輸出填空題......';//試卷題信息--------填空題部分
RateProcess_F.Repaint;
SJTXX_ADOQ.Close;
SJTXX_ADOQ.SQL.Clear;
SJTXX_ADOQ.SQL.Add('SELECT * FROM SJT WHERE SJDH=:DH AND TypeID=2');
SJTXX_ADOQ.Parameters.ParamByName('DH').Value:=SJDH;
SJTXX_ADOQ.Open;
BF:=BF+1; //題型在試卷中屬于哪一部分
STH:=1; //每種題型開始的題號
TL:=SJTXX_ADOQ.RecordCount;
if TL>0 then
begin
SJTXX_ADOQ.First;
FZ:=SJTXX_ADOQ.FieldValues['FZ'];
SJ_WD.Range.InsertAfter(#13);
temp:=Format('%s填空題( 共%d小題每題%d分, 小計%d分 )',[BF_Name[BF],TL,FZ,TL*FZ]);
SJ_WD.Range.InsertAfter(temp+#13+#13);
SJDA.Add('#'+temp); //為答案記下部分說明
SJTXX_ADOQ.First;
while not SJTXX_ADOQ.Eof do
begin
XT_ADOQ.Close;
XT_ADOQ.SQL.Clear;
XT_ADOQ.SQL.Add('SELECT * FROM TianKong WHERE BH=:BH');
XT_ADOQ.Parameters.ParamByName('BH').Value:=SJTXX_ADOQ.FieldValues['BH'];
XT_ADOQ.Open;
temp:=Format('%s%d. %s',[JG,STH,XT_ADOQ.FieldValues['TM']]); //輸出填空題題目
SJ_WD.Range.InsertAfter(temp+#13+#13);
temp:='';
YTS:=XT_ADOQ.FieldValues['YTS'];
for i:=1 to YTS do //組合每個空的答案
if not XT_ADOQ.FieldByName('K'+IntToStr(i)).IsNull then
begin
if i<>YTS then temp:=temp+XT_ADOQ.FieldValues['K'+IntToStr(i)]+','
else temp:=temp+XT_ADOQ.FieldValues['K'+IntToStr(i)]+'。';
end
else break;
SJDA.Add(temp); //填空題答案
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+1;
RateProcess_F.Repaint;
STH:=STH+1;
SJTXX_ADOQ.Next;
end;
end;
RateProcess_F.CZ_P.Caption:='正在輸出簡答題......';//試卷題信息--------簡答題部分
RateProcess_F.Repaint;
SJTXX_ADOQ.Close;
SJTXX_ADOQ.SQL.Clear;
SJTXX_ADOQ.SQL.Add('SELECT * FROM SJT WHERE SJDH=:DH AND TypeID=3');
SJTXX_ADOQ.Parameters.ParamByName('DH').Value:=SJDH;
SJTXX_ADOQ.Open;
BF:=BF+1; //題型在試卷中屬于哪一部分
STH:=1; //每種題型開始的題號
TL:=SJTXX_ADOQ.RecordCount;
if TL>0 then
begin
SJTXX_ADOQ.First;
FZ:=SJTXX_ADOQ.FieldValues['FZ'];
SJ_WD.Range.InsertAfter(#13);
temp:=Format('%s簡答題( 共%d小題每題%d分, 小計%d分 )',[BF_Name[BF],TL,FZ,TL*FZ]);
SJ_WD.Range.InsertAfter(temp+#13+#13);
SJDA.Add('#'+temp); //為答案記下部分說明
SJTXX_ADOQ.First;
while not SJTXX_ADOQ.Eof do
begin
XT_ADOQ.Close;
XT_ADOQ.SQL.Clear;
XT_ADOQ.SQL.Add('SELECT * FROM JianDaTi WHERE BH=:BH');
XT_ADOQ.Parameters.ParamByName('BH').Value:=SJTXX_ADOQ.FieldValues['BH'];
XT_ADOQ.Open;
temp:=Format('%s%d. %s',[JG,STH,XT_ADOQ.FieldValues['TM']]); //輸出簡答題題目
SJ_WD.Range.InsertAfter(temp+#13+#13);
SJ_WD.Range.InsertAfter(#13+#13+#13+#13+#13);
SJDA.Add(XT_ADOQ.FieldValues['DA']); //記下簡答題答案
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+1;
RateProcess_F.Repaint;
STH:=STH+1;
SJTXX_ADOQ.Next;
end;
end;
RateProcess_F.CZ_P.Caption:='正在輸出原理論述題......';//試卷題信息----原理論述題部分
RateProcess_F.Repaint;
SJTXX_ADOQ.Close;
SJTXX_ADOQ.SQL.Clear;
SJTXX_ADOQ.SQL.Add('SELECT * FROM SJT WHERE SJDH=:DH AND TypeID=5');
SJTXX_ADOQ.Parameters.ParamByName('DH').Value:=SJDH;
SJTXX_ADOQ.Open;
BF:=BF+1; //題型在試卷中屬于哪一部分
STH:=1; //每種題型開始的題號
TL:=SJTXX_ADOQ.RecordCount;
if TL>0 then
begin
SJTXX_ADOQ.First;
FZ:=SJTXX_ADOQ.FieldValues['FZ'];
SJ_WD.Range.InsertAfter(#13);
temp:=Format('%s原理論述題( 共%d小題每題%d分, 小計%d分 )',[BF_Name[BF],TL,FZ,TL*FZ]);
SJ_WD.Range.InsertAfter(temp+#13+#13);
SJDA.Add('#'+temp); //為答案記下部分說明
SJTXX_ADOQ.First;
while not SJTXX_ADOQ.Eof do
begin
XT_ADOQ.Close;
XT_ADOQ.SQL.Clear;
XT_ADOQ.SQL.Add('SELECT * FROM YuanLiLunShu WHERE BH=:BH');
XT_ADOQ.Parameters.ParamByName('BH').Value:=SJTXX_ADOQ.FieldValues['BH'];
XT_ADOQ.Open;
temp:=Format('%s%d. %s',[JG,STH,XT_ADOQ.FieldValues['TM']]); //輸出原理論述題題目
SJ_WD.Range.InsertAfter(temp+#13+#13);
SJ_WD.Range.InsertAfter(#13+#13+#13+#13+#13+#13+#13);
SJDA.Add(XT_ADOQ.FieldValues['DA']); //記下簡答題答案
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+1;
RateProcess_F.Repaint;
STH:=STH+1;
SJTXX_ADOQ.Next;
end;
end;
RateProcess_F.CZ_P.Caption:='正在輸出系統(tǒng)設(shè)計題......';//試卷題信息----系統(tǒng)設(shè)計題部分
RateProcess_F.Repaint;
SJTXX_ADOQ.Close;
SJTXX_ADOQ.SQL.Clear;
SJTXX_ADOQ.SQL.Add('SELECT * FROM SJT WHERE SJDH=:DH AND TypeID=4');
SJTXX_ADOQ.Parameters.ParamByName('DH').Value:=SJDH;
SJTXX_ADOQ.Open;
BF:=BF+1; //題型在試卷中屬于哪一部分
STH:=1; //每種題型開始的題號
TL:=SJTXX_ADOQ.RecordCount;
if TL>0 then
begin
SJTXX_ADOQ.First;
FZ:=SJTXX_ADOQ.FieldValues['FZ'];
SJ_WD.Range.InsertAfter(#13);
temp:=Format('%s系統(tǒng)設(shè)計題( 共%d小題每題%d分, 小計%d分 )',[BF_Name[BF],TL,FZ,TL*FZ]);
SJ_WD.Range.InsertAfter(temp+#13+#13);
SJDA.Add('#'+temp); //為答案記下部分說明
SJTXX_ADOQ.First;
while not SJTXX_ADOQ.Eof do
begin
XT_ADOQ.Close;
XT_ADOQ.SQL.Clear;
XT_ADOQ.SQL.Add('SELECT * FROM XiTongSheJi WHERE BH=:BH');
XT_ADOQ.Parameters.ParamByName('BH').Value:=SJTXX_ADOQ.FieldValues['BH'];
XT_ADOQ.Open;
temp:=Format('%s%d. %s',[JG,STH,XT_ADOQ.FieldValues['TM']]); //輸出系統(tǒng)設(shè)計題題目
SJ_WD.Range.InsertAfter(temp+#13+#13);
BGName:=XT_ADOQ.FieldValues['TMBG'];
if trim(BGName)<>'' then
begin
SJ_WD.Sentences.Last.InsertAfter(' '+#13);
SJ_WD.Sentences.Last.InsertFile(AppPath+'doc\'+BGName,EmptyParam,
EmptyParam,EmptyParam,EmptyParam);
end;
{if not XT_ADOQ.FieldByName('TMBG').IsNull then
begin
BGName:=XT_ADOQ.FieldValues['TMBG'];
//一定要有下句,要不題目會被下面的圖覆蓋
SJ_WD.Sentences.Last.InsertAfter(' '+#13);
SJ_WD.Sentences.Last.InsertFile(AppPath+'doc\'+BGName,EmptyParam,
EmptyParam,EmptyParam,EmptyParam);
end;}
SJ_WD.Range.InsertAfter(#13+#13+#13+#13+#13);
SJDA.Add(XT_ADOQ.FieldValues['DA']); //記下系統(tǒng)設(shè)計題的答案
BGName:=XT_ADOQ.FieldValues['DABG'];
if trim(BGName)<>'' then SJDA.Add(BGName);
{if not XT_ADOQ.FieldByName('DABG').IsNull then
SJDA.Add(XT_ADOQ.FieldValues['DABG']);//記下系統(tǒng)設(shè)計題的答案表格}
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+1;
RateProcess_F.Repaint;
STH:=STH+1;
SJTXX_ADOQ.Next;
end;
end;
RateProcess_F.CZ_P.Caption:='正在輸出系統(tǒng)操作題......';//試卷題信息----系統(tǒng)操作題部分
RateProcess_F.Repaint;
SJTXX_ADOQ.Close;
SJTXX_ADOQ.SQL.Clear;
SJTXX_ADOQ.SQL.Add('SELECT * FROM SJT WHERE SJDH=:DH AND TypeID=6');
SJTXX_ADOQ.Parameters.ParamByName('DH').Value:=SJDH;
SJTXX_ADOQ.Open;
BF:=BF+1; //題型在試卷中屬于哪一部分
STH:=1; //每種題型開始的題號
TL:=SJTXX_ADOQ.RecordCount;
if TL>0 then
begin
SJTXX_ADOQ.First;
FZ:=SJTXX_ADOQ.FieldValues['FZ'];
SJ_WD.Range.InsertAfter(#13);
temp:=Format('%s系統(tǒng)操作題( 共%d小題每題%d分, 小計%d分 )',[BF_Name[BF],TL,FZ,TL*FZ]);
SJ_WD.Range.InsertAfter(temp+#13+#13);
SJDA.Add('#'+temp); //為答案記下部分說明
SJTXX_ADOQ.First;
while not SJTXX_ADOQ.Eof do
begin
XT_ADOQ.Close;
XT_ADOQ.SQL.Clear;
XT_ADOQ.SQL.Add('SELECT * FROM XiTongCZ WHERE BH=:BH');
XT_ADOQ.Parameters.ParamByName('BH').Value:=SJTXX_ADOQ.FieldValues['BH'];
XT_ADOQ.Open;
temp:=Format('%s%d. %s',[JG,STH,XT_ADOQ.FieldValues['TM']]); //輸出系統(tǒng)操作題目
SJ_WD.Range.InsertAfter(temp+#13+#13);
BGName:=XT_ADOQ.FieldValues['TMBG'];
if trim(BGName)<>'' then
begin
SJ_WD.Sentences.Last.InsertAfter(' '+#13);
SJ_WD.Sentences.Last.InsertFile(AppPath+'doc\'+BGName,EmptyParam,
EmptyParam,EmptyParam,EmptyParam);
end;
SJ_WD.Range.InsertAfter(#13+#13+#13+#13+#13+#13+#13+#13+#13+#13);
WTS:=XT_ADOQ.FieldValues['WTS'];
SJDA.Add('*');
for i:=1 to WTS do //循環(huán)輸出系統(tǒng)操作題的每一個小問題的答案
begin
temp:=XT_ADOQ.FieldValues['W'+IntToStr(i)+'DA'];
SJDA.Add('!'+temp);
BGName:=XT_ADOQ.FieldValues['W'+IntToStr(i)+'DABG'];
if Trim(BGName)<>'' then SJDA.Add(BGName);
end;
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+1;
RateProcess_F.Repaint;
STH:=STH+1;
SJTXX_ADOQ.Next;
end;
end;
SJTXX_ADOQ.Close; //關(guān)閉ADOQuery以減少資源占用
Wait(1000);
RateProcess_F.Close; //關(guān)閉進(jìn)度窗口
SJ_WA.Visible:=true;
SJ_WA.Disconnect; //斷開鏈接
SJ_WD.Disconnect;
end;
//****************************************************************************************
procedure TMain_F.BCDA_FBtnClick(Sender: TObject); //保存試卷答案
var
//Template,NewTemplate,ItemIndex,Doc_Type,Doc_Visible:OleVariant;
ItemIndex:OleVariant;
NewDocument:_Document;
i,j,k:integer;
temp,AppPath,DAStr:string;
procedure SetFont(aBold,aItalic,aShadow,aSize:integer);
begin
SJ_WF.ConnectTo(SJ_WD.Sentences.Get_Last.Font);
SJ_WF.Name:='宋體';
SJ_WF.Bold := aBold;
SJ_WF.Italic := aItalic;
SJ_WF.Shadow := aShadow;
SJ_WF.Size := aSize;
end;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -