Ich habe mir diesen Helper gebaut, um die nötigsten Dinge hinzubekommen. Vielleicht hilft es dir ja etwas weiter. Die Implementation musst du noch an deine Bedürfnisse anpassen. Es war halt nur als Übergangslösung bis zu einem ausreichend funktionierenden Grid gedacht.
Delphi-Quellcode:
type
TCustomGridHelper = class helper for TCustomGrid
protected
function FindHeader(AParent: TFmxObject): THeader;
public
procedure AdjustGrid;
procedure AdjustStretchColumn(ACol: Integer);
function GetHeader: THeader;
property Header: THeader read GetHeader;
end;
procedure TCustomGridHelper.AdjustGrid;
var
edt: TEdit;
headerItem: THeaderItem;
I: Integer;
J: Integer;
begin
if Header <> nil then begin
for I := 0 to Header.Count - 1 do begin
headerItem := Header.Items[I];
if headerItem <> nil then begin
if I < 2 then
headerItem.TextAlign := TTextAlign.taLeading
else
headerItem.TextAlign := TTextAlign.taTrailing;
headerItem.Font.Size := 12;
end;
end;
end;
for I := 0 to ColumnCount - 1 do begin
for J := 0 to RowCount - 1 do begin
edt := (Columns[I].CellControlByRow(J) as TEdit);
if edt <> nil then begin
if I < 2 then
edt.TextAlign := TTextAlign.taLeading
else
edt.TextAlign := TTextAlign.taTrailing;
edt.Font.Size := 12;
end;
end;
end;
end;
procedure TCustomGridHelper.AdjustStretchColumn(ACol: Integer);
var
I: Integer;
W: Single;
begin
W := 5 + VScrollBar.Width;
for I := 0 to ColumnCount - 1 do begin
if I = ACol then Continue;
if Columns[I].Visible then
W := W + Columns[I].Width;
end;
Columns[ACol].Width := Width - W;
end;
function TCustomGridHelper.FindHeader(AParent: TFmxObject): THeader;
var
I: Integer;
begin
for I := 0 to AParent.ChildrenCount - 1 do begin
if AParent.Children[I] is THeader then
Exit(THeader(AParent.Children[I]));
end;
for I := 0 to AParent.ChildrenCount - 1 do begin
result := FindHeader(AParent.Children[I]);
if result <> nil then
Exit(result);
end;
result := nil;
end;
function TCustomGridHelper.GetHeader: THeader;
begin
Result := FindHeader(Self);
end;