我有一个适用于Windows的Firemonkey桌面应用程序。我有一个TGrid
,我通过一个直观的实时绑定TBindSourceDB
组件填充。我想要一些列将文本对齐到右边,因为它们是数值。我试过了:
onPainting
活动TTextCell
ColumnxRow
控件
TextAlignt
属性设置为右侧这些措施都没有使文本与右对齐。我试图在运行时设置它,但未成功,获取TStyledControl
并将过程分配给onApplyStyleLookup
的{{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;