FireMonkey XE5 - Livebinding - TGrid - Cell text aligment

天大地大妈咪最大 提交于 2019-12-22 12:29:28

问题


I have a Firemonkey Desktop Application for Windows. I have a TGrid which I populate through a visual livebinding TBindSourceDB component. I want some columns to have text aligned to the right, as they are numerical values. I have tried through:

  • onPainting event
  • getting the TTextCell control by number of ColumnxRow
  • typecasting it and setting TextAlignt property to the right

None of those measures align the text to the right. I have tried to set it at runtime, unsuccessfully though, getting the TStyledControl and assigning procedures to the onApplyStyleLookup of the TTextCell.

Any ideas on it? The App runs, but nothing happens. The cell texts are still left aligned.


回答1:


Use the OnDrawColumnCell Event.

For columns containing text cells, the text layout information for each individual Column is assigned from the TextSettings property of the grid. However, the assignment is performed prior to the event firing.

The best and simplest way is to just directly access the layout for a specific column via a class helper before any drawing takes place.

Set the DefaultDrawing property of the grid to False and paste the following code:

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;


来源:https://stackoverflow.com/questions/25410901/firemonkey-xe5-livebinding-tgrid-cell-text-aligment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!