6 Stimmen

Firemonkey Grid Steuerung - Eine Spalte rechts ausrichten

Ich verwende die FireMonkey-Grid-Steuerung, habe aber ein fortlaufendes Problem beim Versuch, eine Spalte rechts auszurichten. Aus den Beiträgen anderer Benutzer habe ich es geschafft, einen neuen TColumn-Typ zu erstellen, einen Stil darauf anzuwenden (Text als HorzAlign=taTrailing) und theoretisch - gedacht, dass dies die Lösung wäre. Die Werte werden von der OnGetValue-Funktion an die Grid-Steuerung übergeben.

Das Problem ist jedoch, dass obwohl es zuerst gut aussieht, wenn Sie die Leiste/Mausrad etc. scrollen, die neue Spalte vom Typ TColumn nicht korrekt aktualisiert erscheint, wenn die nachstehende Methode/code verwendet wird. Es könnte ein Fehler/eine Eigenschaft des Grids sein (oder die Art und Weise, wie ich es mache). Ich habe .Realign etc... versucht; aber ohne Erfolg. Der einzige Weg, um das Raster wieder in Linie zu bringen, besteht darin, z.B. eine Spaltenänderung vorzunehmen - was dann korrekt neu zeichnet?

Der folgende Code zeigt, dass es sich um ein einfaches TGrid mit 2 Spalten handelt, eine Standard-StringColumn und eine meine neue StringColNum (mit rechter Ausrichtung angewendet). - Jede Hilfe ist willkommen, da dies eine grundlegende Anforderung an jede Gitterarbeit ist.

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Objects, FMX.Grid,
  FMX.Layouts, FMX.Edit;

type
  TForm1 = class(TForm)
    Grid1: TGrid;
    Button1: TButton;
    StyleBook1: TStyleBook;
    procedure Grid1GetValue(Sender: TObject; const Col, Row: Integer;
      var Value: Variant);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TStringColNum = class(TStringColumn)
  private
    function CreateCellControl: TStyledControl; override;
  public
    constructor Create(AOwner: TComponent); override;
  published
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

constructor TStringColNum.Create(AOwner: TComponent);
begin
  inherited;
end;

function TStringColNum.CreateCellControl: TStyledControl;
var
  t:TEdit;
begin
  Result:=TStringColNum.Create(Self);
  Result.StyleLookup := 'textrightalign';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Grid1.AddObject(TStringColumn.Create(Self));
  Grid1.AddObject(TStringColNum.Create(Self)); // Rechts ausgerichtete Spalte?

  Grid1.RowCount:=5000;
  Grid1.ShowScrollBars:=True;
end;

procedure TForm1.Grid1GetValue(Sender: TObject; const Col, Row: Integer;
  var Value: Variant);
var
  cell: TStyledControl;
  t: TText;
begin
  if Col=0 then
    Value='Zeile '+IntToStr(Row);

  if Col=1 then
    begin
      cell := Grid1.Columns[Col].CellControlByRow(Row);
      if Assigned(cell) then
        begin
          t := (Cell.FindStyleResource('text') as TText);
          if Assigned(t) then
            t.Text='Zeile '+IntToStr(Row);
        end;
    end;
end;

end.

Mit freundlichen Grüßen. Ian.

0voto

suatDMK 2 Punkte 11

Eine weitere Lösung:

Grid1.ApplyStyleLookup();
MyCol1.DefaultTextSettings.HorzAlign:=TTextAlign.taCenter;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X