unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Grids, ExtCtrls,
  StdCtrls, GridPrn, GridPrnPreviewDlg;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    GridPrinter1: TGridPrinter;
    GridPrintPreviewDialog1: TGridPrintPreviewDialog;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    pnlCol1Alignment: TPanel;
    pnlCol2Alignment: TPanel;
    pnlCol3Alignment: TPanel;
    rbLayoutTop: TRadioButton;
    rbLayoutCenter: TRadioButton;
    rbLayoutBottom: TRadioButton;
    rbCenter2: TRadioButton;
    rbCenter3: TRadioButton;
    rbLeft1: TRadioButton;
    rbCenter1: TRadioButton;
    rbLeft2: TRadioButton;
    rbLeft3: TRadioButton;
    rbRight1: TRadioButton;
    rbRight2: TRadioButton;
    rbRight3: TRadioButton;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
    procedure rbLayoutChange(Sender: TObject);
    procedure rbAlignmentChange(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  GridPrintPreviewDialog1.Execute;
end;

procedure TForm1.rbLayoutChange(Sender: TObject);
var
  layoutIndex: Integer;
  i: Integer;
begin
  if not (Sender is TRadioButton) then
    exit;
  if not TRadioButton(Sender).Checked then
    exit;
  layoutIndex := TRadioButton(Sender).Tag - 1;
  for i := 0 to StringGrid1.Columns.Count-1 do
  begin
    StringGrid1.Columns[i].Layout := TTextLayout(layoutIndex);
    StringGrid1.Columns[i].Title.Layout := TTextLayout(layoutIndex);
  end;
end;

procedure TForm1.rbAlignmentChange(Sender: TObject);
var
  colIndex, alignmentIndex: Integer;
  col: TGridColumn;
begin
  if not (Sender is TRadioButton) then
    exit;
  if not TRadioButton(Sender).Checked then
    exit;
  colIndex := TRadioButton(Sender).Tag div 10 - 1;
  alignmentIndex := TRadioButton(Sender).Tag mod 10 - 1;
  col := StringGrid1.Columns[colIndex];
  col.Alignment := TAlignment(alignmentIndex);
  col.Title.Alignment := TAlignment(alignmentIndex);
end;

end.