
Interface
uses
ExtCtrls, Graphics;
procedure DrawGrid(img: TImage; XLevel, YLevel: integer;
XScaleFactor, XScaleQuantity, XScaleLength: integer;
YScaleFactor, YScaleQuantity, YScaleLength: integer);
implementation
procedure DrawGrid(img: TImage; XLevel, YLevel: integer;
XScaleFactor, XScaleQuantity, XScaleLength: integer;
YScaleFactor, YScaleQuantity, YScaleLength: integer);
var
runner: integer;
begin
with img.Canvas do
begin
MoveTo(YLevel, XLevel);
LineTo(img.Width - 40, XLevel);
MoveTo(YLevel, XLevel);
LineTo(YLevel, 10);
runner := YLevel;
while (runner < img.width - 40) do
begin
MoveTo(runner, XLevel);
LineTo(runner, XLevel - 3);
runner := runner + XScaleLength;
end;
runner := XLevel;
while (runner > 10) do
begin
MoveTo(YLevel, runner);
LineTo(YLevel + 3, runner);
runner := runner - YScaleLength;
end;
TextOut(img.Width - 60, XLevel + 5, '[Мб]');
TextOut(YLevel - 30, 5, '[Руб]');
end;
end;
end.
unit DiagramForm;
Interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Globals, TStoreDef, THardwareDef, CommonGraphics;
type
TfrmDiagram = class(TForm)
imgDiagram: TImage;
procedure FormShow(Sender: TObject);
private
XLevel, YLevel: integer;
XScaleFactor, XScaleQuantity, XScaleLength: integer;
YScaleFactor, YScaleQuantity, YScaleLength: integer;
procedure DrawDiagram;
public
{ Public declarations }
end;
var
frmDiagram: TfrmDiagram;
implementation
{$R *.dfm}
procedure TfrmDiagram.DrawDiagram;
var
i, mem, maxind, x, y: integer;
maxprice, minprice: real;
begin
i := 0;
maxind := dbase.GetMaxIndex;
while (i<=maxind) do
begin
mem := dbase.GetElement(i).Memory;
minprice := dbase.GetElement(i).Price;
while (i<maxind)and(dbase.GetElement(i).Memory = mem) do
inc(i);
if not (dbase.GetElement(i).Memory = mem) then dec(i);
maxprice := dbase.GetElement(i).Price;
inc(i);
with imgDiagram.Canvas do
begin
x := YLevel + (mem div XScaleFactor)*XScaleLength;
y := XLevel - Round(maxprice/YScaleFactor)*YScaleLength;
TextOut(x, XLevel + 20, IntToStr(mem));
TextOut(YLevel - 50, y, FloatToStr(maxprice));
MoveTo(YLevel, y);
Pen.Style := psDashDot;
LineTo(x, y);
Pen.Style := psSolid;
Brush.Color := clRed;
Rectangle(x + (XScaleLength div 2), y,
x - (XScaleLength div 2), XLevel);
Brush.Color := clWhite;
y := XLevel - Round(minprice/YScaleFactor)*YScaleLength;
TextOut(YLevel - 50, y, FloatToStr(minprice));
MoveTo(YLevel, y);
Pen.Style := psDashDot;
LineTo(x, y);
Pen.Style := psSolid;
Brush.Color := clGreen;
Rectangle(x + (XScaleLength div 2), y,
x - (XScaleLength div 2), XLevel);
Brush.Color := clWhite;
end;
end;
end;
procedure TfrmDiagram.FormShow(Sender: TObject);
var
MaxMem: integer;
MaxPrice: real;
begin
imgDiagram.Refresh;
XLevel := imgDiagram.Height - 40;
YLevel := 60;
MaxMem := dbase.GetMaxMemory;
MaxPrice := dbase.GetMaxPrice;
XScaleFactor := 1024;
XScaleQuantity := Round(MaxMem/XScaleFactor) + 2;
if XScaleQuantity < 6 then XScaleQuantity := 6;
XScaleLength := Round((imgDiagram.Width - YLevel - 40)/XScaleQuantity);
YScaleFactor := 1000;
YScaleQuantity := Round(MaxPrice/YScaleFactor) + 2;
if YScaleQuantity < 30 then YScaleQuantity := 30;
YScaleLength := Round((imgDiagram.Height - 10)/YScaleQuantity);
DrawGrid(imgDiagram, XLevel, YLevel, XScaleFactor, XScaleQuantity,
XScaleLength, YScaleFactor, YScaleQuantity, YScaleLength);
DrawDiagram;
end;
end.
unit PlotForm;