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;