2

我有一个适用于 Windows 的 Firemonkey 桌面应用程序。我有一个TGrid通过可视化实时绑定TBindSourceDB组件填充的。我希望某些列的文本向右对齐,因为它们是数值。我已经尝试过:

  • onPainting事件
  • TTextCell通过数量获得控制权ColumnxRow
  • 对其进行类型转换并将TextAlignt属性设置为右侧

这些措施都没有使文本向右对齐。我试图在运行时设置它,但没有成功,TStyledControl将过程分配onApplyStyleLookupTTextCell.

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

4

1 回答 1

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;
于 2014-08-20T21:07:18.397 回答