u_exammanageaction.pas
来自「一个简单的学籍管理软件」· PAS 代码 · 共 409 行
PAS
409 行
unit U_ExamManageAction;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls, DateEdit, U_GlobalVar;
type
TFm_ExamManageAction = class(TForm)
Label1: TLabel;
Edit_TermCode: TEdit;
Label2: TLabel;
Btn_Cancel: TButton;
Bevel1: TBevel;
Btn_Help: TButton;
Btn_Ok: TButton;
Label3: TLabel;
Label4: TLabel;
CmbBox_Order: TComboBox;
CmbBox_Type: TComboBox;
Label5: TLabel;
CmbBox_Subject: TComboBox;
Label6: TLabel;
DtEdit_Begin: TDateEdit;
Label7: TLabel;
DtEdit_End: TDateEdit;
CmbBox_Grade: TComboBox;
Label8: TLabel;
Edit_Info: TEdit;
procedure Btn_OkClick(Sender: TObject);
procedure Edit_TermCodeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure CmbBox_OrderKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure CmbBox_OrderKeyPress(Sender: TObject; var Key: Char);
procedure CmbBox_OrderChange(Sender: TObject);
procedure CmbBox_TypeChange(Sender: TObject);
procedure CmbBox_SubjectChange(Sender: TObject);
procedure CmbBox_GradeChange(Sender: TObject);
private
OldSubjectCode: integer;
public
end;
function Show_ExamManageAction(var pTermCode: string;
var pGrade, pOrder, pType: integer;
var pInfo, pSubjectCode: string; var pBeginDate, pEndDate: TDateRec;
Actions: integer): Boolean;
implementation
uses DbTables, HGrids, U_ExamManage, U_GlobalProc;
{$R *.DFM}
function Show_ExamManageAction(var pTermCode: string;
var pGrade, pOrder, pType: integer;
var pInfo, pSubjectCode: string; var pBeginDate, pEndDate: TDateRec;
Actions: integer): Boolean;
var
Fm_ExamManageAction: TFm_ExamManageAction;
aColumn: THColumn;
aList: TStrings;
i, tmI: integer;
begin
Result := False;
Fm_ExamManageAction := TFm_ExamManageAction.Create(Application);
with Fm_ExamManageAction do
try
case Actions of
1: Caption := Caption + ' — 增加一次考试';
2: Caption := Caption + ' — 修改当前考试';
end;
// 学期号
Edit_TermCode.Text := pTermCode;
// 年级
CmbBox_Grade.Items.Clear;
for i := 0 to SI_GradeCount - 1 do
CmbBox_Grade.Items.AddObject(GradeNames[i] + '年级', Pointer(i + 1));
CmbBox_Grade.ItemIndex :=
CmbBox_Grade.Items.IndexOfObject(Pointer(pGrade));
CmbBox_GradeChange(CmbBox_Grade);
if CmbBox_Grade.ItemIndex = -1 then
begin
CmbBox_Grade.Enabled := True;
CmbBox_Grade.Color := clWindow;
end;
// 考试次别
aColumn := Fm_ExamManage.MGrid.FindFirstColumn('SI_KSCBIE');
if Assigned(aColumn) then
aList := aColumn.PickList
else
aList := nil;
if Assigned(aList) then
for i := 0 to aList.Count - 1 do
CmbBox_Order.Items.AddObject(aList.Strings[i], aList.Objects[i]);
CmbBox_Order.ItemIndex :=
CmbBox_Order.Items.IndexOfObject(Pointer(pOrder));
CmbBox_OrderChange(CmbBox_Order);
// 考试类型
aColumn := Fm_ExamManage.MGrid.FindFirstColumn('SI_KSLXING');
if Assigned(aColumn) then
aList := aColumn.PickList
else
aList := nil;
if Assigned(aList) then
for i := 0 to aList.Count - 1 do
CmbBox_Type.Items.AddObject(aList.Strings[i], aList.Objects[i]);
CmbBox_Type.ItemIndex :=
CmbBox_Type.Items.IndexOfObject(Pointer(pType));
CmbBox_TypeChange(CmbBox_Type);
// 信息
Edit_Info.Text := pInfo;
// 课程
if pSubjectCode = '' then
tmI := 0
else
tmI := StrToInt(pSubjectCode);
CmbBox_Subject.ItemIndex :=
CmbBox_Subject.Items.IndexOfObject(Pointer(tmI));
// 开始日期
with pBeginDate do
if pYear <> 0 then
DtEdit_Begin.Date := EnCodeDate(pYear, pMonth, pDay);
// 结束日期
with pEndDate do
if pYear <> 0 then
DtEdit_End.Date := EnCodeDate(pYear, pMonth, pDay);
if ShowModal = mrOk then
begin
//pTermCode := Edit_TermCode.Text;
pGrade := Integer(CmbBox_Grade.Items.Objects[CmbBox_Grade.ItemIndex]);
if CmbBox_Order.ItemIndex = -1 then
pOrder := 0
else
pOrder := Integer(CmbBox_Order.Items.Objects[CmbBox_Order.ItemIndex]);
if CmbBox_Type.ItemIndex = -1 then
pType := 0
else
pType := Integer(CmbBox_Type.Items.Objects[CmbBox_Type.ItemIndex]);
pInfo := Edit_Info.Text;
with CmbBox_Subject do
begin
if ItemIndex = -1 then
pSubjectCode := ''
else
pSubjectCode := IntFormatStr(Integer(Items.Objects[ItemIndex]), 4);
end;
with pBeginDate do
begin
pYear := DtEdit_Begin.Year;
pMonth := DtEdit_Begin.Month;
pDay := DtEdit_Begin.Day;
end;
with pEndDate do
begin
pYear := DtEdit_End.Year;
pMonth := DtEdit_End.Month;
pDay := DtEdit_End.Day;
end;
Result := True;
end;
finally
Free;
end;
end;
procedure TFm_ExamManageAction.Btn_OkClick(Sender: TObject);
var
tmType: integer;
begin
if CmbBox_Grade.ItemIndex = -1 then
begin
MessageBeep(0);
U_GlobalProc.Show_ErrorMess('年级不能为空。');
CmbBox_Grade.SetFocus;
Exit;
end;
if CmbBox_Order.ItemIndex = -1 then
begin
MessageBeep(0);
U_GlobalProc.Show_ErrorMess('考试次别不能为空。');
CmbBox_Order.SetFocus;
Exit;
end;
if Trim(Edit_Info.Text) = '' then
begin
MessageBeep(0);
U_GlobalProc.Show_ErrorMess('考试说明不能为空。');
Edit_Info.SetFocus;
Exit;
end;
if CmbBox_Type.ItemIndex = -1 then
tmType := 0
else
tmType := Integer(CmbBox_Type.Items.Objects[CmbBox_Type.ItemIndex]);
if (tmType = 2) and (CmbBox_Subject.ItemIndex = -1) then
begin
MessageBeep(0);
U_GlobalProc.Show_ErrorMess('考试课程不能为空。');
CmbBox_Subject.SetFocus;
Exit;
end;
ModalResult := mrOk;
end;
procedure TFm_ExamManageAction.Edit_TermCodeKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if (Key = VK_RETURN) then
begin
if Shift = [] then
SelectNext(ActiveControl, True, True)
else if ssShift in Shift then
SelectNext(ActiveControl, False, True);
end;
end;
procedure TFm_ExamManageAction.CmbBox_OrderKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if (Key = VK_RETURN) and (not (Sender as TComboBox).DroppedDown) then
begin
if Shift = [] then
SelectNext(ActiveControl, True, True)
else if ssShift in Shift then
SelectNext(ActiveControl, False, True);
Key := 0;
end;
if (Key = VK_UP) and (not (Sender as TComboBox).DroppedDown) then
begin
Key := 0;
SelectNext(ActiveControl, False, True);
end;
if (Key = VK_DOWN) and (not (Sender as TComboBox).DroppedDown) then
begin
Key := 0;
(Sender as TComboBox).DroppedDown := TRUE;
end;
if (key = VK_LEFT) or (Key = VK_RIGHT) then
begin
if Key = VK_LEFT then
SelectNext(ActiveControl, False, True)
else
SelectNext(ActiveControl, True, True);
Key := 0;
end;
end;
procedure TFm_ExamManageAction.CmbBox_OrderKeyPress(Sender: TObject;
var Key: Char);
var
tCmbBox: TComboBox;
i: integer;
begin
tCmbBox := (Sender as TComboBox);
if Key = #27 then
begin
if tCmbBox.DroppedDown then
tCmbBox.DroppedDown := False
else
begin
tCmbBox.ItemIndex := -1;
if Assigned(tCmbBox.OnChange) then
tCmbBox.OnChange(tCmbBox);
end;
end;
if Key = #32 then
begin
if tCmbBox.ItemIndex < (tCmbBox.Items.Count - 1) then
tCmbBox.ItemIndex := tCmbBox.ItemIndex + 1
else
tCmbBox.ItemIndex := 0;
if Assigned(tCmbBox.OnChange) then
tCmbBox.OnChange(tCmbBox);
Key := #0;
Exit;
end;
if Key in ['1'..'9'] then
begin
i := StrToInt(Key) - 1;
if i < tCmbBox.Items.Count then
begin
tCmbBox.ItemIndex := i;
if Assigned(tCmbBox.OnChange) then
tCmbBox.OnChange(tCmbBox);
end else
MessageBeep(0);
Key := #0;
Exit;
end;
if not ((Key = #13) and (tCmbBox.DroppedDown)) then
Key := #0;
end;
procedure TFm_ExamManageAction.CmbBox_OrderChange(Sender: TObject);
var
tmOrder: integer;
begin
if CmbBox_Order.ItemIndex = -1 then
tmOrder := 0
else
tmOrder := Integer(CmbBox_Order.Items.Objects[CmbBox_Order.ItemIndex]);
case tmOrder of
0:
begin
CmbBox_Type.ItemIndex := -1;
CmbBox_Type.Enabled := False;
end;
1, 2:
begin
CmbBox_Type.ItemIndex :=
CmbBox_Type.Items.IndexOfObject(Pointer(1));
CmbBox_Type.Enabled := False;
end;
3, 4:
begin
CmbBox_Type.ItemIndex :=
CmbBox_Type.Items.IndexOfObject(Pointer(2));
CmbBox_Type.Enabled := True;
end;
end;
if Assigned(CmbBox_Type.OnChange) then
CmbBox_Type.OnChange(CmbBox_Type);
end;
procedure TFm_ExamManageAction.CmbBox_TypeChange(Sender: TObject);
var
tmType: integer;
begin
if CmbBox_Type.ItemIndex = -1 then
tmType := 0
else
tmType := Integer(CmbBox_Type.Items.Objects[CmbBox_Type.ItemIndex]);
case tmType of
0, 1, 3:
begin
CmbBox_Subject.ItemIndex := -1;
CmbBox_Subject.Enabled := False;
end;
2:
begin
CmbBox_Subject.Enabled := True;
CmbBox_Subject.ItemIndex :=
CmbBox_Subject.Items.IndexOfObject(Pointer(OldSubjectCode));
end;
end;
if Assigned(CmbBox_Subject.OnChange) then
CmbBox_Subject.OnChange(CmbBox_Subject);
end;
procedure TFm_ExamManageAction.CmbBox_SubjectChange(Sender: TObject);
begin
if CmbBox_Subject.ItemIndex = -1 then
OldSubjectCode := 0
else
OldSubjectCode :=
Integer(CmbBox_Subject.Items.Objects[CmbBox_Subject.ItemIndex]);
end;
procedure TFm_ExamManageAction.CmbBox_GradeChange(Sender: TObject);
var
aQuery: TQuery;
tmGrade: integer;
OldKc: integer;
begin
if CmbBox_Grade.ItemIndex = -1 then
Exit;
tmGrade := Integer(CmbBox_Grade.Items.Objects[CmbBox_Grade.ItemIndex]);
aQuery := TQuery.Create(Application);
if CmbBox_Subject.ItemIndex = -1 then
OldKc := 0
else
OldKc := Integer(CmbBox_Subject.Items.Objects[CmbBox_Subject.ItemIndex]);
CmbBox_Subject.Items.Clear;
with aQuery do
try
DataBaseName := DataDBase;
SQL.Text := 'SELECT d1.s_kcdhao, d2.s_kcmcheng FROM xqkskc d1, ' +
'kc d2 WHERE d1.s_xqhao=''' + S_CurTermCode + ''' AND d1.si_nji=' +
IntToStr(tmGrade) + ' AND d1.s_kcdhao=d2.s_kcdhao AND ' +
' d2.si_kclxing=1';
Open;
while not Eof do
begin
CmbBox_Subject.Items.AddObject(FieldByName('s_kcmcheng').AsString,
Pointer(FieldByName('s_kcdhao').AsInteger));
Next;
end;
CmbBox_Subject.ItemIndex :=
CmbBox_Subject.Items.IndexOfObject(Pointer(OldKc));
CmbBox_SubjectChange(CmbBox_Subject);
finally
Close;
Free;
end;
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?