FireMonkey XE5 - Livebinding - TGrid - Aligment текста ячейки

У меня есть приложение Firemonkey Desktop для Windows. у меня есть TGrid который я заполняю через визуальную привязку TBindSourceDB составная часть. Я хочу, чтобы у некоторых столбцов был текст, выровненный вправо, поскольку они являются числовыми значениями. Я пробовал через:

  • onPainting событие
  • получать TTextCell контроль по количеству ColumnxRow
  • Типирование и настройка TextAlignt собственность справа

Ни одна из этих мер не выравнивает текст вправо. Я попытался установить его во время выполнения, но безуспешно, получая TStyledControl и присвоение процедур onApplyStyleLookup из TTextCell,

Есть идеи по этому поводу? Приложение работает, но ничего не происходит. Тексты ячейки по-прежнему выровнены по левому краю.

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;
Другие вопросы по тегам