2015-07-08 5 views
3

У меня есть сетка строк, связанная с FDMemTable, и когда я запускаю процедуру AutoSize (которую я добавил к ее помощнику класса), в первый раз все идеально.Заголовок автосогласования столбцов

После этого, когда я пытаюсь открыть FDMemTable, мой заголовок возвращается к размеру по умолчанию, но остальные строки остаются неизменными.

Моя процедура выглядит следующим образом:

procedure TStringGridHelper.AutoSizeCols; 
var 
    i, W, WMax: integer; 
    Column : Integer; 
begin 
    for Column := 0 to Self.ColumnCount-1 do 
    begin 
    if Self.ColumnByIndex(Column).Width > 0 then 
    begin 
     WMax := Round(Canvas.TextWidth(Self.ColumnByIndex(Column).Header)); 
     for i := 0 to (Self.RowCount - 1) do begin 
     W := Round(Canvas.TextWidth(Self.Cells[Column, i])); 
     if W > WMax then 
      WMax := W; 
     if WMax > SizeMax then 
     begin 
      WMax := SizeMax; 
      Break; 
     end; 
     end; 
     Self.ColumnByIndex(Column).Width := WMax + 10; 
    end; 
    end; 
end; 

Если изменить размер столбца вручную, возвращается в нормальное русло.

Я использую XE7 и его приложения, использующего Multi-Device (FireMonkey)

+0

Вы также попытались установить Self.ColWidths []? –

+0

ColWidths больше не существует –

ответ

0

Изменив FDMemTable (в любое поле), он вернулся к нормальной работе.

Я только что назвал свою процедуру заказа.

+0

это хак :) к сожалению, я не смог сделать «обход» после сравнения стандартной библиотеки Delphi XE7 и XE8 – Zam

0

Это выглядит как Delphi XE7 Update 1 ошибка.

На Delphi XE8 ваш код работает хорошо. enter image description here

В Delphi XE7 Update1 это выглядит странно. enter image description here

+0

oh ... perfect ... только то, что мне было нужно, только что изменилось на XE7 cuz. У меня нет корпоративного выпуска для XE8, и это происходит ... –