2014-08-20 5 views
2

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

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

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

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

ответ

1

Использование OnDrawColumnCell Событие.

Для столбцов, содержащих текстовые ячейки, информация о текстовом макете для каждой отдельной колонки назначается из свойства сетки TextSettings. Однако назначение выполняется до запуска события.

Самый простой и простой способ - просто получить доступ к макету для конкретного столбца с помощью помощника класса до того, как будет выполнен какой-либо чертеж.

DefaultDrawing Установите свойство сетки Ложный и вставьте следующий код:

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; 
+1

Он работал отлично. Мне просто пришлось добавить FMX.Textlayout в предложение Uses. Большое вам спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^