📄 u_allsubjecttable.pas
字号:
First;
while not Eof do
begin
if (CurClass = '') or
(FieldByName('s_bjhao').AsString = CurClass) then
begin
Inc(AryCount);
SetLength(OrderBuf, AryCount);
OrderBuf[AryCount - 1].xhao := FieldByName('s_xhao').AsString;
OrderBuf[AryCount - 1].cji := FieldByName(IdxName).AsFloat;
end;
Next;
end;
except
SetLength(OrderBuf, 0);
AryCount := 0;
end;
if AryCount > 0 then
begin // 气泡排序:逆序从大到小
for i := 0 to AryCount - 1 do
begin
ChangedFlag := False;
for j := 0 to AryCount - i - 2 do
begin
if OrderBuf[j].cji < OrderBuf[j + 1].cji then
begin
M := OrderBuf[j + 1];
OrderBuf[j + 1] := OrderBuf[j];
OrderBuf[j] := m;
ChangedFlag := True;
end;
end;
if not ChangedFlag then
Break;
end;
end;
with MQuery do
try
DisableControls;
Close;
if GradeChanged or ExamChanged then
SQL.Text := SQuery.SQL.Text;
Open;
if (BaseCondCode = 1) and (AryCount <= BaseConds) then
begin
UsedCondCode := 0;
UsedConds := 0;
end else
begin
UsedCondCode := BaseCondCode;
UsedConds := BaseConds;
end;
for i := 0 to AryCount - 1 do
try
case UsedCondCode of
1: if i >= UsedConds then Continue;
2:
begin
if IdxName = 'n_zfen' then
begin
if (OrderBuf[i].cji / (FieldCount - 6) < UsedConds) then
Continue;
end
else if OrderBuf[i].cji < UsedConds then
Continue;
end;
end;
if SQuery.Locate('s_xhao', OrderBuf[i].xhao, []) then
begin
Append;
FieldByName('i_mci').AsInteger := i + 1;
FieldByName('s_xhao').AsString := SQuery.FieldByName('s_xhao').AsString;
FieldByName('s_xming').AsString := SQuery.FieldByName('s_xming').AsString;
FieldByName('s_bjhao').AsString := SQuery.FieldByName('s_bjhao').AsString;
FieldByName('n_zfen').AsFloat := SQuery.FieldByName('n_zfen').AsFloat;
FieldByName('n_pjun').AsFloat := SQuery.FieldByName('n_pjun').AsFloat;
for j := 4 to SQuery.FieldCount - 3 do
Fields[j].AsFloat := SQuery.Fields[j].AsFloat;
Post;
end;
finally
OrderBuf[i].xhao := '';
end;
SetLength(OrderBuf, 0);
First;
finally
while ControlsDisabled do
EnableControls;
end;
end;
procedure TFm_AllSubjectTable.SetGridTitle;
var
tmCaption: string;
begin
if not MQuery.IsEmpty then
tmCaption := S_CurExamName[CurGrade];
if Pos('年级', MTrView.Selected.Text) = 0 then
tmCaption := tmCaption + ' ' + MTrView.Selected.Text + ' ';
if (CurSubCode = 0) and (CurSelSub > 0) then
tmCaption := tmCaption + CmbBox_Subject.Text;
// UsedCondCode 0 -- 没有条件 1 -- 前 X 名 2 -- XX 分以上
if (BaseCondCode = 1) and (BaseCondCode <> UsedCondCode) and
(MQuery.RecordCount > BaseConds) then
begin
UsedCondCode := BaseCondCode;
UsedConds := BaseConds;
end;
case UsedCondCode of
1: tmCaption := tmCaption + '前' + IntToStr(UsedConds) + '名';
2:
begin
if (CurSubCode = 0) and (CurSelSub = 0) {and
(Pos('年级', MTrView.Selected.Text) > 0)} then
tmCaption := tmCaption + '平均' + IntToStr(UsedConds) + '分以上'
else
tmCaption := tmCaption + IntToStr(UsedConds) + '分以上';
end;
end;
MGrid.CaptionString := tmCaption + '成绩表';
end;
function TFm_AllSubjectTable.CheckCurExam: Boolean;
var
aQuery: TQuery;
begin
Result := False;
// 当前考试
if I_CurExamCode[CurGrade] = 0 then
begin
Caption := '学生考试成绩表—(当前年级没有选定考试)';
MessageBeep(0);
MQuery.Close;
SQuery.Close;
Exit;
end
else
Caption := '学生考试成绩表';
//
aQuery := TQuery.Create(Application);
with aQuery do
try
DataBaseName := DataDBase;
// 表标题
SQL.Text := 'SELECT s_kssming, si_kslxing, s_kcdhao FROM kssz WHERE i_kshao=' +
IntToStr(I_CurExamCode[CurGrade]);
Open;
// 当前考试不正确
if IsEmpty then
begin
Caption := '学生考试成绩表—(当前年级选定的考试没有找到)';
MessageBeep(0);
MQuery.Close;
SQuery.Close;
Exit;
end;
ExamType := FieldByName('si_kslxing').AsInteger;
if GradeChanged or ExamChanged then
begin
if FieldByName('s_kcdhao').AsString = '' then
CurSubCode := 0
else
CurSubCode := FieldByName('s_kcdhao').AsInteger;
end;
Close;
finally
Close;
Free;
end;
Result := True;
end;
procedure TFm_AllSubjectTable.TbBtn_ExitClick(Sender: TObject);
begin
Close;
end;
procedure TFm_AllSubjectTable.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
MQuery.Close;
Action := caFree;
Fm_AllSubjectTable := nil;
end;
procedure TFm_AllSubjectTable.Spl_MainCanResize(Sender: TObject;
var NewSize: Integer; var Accept: Boolean);
begin
if NewSize < 8 then
Accept := False;
end;
procedure TFm_AllSubjectTable.Spl_FuCanResize(Sender: TObject;
var NewSize: Integer; var Accept: Boolean);
begin
if NewSize < 8 then
Accept := False;
end;
procedure TFm_AllSubjectTable.MTrViewGetImageIndex(Sender: TObject;
Node: TTreeNode);
begin //
if Node.HasChildren then
begin
if Node.Expanded then
Node.ImageIndex := 2
else
Node.ImageIndex := 1;
end
else
begin
if Node.Level = 0 then
Node.ImageIndex := 1
else
Node.ImageIndex := 0;
end;
end;
procedure TFm_AllSubjectTable.MTrViewGetSelectedIndex(Sender: TObject;
Node: TTreeNode);
begin
if Node.HasChildren then
begin
if Node.Expanded then
Node.SelectedIndex := 5
else
Node.SelectedIndex := 4;
end
else
begin
if Node.Level = 0 then
Node.SelectedIndex := 4
else
Node.SelectedIndex := 3;
end;
end;
procedure TFm_AllSubjectTable.MTrViewChange(Sender: TObject;
Node: TTreeNode);
procedure CheckGrade;
var
tmS: string;
begin
if Integer(Node.Data) < 9999 then
begin // 年级
CurGrade := W_CurYear - Integer(Node.Data) + 1;
CurClass := '';
ChkBox_Class.Enabled := True;
ShowClass := ChkBox_Class.Checked;
end
else
begin // 班级
tmS := Copy(IntFormatStr(Integer(Node.Data), 9), 4, 4);
CurGrade := W_CurYear - StrToInt(tmS) + 1;
CurClass := IntFormatStr(Integer(Node.Data), 9);
ChkBox_Class.Enabled := False;
ShowClass := False;
end;
// 年级是否改变
GradeChanged := (CurGrade <> OldGrade);
// 显示班级是否改变
ShowClassChanged := OldShowClass <> ShowClass;
end;
begin
// 检查年级
CheckGrade;
// 当前考试
if not CheckCurExam then
begin
OldGrade := CurGrade;
SetGridTitle;
Exit;
end;
// 年级改变或考试改变,则应该刷新数据源
if GradeChanged or ExamChanged then
ReloadQuery(CurGrade, CurSubCode);
with MQuery do
try
DisableControls;
// 重新生成 Column
if GradeChanged or ExamChanged or ShowClassChanged then
RecreateColumn(CurGrade, CurSelSub, CursubCode);
// 拷贝到显示 Query
DistillQuery;
SetGridTitle;
finally
while ControlsDisabled do
EnableControls;
GradeChanged := False;
ExamChanged := False;
ShowClassChanged := False;
OldGrade := CurGrade;
OldShowClass := ShowClass;
end;
RefreshDataSetField(MGrid, QueryGetText, nil);
end;
procedure TFm_AllSubjectTable.QueryGetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
DataSetGetText(MGrid, Sender, Text, DisplayText);
end;
procedure TFm_AllSubjectTable.TbBtn_CollectClick(Sender: TObject);
begin//
if MQuery.IsEmpty then
begin
U_GlobalProc.Show_ErrorMess('数据库为空。');
Exit;
end;
U_SubjectCollect.Show_SubjectCollect;
end;
procedure TFm_AllSubjectTable.TbBtn_HelpClick(Sender: TObject);
begin //
end;
procedure TFm_AllSubjectTable.TbBtn_ExamNoClick(Sender: TObject);
begin
if U_SetCurExam.Show_SetCurExam then
begin
GetCurExamCode;
ExamChanged := True;
MTrViewChange(MTrView, MTrView.Selected);
end;
end;
procedure TFm_AllSubjectTable.Spl_MainMoved(Sender: TObject);
begin
CmbBox_Subject.Width := Panel2.Width - 6;
end;
procedure TFm_AllSubjectTable.CmbBox_SubjectChange(Sender: TObject);
var
aCmbBox: TComboBox;
NewCode: integer;
begin
aCmbBox := Sender as TComboBox;
if aCmbBox.ItemIndex = -1 then
aCmbBox.ItemIndex := 0;
NewCode := Integer(aCmbBox.Items.Objects[aCmbBox.ItemIndex]);
if CurSelSub <> NewCode then
try
MQuery.DisableControls;
CurSelSub := NewCode;
// 如果有条件, 则重新生成 MQuery
DistillQuery;
ReCreateColumn(CurGrade, CurSelSub, CurSubCode);
SetGridTitle;
finally
MQuery.EnableControls;
end;
RefreshDataSetField(MGrid, QueryGetText, nil);
end;
procedure TFm_AllSubjectTable.TbBtn_ConditionClick(Sender: TObject);
begin
if U_SubjectCondition.Show_SubjectCondition(BaseCondCode, BaseConds,
MQuery.RecordCount) then // 此处与 SQL 数据库不兼容;
begin
UsedCondCode := BaseCondCode;
UsedConds := BaseConds;
DistillQuery;
SetGridTitle;
RefreshDataSetField(MGrid, QueryGetText, nil);
end;
end;
procedure TFm_AllSubjectTable.ChkBox_ClassClick(Sender: TObject);
begin
ShowClass := ChkBox_Class.Checked;
ReCreateColumn(CurGrade, CurSelSub, CurSubCode);
RefreshDataSetField(MGrid, QueryGetText, nil);
end;
procedure TFm_AllSubjectTable.TbBtn_PrintClick(Sender: TObject);
begin //
Show_Print(MGrid);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -