📄 mainfrm.pas
字号:
unit MainFrm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, ExtCtrls, Db, DBTables, Grids, DBGrids, Mask, DBCtrls,
Buttons, ImgList, jpeg,Math, Spin, ADODB;
type
TMainForm = class(TForm)
Panel1: TPanel;
GroupBox1: TGroupBox;
rdChoose: TRadioGroup;
DBRichEdit1: TDBRichEdit;
seBegin: TSpinEdit;
Label1: TLabel;
Label2: TLabel;
seEnd: TSpinEdit;
spbFirst: TSpeedButton;
spbNext: TSpeedButton;
spbPrior: TSpeedButton;
spbLast: TSpeedButton;
spbAutoShow: TSpeedButton;
pnlAutoShow: TPanel;
Label3: TLabel;
spTime: TSpinEdit;
Label4: TLabel;
spbOk: TSpeedButton;
spbCancel: TSpeedButton;
Shape1: TShape;
spbClose: TSpeedButton;
DataSource1: TDataSource;
Timer1: TTimer;
SpeedButton1: TSpeedButton;
lblCaption: TLabel;
Button1: TButton;
ADOConnection1: TADOConnection;
Query1: TADOQuery;
Query2: TADOQuery;
ADOQuery1: TADOQuery;
Label5: TLabel;
procedure FormShow(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure spbAutoShowClick(Sender: TObject);
procedure spbOkClick(Sender: TObject);
procedure spbCancelClick(Sender: TObject);
procedure spbFirstClick(Sender: TObject);
procedure spbNextClick(Sender: TObject);
procedure spbPriorClick(Sender: TObject);
procedure spbLastClick(Sender: TObject);
procedure spbCloseClick(Sender: TObject);
procedure Query1AfterScroll(DataSet: TDataSet);
procedure Query1AfterOpen(DataSet: TDataSet);
procedure seBeginChange(Sender: TObject);
procedure seEndChange(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure spTimeChange(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure rdChooseClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
sc,sn: string;
sw:integer;
procedure CreateChooseItems;
procedure sAppendRecord(stm,sc1,sc2,sc3,sc4,sans:string);
procedure FormInit;
procedure EnableButtons(B:Boolean);
procedure EnableCtrls(B:Boolean);
procedure AppendUser(sc1,sn1:string);
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
uses Dmmain,contanst,TaxPublic, UserCheckFrm;
{$R *.DFM}
{ TMainForm }
procedure TMainForm.EnableButtons(B: Boolean);
begin
{ btnAdd.Enabled := B;
btnDelete.Enabled := B;
btnModify.Enabled := B;
btnExit.Enabled := B;
btnQuery.Enabled := B;
btnRefresh.Enabled := B;
btnSave.Enabled := not B;
btnCancel.Enabled :=not B;
}
end;
procedure TMainForm.EnableCtrls(B: Boolean);
begin
end;
procedure TMainForm.FormInit;
begin
seBegin.Value := 1;
seEnd.Value := 100;
Timer1.Enabled := False;
pnlAutoShow.Visible := False;
Query1.Close;
Query1.Open;
Query2.Close;
Query2.Open;
lblCaption.Caption := '总共有题'+IntToStr(Query1.RecordCount)+'个';
end;
procedure TMainForm.FormShow(Sender: TObject);
begin
if not UserCheckForm.UserCheckDlg(sc,sn) then
begin
Application.Terminate;
Exit;
end;
FormInit;
AppendUser(sc,sn);
end;
procedure TMainForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
if not (ActiveControl is TDBMemo) and not (ActiveControl is TDBGrid)
and not (ActiveControl is TMemo) then
begin
key := #0; //此键盘消息不再由其他程序处理
Perform(WM_NEXTDLGCTL, 0, 0); //焦点跳转到下一控件
end
else if (ActiveControl is TDBGrid) then
with TDBGrid(ActiveControl) do
if SelectedIndex < (fieldcount - 1) then
SelectedIndex := SelectedIndex + 1 //焦点跳转到下一栏
else
SelectedIndex := 0;
end;
procedure TMainForm.spbAutoShowClick(Sender: TObject);
begin
pnlAutoShow.Visible := True;
end;
procedure TMainForm.spbOkClick(Sender: TObject);
begin
pnlAutoShow.Visible := False;
Timer1.Enabled := True;
// DoAutoShow;
end;
procedure TMainForm.spbCancelClick(Sender: TObject);
begin
Timer1.Enabled := False;
pnlAutoShow.Visible := False;
end;
procedure TMainForm.spbFirstClick(Sender: TObject);
begin
Query1.First;
sw := 1;
Label5.Caption := '当前题为第 '+IntToStr(sw)+' 题';
end;
procedure TMainForm.spbNextClick(Sender: TObject);
begin
Query1.Next;
if Query1.Eof then Exit;
sw := sw + 1;
Label5.Caption := '当前题为第 '+IntToStr(sw)+' 题';
end;
procedure TMainForm.spbPriorClick(Sender: TObject);
begin
Query1.Prior;
if Query1.Bof then Exit;
sw := sw -1;
Label5.Caption := '当前题为第 '+IntToStr(sw)+' 题';
end;
procedure TMainForm.spbLastClick(Sender: TObject);
begin
Query1.Last;
sw := 6750;
Label5.Caption := '当前题为第 '+IntToStr(sw)+' 题';
end;
procedure TMainForm.spbCloseClick(Sender: TObject);
begin
Close;
end;
procedure TMainForm.CreateChooseItems;
begin
With Query1 do
begin
rdChoose.Items.Clear;
rdChoose.Items.Add('A '+FieldByName('A').Asstring);
rdChoose.Items.Add('B '+FieldByName('B').Asstring);
rdChoose.Items.Add('C '+FieldByName('C').Asstring);
rdChoose.Items.Add('D '+FieldByName('D').Asstring);
end;
with AdoQuery1 do
begin
Close;
Sql.Text := 'select da from 学生答题 where xh='+QuotedStr(sc)+' and Th='+QuotedStr(Query1.FieldByName('RowId').AsString);
Open;
if UpperCase(FieldByName('da').Asstring) = 'A' then
rdChoose.itemIndex := 0;
if UpperCase(FieldByName('da').Asstring) = 'B' then
rdChoose.itemIndex := 1;
if UpperCase(FieldByName('da').Asstring) = 'C' then
rdChoose.itemIndex := 2;
if UpperCase(FieldByName('da').Asstring) = 'D' then
rdChoose.itemIndex := 3;
end;
end;
procedure TMainForm.Query1AfterScroll(DataSet: TDataSet);
begin
CreateChooseItems;
end;
procedure TMainForm.Query1AfterOpen(DataSet: TDataSet);
begin
CreateChooseItems;
lblCaption.Caption := '总共有题'+IntToStr(Query1.RecordCount)+'个';
end;
procedure TMainForm.seBeginChange(Sender: TObject);
var
s: string;
begin
if seBegin.Value > seEnd.Value then
begin
MessageBoxINfo('起始值不能大于终止值!');
Exit;
end;
s := 'select * from 单项选择 where rowId>='+
IntToStr(136454+seBegin.Value)+' and RowId<='+
IntToStr(136454+seEnd.Value);
//OpenQuery(Query1,s);
end;
procedure TMainForm.seEndChange(Sender: TObject);
var
s: string;
begin
if seBegin.Value > seEnd.Value then
begin
MessageBoxINfo('起始值不能大于终止值!');
Exit;
end;
s := 'select * from 单项选择 where rowId>='+
IntToStr(136454+seBegin.Value)+' and RowId<='+
IntToStr(136454+seEnd.Value);
// OpenQuery(Query1,s);
end;
procedure TMainForm.Timer1Timer(Sender: TObject);
begin
Query1.Next;
if UpperCase(Query1.FieldByName('da').Asstring) = 'A' then
rdChoose.ItemIndex := 0;
if UpperCase(Query1.FieldByName('da').Asstring) = 'B' then
rdChoose.ItemIndex := 1;
if UpperCase(Query1.FieldByName('da').Asstring) = 'C' then
rdChoose.ItemIndex := 2;
if UpperCase(Query1.FieldByName('da').Asstring) = 'D' then
rdChoose.ItemIndex := 3;
end;
procedure TMainForm.spTimeChange(Sender: TObject);
begin
Timer1.Interval := spTime.Value * 1000;
end;
procedure TMainForm.SpeedButton1Click(Sender: TObject);
begin
if UpperCase(Query1.FieldByName('da').Asstring) = 'A' then
rdChoose.ItemIndex := 0;
if UpperCase(Query1.FieldByName('da').Asstring) = 'B' then
rdChoose.ItemIndex := 1;
if UpperCase(Query1.FieldByName('da').Asstring) = 'C' then
rdChoose.ItemIndex := 2;
if UpperCase(Query1.FieldByName('da').Asstring) = 'D' then
rdChoose.ItemIndex := 3;
end;
procedure TMainForm.rdChooseClick(Sender: TObject);
var
i,j: Integer;
begin
with Query2 do
begin
Close;
Sql.Text := 'select * from 学生答题 where xh='+QuotedStr(sc) +' and th='+QuotedStr(Query1.FieldByName('RowId').Asstring);
Open;
if IsEmpty then
begin
append;
FieldByName('xh').AsString := Sc;
FieldByName('xm').AsString := Sn;
FieldByName('zqda').AsString := Query1.FieldbyName('da').AsString;
FieldByName('th').AsString := Query1.FieldbyName('RowID').AsString;
if rdChoose.itemIndex = 0 then
FieldByName('da').AsString := 'A';
if rdChoose.itemIndex = 1 then
FieldByName('da').AsString := 'B';
if rdChoose.itemIndex = 2 then
FieldByName('da').AsString := 'C';
if rdChoose.itemIndex = 3 then
FieldByName('da').AsString := 'D';
post;
end
else
begin
Edit;
if rdChoose.itemIndex = 0 then
FieldByName('da').AsString := 'A';
if rdChoose.itemIndex = 1 then
FieldByName('da').AsString := 'B';
if rdChoose.itemIndex = 2 then
FieldByName('da').AsString := 'C';
if rdChoose.itemIndex = 3 then
FieldByName('da').AsString := 'D';
post;
end;
end;
{
if UpperCase(Query1.FieldByName('Da').Asstring) = 'A' then
i := 0;
if UpperCase(Query1.FieldByName('Da').Asstring) = 'B' then
i := 1;
if UpperCase(Query1.FieldByName('Da').Asstring) = 'C' then
i := 2;
if UpperCase(Query1.FieldByName('Da').Asstring) = 'D' then
i := 3;
j := rdChoose.itemIndex;
if i <> j then
MessageBoxWarning('错误!,请重新选择。');
}
end;
procedure TMainForm.Button1Click(Sender: TObject);
var
tm,c1,c2,c3,c4,ans,tt,gg: string;
begin
tt := '';
with Query1 do
begin
First;
while not eof do
begin
tm := FieldByName('CText').Asstring;
gg := tm;
c1 := FieldByName('Choise1').Asstring;
c2 := FieldByName('Choise2').Asstring;
c3 := FieldByName('Choise3').Asstring;
c4 := FieldByName('Choise4').Asstring;
ans := FieldByName('Answer').Asstring;
tm := StringReplace(tm,' ','',[rfReplaceAll]);
tm := StringReplace(tm,'(','(',[rfReplaceAll]);
tm := StringReplace(tm,')',')',[rfReplaceAll]);
if tt <> tm then
sAppendRecord(gg,c1,c2,c3,c4,ans);
tt := tm;
Caption := Tm;
Next;
end;
end;
end;
procedure TMainForm.sAppendRecord(stm, sc1, sc2, sc3, sc4, sans: string);
begin
{
// with TAble1 do
begin
Append;
FieldByName('CText').Asstring := stm;
FieldByName('Choise1').Asstring := sc1;
FieldByName('Choise2').Asstring := sc2;
FieldByName('Choise3').Asstring := sc3;
FieldByName('Choise4').Asstring := sc4;
FieldByName('Answer').Asstring :=sans;
POst;
end;
}
end;
procedure TMainForm.AppendUser(sc1, sn1:string);
begin
with Query2 do
begin
Close;
Sql.Text := 'select * from 学生答题 where xh='+QuotedStr(sc1);
Open;
if IsEmpty then
begin
append;
FieldByName('xh').AsString := Sc1;
FieldByName('xm').AsString := Sn1;
FieldByName('th').AsString := '9999999999';
post;
end;
end;
end;
procedure TMainForm.FormCreate(Sender: TObject);
var
s: string;
begin
sw := 1;
AdoConnection1.Close;
s := ' Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;'+
'User ID=sa;Initial Catalog=Exam;Data Source=192.168.254.5;Use Procedure '+
'for Prepare=1;Auto Translate=True;Packet Size=4096;'+
'Workstation ID=192.168.254.5;Use Encryption for Data=False;'+
'Tag with column collation when possible=False';
ADOConnection1.ConnectionString := s;
ADOConnection1.LoginPrompt := False;
try
ADOConnection1.Open;
except
MessageBoxInfo('无法连接远程数据库!');
Application.Terminate;
Close;
Exit;
end;
Label5.Caption := '当前题为第 '+IntToStr(sw)+' 题';
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MessageBoxQuery('真的退出吗?')<> MrYes then
CanClose := False
else
CanClose := True;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -