⑶ 编写TreeView的OnChange事件,在左边选择好班级和课程后,通过选择考试类型输入相关成绩,相关代码如下:
procedure TFormAchievement.TreeViewChange(Sender: TObject; Node: TTreeNode);
begin // 没有选中班级及课程,按钮和面板不可用
SBtnSave.Enabled := False;
ScrollBox.Enabled := False;
SBtnPrintReportCard.Enabled := False;
SBtnPrintMakeup.Enabled := False;
if Node.Level<4 then Exit;
SelectNode := Node; // 保存当前选中的节点
LabelClass.Caption := Node.Parent.Text; // 班级名
LabelCourse.Caption := Node.Text; // 课程名
StatusBar.Panels[1].Text := '请选择考试的类别,并通过“保存”按钮对数据存盘后,可以生成补考名单';
ComboBoxAchievementType.Enabled := True;
ComboBoxAchievementType.ItemIndex := 0; // 选中第一种考试类型
ComboBoxAchievementTypeChange( Nil );
ComboBoxAchievementType.SetFocus;
end;
⑷ 定义计算成绩占比之和为100的CalculatePercent函数,为计算总评成绩打好基础,占比之和为100则函数返回True,否则返回False,相关代码如下:
Function TFormAchievement.CalculatePercent : Boolean;
var
iPos, iPercent : Integer;
begin
Result := True; // 因PnlParameter对象上只有三个TEdit
iPercent := 0; // 故使用了对象遍历技术,以便统一处理
for iPos:= 0 to PnlParameter.ControlCount-1 do begin
if (PnlParameter.Controls[iPos] is TEdit) then begin
if (PnlParameter.Controls[iPos] as TEdit).Text='' then
(PnlParameter.Controls[iPos] as TEdit).Text:='0';
iPercent := iPercent + StrToInt((PnlParameter.Controls[iPos] as TEdit).Text);
end;
end;
if iPercent <> 100 then begin
ShowMessage('成绩占比之和必须是100,请重输');
Edit3.SetFocus; Result := False;
end;
end;
⑸ 定义释放用于输入每位学生成绩时自动创建的TEdit组件所开辟的内容空间的过程FreeEditAchievement,相关代码如下:
procedure TFormAchievement.FreeEditAchievement();
var
i, j : Integer;
begin // AchievementCount为每个学生用于输入成绩时创建的相关TEdit的个数
if iCount > 0 then begin // iCount为学生个数
for i := 0 to iCount-1 do
for j := 0 to AchievementCount-1 do
EditAchievement[i][j].Free; // 释放内存
iCount := 0;
end;
end;
|