unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Grids, Math, Types;
const
PANEL_BUTTON_WIDTH = 100;
PANEL_BUTTON_HEIGHT = 65;
PANEL_MIN_COLS = 4;
PANEL_MIN_ROWS = 3;
type
{ TForm1 }
TForm1 = class(TForm)
DrawGrid1: TDrawGrid;
procedure DrawGrid1DrawCell(Sender: TObject; aCol, aRow: integer;
aRect: TRect; aState: TGridDrawState);
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormResize(Sender: TObject);
begin
DrawGrid1.ColCount := Max(Width div PANEL_BUTTON_WIDTH, PANEL_MIN_COLS);
DrawGrid1.RowCount := Max(Height div PANEL_BUTTON_HEIGHT, PANEL_MIN_ROWS);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DrawGrid1.HeaderHotZones := [gzNormal];
DrawGrid1.HeaderPushZones := [gzNormal];
DrawGrid1.Options := [goHeaderPushedLook, goHeaderHotTracking];
DrawGrid1.DefaultDrawing := False;
DrawGrid1.BorderStyle := bsNone;
DrawGrid1.FixedCols := 0;
DrawGrid1.FixedRows := 0;
DrawGrid1.GridLineWidth := 0;
DrawGrid1.DefaultColWidth := PANEL_BUTTON_WIDTH;
DrawGrid1.DefaultRowHeight := PANEL_BUTTON_HEIGHT;
end;
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; aCol, aRow: integer;
aRect: TRect; aState: TGridDrawState);
var
bgc: TColor;
grid_canvas: TCanvas;
begin
grid_canvas := TDrawGrid(Sender).Canvas;
if gdHot in aState then
bgc := clGreen
else
bgc := clMoneyGreen;
if (aRow = 0) then
begin
if gdHot in aState then
bgc := clBlue
else
bgc := clSkyBlue;
end;
if gdPushed in aState then
bgc := clGray;
grid_canvas.Brush.Color := clWhite;
grid_canvas.FillRect(ARect);
grid_canvas.Brush.Color := bgc;
grid_canvas.FillRect(ARect.Left + 4, ARect.Top + 4, ARect.Right - 4, ARect.Bottom - 4);
end;
end.