FireMonkey Gridコントロールを使用していますが、列を右揃えにする際に問題が継続しています。他のユーザー投稿から、私は新しいTColumnタイプを作成し、これにスタイルを適用しました(HorzAlign = taTrailingというテキスト)。理論的には、これが解決策だと思っていました。値は、OnGetValue関数によってGridコントロールに提供されます。Firemonkeyグリッドコントロール - 列を右揃えにする
しかし、最初は問題ないですが、バー/マウスホイールなどをスクロールすると、新しいTColumnタイプの列は以下のメソッド/コードを使用して正しく更新されないようです。これは、Gridのバグ/機能(または私がそれをやっている方法)である可能性があります。私は.AlAlignなどを試みました...;しかし役に立たない。グリッドを一列に戻す唯一の方法は、例えば列のサイズ変更を行うことです。これを正しく再描画しますか?
以下のコードは、2つの列、1つの標準のStringColumn、1つの新しいStringColNum(wuthの右揃えが適用された)という単純なTGridであることを示しています。 - これは、グリッドワークの基本要件であると評価されています。
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)); // Right Aligned column?
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:='Row '+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:='Row '+IntToStr(Row);
end;
end;
end;
end.
大切にしています。イアン
おかげでマイク - 私が探していた「完璧な答え」。本当のスーパースター..! – Ian