StringGrid, выделить фиксированные строки
Falk0ner, вс, 06/07/2008 - 15:34.
StringGrid, выделить фиксированные строки
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
C, R: Integer;
begin
for C := 0 to StringGrid1.ColCount - 1 do
begin
for R := 0 to StringGrid1.RowCount - 1 do
begin
if (C < StringGrid1.FixedCols) or
(R < StringGrid1.FixedRows) then
StringGrid1.Cells[C, R] := Format('Fixed Cell (%dx%xd)', [C, R])
else
StringGrid1.Cells[C, R] := Format('Cell (%dx%d)', [C, R]);
end;
end;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
I: Integer;
begin
with StringGrid1 do
if gdFixed in State then
begin
Canvas.FillRect(Rect);
InflateRect(Rect, -2, 0);
if (ACol = Col) or (ARow = Row) then
Canvas.Font.Style := [fsBold]
else
Canvas.Font.Style := [];
DrawText(Canvas.Handle,
PChar(Cells[ACol, ARow]), -1, Rect,
DT_SINGLELINE or DT_VCENTER);
end else begin
Rect := CellRect(ACol, 0);
for I := 1 to FixedRows - 1 do
with CellRect(ACol, I) do
Inc(Rect.Bottom, Bottom - );
InvalidateRect(Handle, @Rect, True);
Rect := CellRect(0, ARow);
for I := 1 to FixedCols - 1 do
with CellRect(I, ARow) do
Inc(Rect.Right, Right - Left);
InvalidateRect(Handle, @Rect, True);
end;
end;
end.
Взято из http://forum.sources.ru
Автор: Smike
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
C, R: Integer;
begin
for C := 0 to StringGrid1.ColCount - 1 do
begin
for R := 0 to StringGrid1.RowCount - 1 do
begin
if (C < StringGrid1.FixedCols) or
(R < StringGrid1.FixedRows) then
StringGrid1.Cells[C, R] := Format('Fixed Cell (%dx%xd)', [C, R])
else
StringGrid1.Cells[C, R] := Format('Cell (%dx%d)', [C, R]);
end;
end;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
I: Integer;
begin
with StringGrid1 do
if gdFixed in State then
begin
Canvas.FillRect(Rect);
InflateRect(Rect, -2, 0);
if (ACol = Col) or (ARow = Row) then
Canvas.Font.Style := [fsBold]
else
Canvas.Font.Style := [];
DrawText(Canvas.Handle,
PChar(Cells[ACol, ARow]), -1, Rect,
DT_SINGLELINE or DT_VCENTER);
end else begin
Rect := CellRect(ACol, 0);
for I := 1 to FixedRows - 1 do
with CellRect(ACol, I) do
Inc(Rect.Bottom, Bottom - );
InvalidateRect(Handle, @Rect, True);
Rect := CellRect(0, ARow);
for I := 1 to FixedCols - 1 do
with CellRect(I, ARow) do
Inc(Rect.Right, Right - Left);
InvalidateRect(Handle, @Rect, True);
end;
end;
end.
Отправить комментарий