unit mainChemForm;

{$mode objfpc}{$H+}

interface

uses
	Classes, SysUtils, Forms, Controls, Graphics, Dialogs, RTTIGrids, grids;

type
	TElementItem = class(TCollectionItem)
	private
		FNumber: cardinal;
		FName: string;
		FSymbol: string;
		FGroup: string;
	published
		property AtomicNo: cardinal read FNumber write FNumber;
		property Name: string read FName write FName;
		property Symbol: string read FSymbol write FSymbol;
		property Group: string read FGroup write FGroup;
	end;

	{ TChemForm }
	TChemForm = class(TForm)
		chemGrid: TTIGrid;
		procedure FormCreate(Sender: TObject);
		procedure FormDestroy(Sender: TObject);
	private
		Felements: TCollection;
		procedure SetupChemGrid;
	end;

var
	ChemForm: TChemForm;

implementation

{$R *.lfm}

{ TChemForm }

procedure TChemForm.FormCreate(Sender: TObject);
begin
	SetupChemGrid;
end;

procedure TChemForm.FormDestroy(Sender: TObject);
begin
	// Free up the collection's memory!
	Felements.Free;
end;

procedure TChemForm.SetupChemGrid;
	procedure AddElement(aNumber: cardinal; const aName, aSymbol, aGroup: string);
	var ei: TElementItem;
	begin
		ei := TElementItem(Felements.Add);
		ei.AtomicNo := aNumber;
		ei.Name := aName;
		ei.Symbol := aSymbol;
		ei.Group := aGroup;
	end;

	procedure AddElements;
	begin
		AddElement(1, 'Hydrogen', 'H', '"I"');
		AddElement(2, 'Helium', 'He', '"II"');
		AddElement(3, 'Lithium', 'Li', 'I');
		AddElement(4, 'Beryllium', 'Be', 'II');
		AddElement(5, 'Boron', 'B', 'III');
		AddElement(6, 'Carbon', 'C', 'IV');
		AddElement(7, 'Nitrogen', 'N', 'V');
		AddElement(8, 'Oxygen', 'O', 'VI');
		AddElement(9, 'Fluorine', 'F', 'VII');
		AddElement(10, 'Neon', 'Ne', 'VIII');
	end;

	procedure InitalizeChemGrid;
	begin
		Self.Height := 310;
		Self.Width := 340;
		chemGrid.Align := alClient;
		chemGrid.TIOptions := chemGrid.TIOptions + [tgoStartIndexAtOne];
		chemGrid.Options := chemGrid.Options + [goDrawFocusSelected];
		chemGrid.FixedColor := clMoneyGreen;
		chemGrid.DefaultDrawing := True;
		chemGrid.AutoFillColumns := True;
	end;

begin
	Felements := TCollection.Create(TElementItem);
	AddElements;
	InitalizeChemGrid;
	chemGrid.ListObject := Felements;
end;

end.

