lazarus/examples/gridexamples/title_images/main.pas

101 lines
2.3 KiB
ObjectPascal

unit main;
{$mode objfpc}{$H+}
interface
uses
SysUtils, Forms, Controls, Grids, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
ImageList1: TImageList;
RadioGroup1: TRadioGroup;
StringGrid1: TStringGrid;
procedure RadioGroup1Click(Sender: TObject);
procedure StringGrid1HeaderClick(
Sender: TObject; IsColumn: Boolean;Index: Integer);
private
procedure AdjustTitleHeight;
procedure Refresh;
public
end;
var
Form1: TForm1;
implementation
{$R main.lfm}
uses
Buttons;
{ TForm1 }
procedure TForm1.AdjustTitleHeight;
begin
if RadioGroup1.ItemIndex < 2 then
StringGrid1.RowHeights[0] := StringGrid1.DefaultRowHeight
else
StringGrid1.RowHeights[0] := StringGrid1.RowHeights[1] + ImageList1.Height;
end;
procedure TForm1.RadioGroup1Click(Sender: TObject);
var
i: Integer;
begin
for i := 0 to StringGrid1.Columns.Count - 1 do begin
if RadioGroup1.ItemIndex>1 then
StringGrid1.RowHeights[0] := 2*StringGrid1.DefaultRowHeight
else
StringGrid1.RowHeights[0] := StringGrid1.DefaultRowHeight;
StringGrid1.Columns[i].Title.ImageLayout :=
TButtonLayout(RadioGroup1.ItemIndex);
end;
AdjustTitleHeight;
end;
procedure TForm1.Refresh;
var
i, j: Integer;
t: String;
begin
with StringGrid1 do
for i := 1 to RowCount - 2 do
for j := i + 1 to RowCount - 1 do begin
if
(Columns[0].Title.ImageIndex = 1) and (Cells[1, i] > Cells[1, j]) or
(Columns[0].Title.ImageIndex = 2) and (Cells[1, i] < Cells[1, j]) or
(Columns[1].Title.ImageIndex = 1) and (StrToInt(Cells[2, i]) > StrToInt(Cells[2, j])) or
(Columns[1].Title.ImageIndex = 2) and (StrToInt(Cells[2, i]) < StrToInt(Cells[2, j]))
then begin
t := Cells[1, i]; Cells[1, i] := Cells[1, j]; Cells[1, j] := t;
t := Cells[2, i]; Cells[2, i] := Cells[2, j]; Cells[2, j] := t;
end;
end;
end;
procedure TForm1.StringGrid1HeaderClick(
Sender: TObject; IsColumn: Boolean; Index: Integer);
begin
if not IsColumn then exit;
with StringGrid1.Columns[Index - 1].Title do begin
if ImageIndex = 2 then
ImageIndex := 0
else
ImageIndex := ImageIndex + 1;
if ImageIndex > 0 then
StringGrid1.Columns[2 - Index].Title.ImageIndex := 0;
end;
AdjustTitleHeight;
Refresh;
end;
end.