Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#5

AW: FMX TStringgrid und Dataset

  Alt 29. Aug 2012, 15:17
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat