delphi – Firemonkey网格控件 – 将列对齐到右侧

delphi – Firemonkey网格控件 – 将列对齐到右侧,第1张

概述我正在使用FireMonkey Grid控件,但在尝试右对齐列时遇到了一个持续的问题.从其他用户发布的帖子中,我设法创建了一个新的TColumn类型,将一个样式应用于此(文本为HorzAlign = taTrailing)并且在理论上 – 认为这将是解决方案.这些值由OnGetValue函数提供给Grid控件. 但问题是,虽然一开始它看起来不错,但是如果你滚动条形/鼠标滚轮等,新的TColumn类 我正在使用FireMonkey GrID控件,但在尝试右对齐列时遇到了一个持续的问题.从其他用户发布的帖子中,我设法创建了一个新的TColumn类型,将一个样式应用于此(文本为HorzAlign = taTrailing)并且在理论上 – 认为这将是解决方案.这些值由OnGetValue函数提供给GrID控件.

但问题是,虽然一开始它看起来不错,但是如果你滚动条形/鼠标滚轮等,新的TColumn类型列似乎没有使用下面的方法/代码正确刷新.它可能是网格的错误/特征(或者我正在做的方式).我试过.ReAlign等…;但无济于事.让网格重新排列的唯一方法是执行列调整大小 – 然后重新正确重绘?

下面的代码显示它是一个简单的TGrID,有2个cols,1个标准的StringColumn和1个我的新StringColNum(应用了wuth右对齐). – 任何帮助,因为这是任何网格工作的基本要求.

unit Unit1;interfaceuses  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.

亲切的问候.伊恩.

解决方法 所有这些都提醒我,我还没有写关于此的博文.

无论如何,网格单元可以是TStyledControl的任何后代(基本上任何控件).文本单元格的默认值是TTextCell,它只是一个TEdit.作为TEdit意味着更改对齐非常简单:只需更改TextAlign属性即可.不需要乱七八糟的样式(除非你真的想要).

您的列需要在CreateCellControl方法中创建单元格.您实际上是在创建列的实例,这是您的主要问题.

你不需要为你的列创建方法(它什么都不做),所以删除它(除非你需要其他东西)并修改你的CreateCellControl.

function TStringColNum.CreateCellControl: TStyledControl;begin  Result:=inherited;  TTextCell(Result).TextAlign := taTrailing;end;

最后,您的GetValue事件处理程序只需要返回值:

procedure TForm1.GrID1GetValue(Sender: TObject; const Col,Row: Integer;  var Value: Variant);begin  if Col=0 then    Value:='Row '+IntToStr(Row);  if Col=1 then    Value := 'Row '+IntToStr(Row);end;
总结

以上是内存溢出为你收集整理的delphi – Firemonkey网格控件 – 将列对齐到右侧全部内容,希望文章能够帮你解决delphi – Firemonkey网格控件 – 将列对齐到右侧所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1273458.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存