unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
StdCtrls, ExtCtrls, IniFiles, Dialogs, Buttons, ComCtrls, Gauges, jpeg, Clipbrd,
pngimage,Math, Grids,ComObj;
type
TForm1 = class(TForm)
statisticsbody: TRichEdit;
statisticsrc: TRichEdit;
btn1: TButton;
StringGrid1: TStringGrid;
btn2: TButton;
Button2: TButton;
function onlynumbers(str:string):string;
procedure zgrstat;
procedure btn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure WriteTable(FirstCol, FirstRow:integer; Grid: TStringGrid);
procedure AddLineChartFromTable(X, Y, Height, Width, Format: integer; Title, XLabel,YLabel: string; DataGrid: TStringGrid; DataPosition: byte; ChartType:integer);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
CurCol, CurRow: Integer;
public
{ Public declarations }
end;
var
Form1: TForm1;
MyExcel:Variant;
implementation
{$R *.dfm}
uses ExcelXP;
procedure TForm1.zgrstat;
var
hg, al: string;
Text: TIniFile; i:Integer;
begin
Text:= TIniFile.Create(PChar(extractFileDir(ParamSTR(0))
+ '\folder\kv_LastUser.sav'));
try
al:= text.ReadString('user', 'uptime', '');
hg:= #13 + ' Информация о проделанной работе:' + #13 +
#13 + ' Общая продолжительность обучения: ' + al + #13 +
#13 +
' Детализированный отчет выполненных '+#13+
' упражнений:';
statisticsbody.Clear;
statisticsbody.Lines.LoadFromFile(extractFileDir(ParamSTR(0))
+ '\folder\kv_LastStat.sav');
statisticsrc.Clear;
statisticsrc.Lines.Add(hg);
statisticsrc.Lines.Text:= hg;
statisticsrc.Lines.AddStrings(statisticsbody.Lines);
finally
Text.Free;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
zgrstat;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:='Задание № ';
StringGrid1.Cells[1,0]:='Дата/время ';
StringGrid1.Cells[2,0]:='Оценка ';
StringGrid1.Cells[3,0]:='Допущено ошибок ';
StringGrid1.Cells[4,0]:='Попыток ';
StringGrid1.Cells[5,0]:='Скорость(в мин) ';
StringGrid1.Cells[6,0]:='Текущая ритм-ть ';
StringGrid1.Cells[7,0]:='Средняя ритм-ть ';
StringGrid1.Cells[8,0]:='Скорость(в сек) ';
StringGrid1.Cells[9,0]:='Затрачено времени ';
StringGrid1.DoubleBuffered:=true;
end;
function TForm1.onlynumbers(str:string):string;//получает строку
//возвращает только цифры из строки
var buf:string;
i:integer;
begin
buf:='';
for i:=1 to length(str) do//перебираем все символы строки
if (str[i] in ['0'..'9']) or (str[i] in ['%']) then buf:=buf+str[i];//если очередной символ - цифра
//то приписываем его к итоговой строке
Result:=buf;
end;
procedure TForm1.btn2Click(Sender: TObject);
var i,j,start:Integer;
begin
for i:=0 to 6 do statisticsrc.Lines.Delete(0); //срезали шапку
start:=3;
for i:=1 to (statisticsrc.Lines.Count div 12) do //для каждого блока теста
begin
StringGrid1.Cells[0,i]:=onlynumbers(statisticsrc.Lines.Strings[start-2]); //получаем № теста
for j:=0 to 8 do
StringGrid1.Cells[j+1,i]:=onlynumbers(statisticsrc.Lines.Strings[start+j]);
start:=start+12; //переходим к следующему блоку
end;
StringGrid1.RowCount:=(statisticsrc.Lines.Count div 12)+1;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
With StringGrid1, Canvas do
if (ARow>0) then
if (CurCol=ARow) or (CurRow=Arow) then
begin
StringGrid1.Canvas.Brush.Color := clBlack;
StringGrid1.Canvas.Font.Color := clWhite;
StringGrid1.canvas.fillRect(Rect); //Закрашиваем бэкграунд
StringGrid1.canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[ACol,ARow]); //Закрашиваем текст (Text). Также здесь можно добавить выравнивание и т.д..
end;
end;
procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
StringGrid1.MouseToCell(x, y, CurRow, CurRow);
StringGrid1.Repaint;
end;
procedure TForm1.WriteTable(FirstCol, FirstRow:integer; Grid: TStringGrid);
var col,row:integer;
begin
try
for col := 0 to Grid.ColCount - 1 do
for row := 0 to Grid.RowCount - 1 do
MyExcel.ActiveWorkBook.ActiveSheet.Cells[FirstRow+row, FirstCol+col]:=Grid.Cells[col, row];
except
raise Exception.Create('Запись таблицы завершилась ошибкой')
end;
end;
procedure TForm1.AddLineChartFromTable(X, Y, Height, Width, Format: integer; Title, XLabel,YLabel: string; DataGrid: TStringGrid; DataPosition: byte; ChartType:integer);
var Chart: OLEVariant;
DataRange: OLEVariant;
begin
//Вставляем данные из таблицы
WriteTable(1, 2, StringGrid1);
//выбираем данные для дигаграммы
DataRange:=MyExcel.ActiveWorkBook.ActiveSheet.UsedRange;
//добавляем новыю диаграмму на активный лист
MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects.Add(x,y,width,height);
//выбираем последнюю добавленную диаграмму
Chart:=MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects[MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects.Count];
Chart.Chart.ChartWizard(Source:=DataRange,
Gallery:=xlLine,
Format:=Format,
PlotBy:=DataPosition,
CategoryLabels:=1,
SeriesLabels:=1,
HasLegend:=true,
Title:=Title,
CategoryTitle:=XLabel,
ValueTitle:=YLabel);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
AddLineChartFromTable(200, 200, 300, 300, 5,EmptyParam, EmptyParam,EmptyParam, StringGrid1, EmptyParam, EmptyParam);
end;
end.