⑹ 为输入成绩的每个TEdit组件定义OnChange事件,用于自动计算总评成绩,相关代码如下:
procedure TFormAchievement.EditAchievementChange(Sender: TObject);
var
i, iRow : Integer;
Total, SubItem : Double;
EditTemp : TEdit;
begin
// 得到该TEdit输入对象的行号,代表是第几个学生, 在创建对象时
// (ComboBoxAchievementType对象的OnChange事件中)动态设置
iRow := (Sender As TEdit).Tag Div 10;
Total := 0; // 计算总评成绩
for i := 0 to ScrollBox.ControlCount-1 do
if (ScrollBox.Controls[i] Is TEdit) then begin
// 与输入成绩同一行的TEdit组件,表示是同一个学生
EditTemp := ScrollBox.Controls[i] as TEdit;
if EditTemp.Tag Div 10=iRow then Begin
// 中间的三个(即低位值为2、3和4)为学生的成绩
if EditTemp.Tag Mod 10 In [2..4] then begin
if EditTemp.Text='' then
EditTemp.Text:='0';
SubItem := StrToFloat(EditTemp.Text);
if (SubItem>100) then begin
ShowMessage('成绩超过了100分,请检查');
EditTemp.SetFocus; Exit;
end;
// 按成绩占比分别计算每个成绩在总评中的分项值
case EditTemp.Tag Mod 10 of
2 : SubItem := SubItem * StrToFloat(Edit1.Text)/100.0;
3 : SubItem := SubItem * StrToFloat(Edit2.Text)/100.0;
4 : SubItem := SubItem * StrToFloat(Edit3.Text)/100.0;
end;
Total := Total + SubItem; // 计算总评
end;
if EditTemp.Tag Mod 10=AchievementCount-1 then begin
EditTemp.Text:=Format('%.1f',[Total]); // 显示总评成绩
break;
end;
end;
end;
end;
|