FireMonkey XE5 - Livebinding - 网格 - 单元格文本对齐

时间:2014-08-20 17:25:33

标签: delphi firemonkey delphi-xe5 tgrid

我有一个适用于Windows的Firemonkey桌面应用程序。我有一个TGrid,我通过一个直观的实时绑定TBindSourceDB组件填充。我想要一些列将文本对齐到右边,因为它们是数值。我试过了:

  • onPainting活动
  • TTextCell
  • 的数量获取ColumnxRow控件
  • 对其进行类型转换并将TextAlignt属性设置为右侧

这些措施都没有使文本与右对齐。我试图在运行时设置它,但未成功,获取TStyledControl并将过程分配给onApplyStyleLookup的{​​{1}}。

有什么想法吗?该应用程序运行,但没有任何反应。单元格文本仍然保持对齐。

1 个答案:

答案 0 :(得分:1)

使用OnDrawColumnCell事件。

对于包含文本单元格的列,每个列的文本布局信息都是从网格的TextSettings属性中指定的。但是,分配是在事件触发之前执行的。

最好和最简单的方法是在进行任何绘图之前,通过类助手直接访问特定列的布局。

将网格的DefaultDrawing属性设置为 False 并粘贴以下代码:

interface
  type
    TColumnHelper = class helper for FMX.Grid.TColumn
        function getTextLayout: TTextLayout;
    end;

implementation

{ TColumnHelper }    
function TColumnHelper.getTextLayout: TTextLayout;
begin
  Result := Self.FDrawLayout;
end;

{ OnDrawColumnCell }
procedure GridDrawColumnCell(Sender: TObject; const Canvas: TCanvas;
  const Column: TColumn; const Bounds: TRectF; const Row: Integer;
  const Value: TValue; const State: TGridDrawStates);
begin

  { change text layout info prior to default drawing }
  if Column.Header = 'Numerical Column' then
    Column.getTextLayout.HorizontalAlign := TTextAlign.Trailing
  else
    Column.getTextLayout.HorizontalAlign := TGrid(Sender).TextSettings.HorzAlign;

  { perform default drawing }
  TGrid(Sender).DefaultDrawColumnCell(Canvas, Column, Bounds, Row, Value, State);
end;