Вот у меня есть TStringGrid, я его заполняю
- Код: Выделить всё
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls, Buttons, Grids;
type
{ TForm1 }
TForm1 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
Edit1: TEdit;
Label1: TLabel;
Panel1: TPanel;
StringGrid1: TStringGrid;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure StringGrid1SelectCell(Sender: TObject; aCol, aRow: Integer;
var CanSelect: Boolean);
procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: string);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
n: integer;
implementation
uses Un_STUDENTS,Un_TABLE;
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
n:=0; {обнуление начального номера студента}
With StringGrid1 Do
begin
Cells[0,0] := 'Фамилия и имя';
Cells[1,0] := 'Математический анализ';
Cells[2,0] := 'Информатика';
Cells[3,0] := 'Программирование';
Cells[4,0] := 'Физика';
Cells[5,0] := 'Средний балл';
Cells[0,1] := 'Средний балл';
end;
end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; aCol, aRow: Integer;
var CanSelect: Boolean);
begin
If (ARow=StringGrid1.RowCount-1) or (ACol=StringGrid1.ColCount-1) then
CanSelect:=False;
end;
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: string);
var j,k:byte;
b,c: integer;
SumRow,SumCol: Real;
begin
with StringGrid1 do
if (ARow<>RowCount-1) and (ACol<>ColCount-1) then
{если редактируется область оценок, то проверяем, верны ли введенные данные}
Begin
If Value<>'' {если введенное значение не пусто}
then
begin
val(Value,b,c); {пытаемся перевести в число}
{игнорируем неверно введенную оценку}
if (c<>0) or (not(b in [1..5])) then
Cells[ACol,ARow]:='';
end;
SumRow:=0; {обнуляем первоначальную сумму оценок по строкам}
k:=0;
For j:=1 to 4 do
If Cells[j,Arow]<>'' then
begin
SumRow:=SumRow+StrToInt(Cells[j,ARow]);
inc(k); {считаем количество непустых значений}
end;
If k<>0 then SumRow := SumRow/k;
{отобразим средний балл в 5-ом столбце таблицы}
Cells[5,ARow]:=FormatFloat('##.##',SumRow);
SumCol:=0; {обнуляем первоначальную сумму оценок по столбцам}
k:=0;
For j:=1 to n do
If Cells[ACol,j]<>'' then
begin
SumCol:=SumCol+StrToInt(Cells[ACol,j]);
inc(k);
end;
If k<>0 then SumCol := SumCol/k;
{отобразим средний балл в n+1-ом строке таблицы}
Cells[ACol,n+1]:=FormatFloat('##.##',SumCol);
End;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var j: byte;
begin
if Edit1.Text='' then ShowMessage('Не введены данные')
else
begin
StringGrid1.Enabled:=true; {таблица становится доступной}
n:=n+1; {увеличиваем количество студентов}
With StringGrid1 Do
Begin
RowCount:=RowCount+1; {увеличиваем число строк}
for j:=0 to 5 do {перемещаем строку с данными о среднем балле}
begin {в последнюю строу таблицы}
Cells[j,RowCount-1] := Cells[j,RowCount-2];
Cells[j,RowCount-2] := '';{очищаем последнюю строку}
end;
{помещаем фамилию и имя из Edit1 в предпоследнюю строку}
Cells[0,RowCount-2] := Edit1.Text;
End;
Edit1.Clear;
end;
Edit1.SetFocus;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
{если диалоговое окно FmCHOISE было закрыто на кнопку "Построить"}
if FmCHOISE.ShowModal=mrOK then
If not Assigned(fmSTUDENTS) {если форма fmSTUDENTS не создана}
then
Begin
fmSTUDENTS:=TfmSTUDENTS.Create(Application);
{выводим форму fmSTUDENTS в модальном режиме}
fmSTUDENTS.ShowModal;
fmSTUDENTS.Free; {уничтожам форму fmSTUDENTS}
fmSTUDENTS:=Nil;
End;
end;
, а потом по этим данных мне необходимо построть график, с помощью TChart. И что-то ничего не получается