Перейти к содержанию
Fire Monkey от А до Я
  • 0

[Отклонение] Не перерисовываются границы в TGrid


PandoraBoxes

Вопрос

Здравствуйте, помогите пожалуйста с проблемой, у меня в проекте RAD XE7 по какой-то причине не перерисовываются границы у ячеек при создании\удалении столбцов.
 
Например: я создаю несколько столбцов так чтобы они были в рамках прямоугольника таблицы, + один столбец за видимой частью, чтобы его просмотреть нужно провести скроллом и далее чудеса которые видны на скрине (во вложении), линии на существующих ячейках отсутствуют.
Грешным делом я подумал на стилизацию которую я установил при помощи StyleBook, но оказалось что и на стандартном окне без стилей тоже самое.
 
Ещё когда например в видимой части удаляется столбец, то на его месте все ещё остаются границы от прежних ячеек.
 
Собственно как перерисовывать таблицу? процедуры UpdateColumns и RePaint не помогают

post-516-0-32691000-1417671880.png

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Администраторы

Добрый день,

 

Ошибку завел в трекере. Временный Workaround:

  1. Открыть файл FMX.Grid.pas
  2. Найти TCustomGrid.DoContentPaint
  3. Предположительно 2292 строчка. Найти код:
          if TGridOption.RowLines in Options then
          begin
            W := Content.Width - 1;
            P := TPointF.Create(0,  TopRow * FRowHeight);
            P := Content.LocalToAbsolute(P);
            P := TControl(Sender).AbsoluteToLocal(P);
            P.Offset(0.5, -0.5);
            for I := 0 to VisibleRows do  // no -1
            begin
              Canvas.DrawLine(P, PointF(P.X + W, P.Y), LAbsoluteOpacity);
              P.Offset(0, FRowHeight);
            end;
          end;
    

    Добавить после P.Offset(0.5, -0.5)

    P.X := P.X + ViewportPosition.X;
    

    Добавить исправленный файл в ваш проект.

Ссылка на комментарий
  • 0

Спасибо Вам, ваш совет помог для отрисовки границ, а где можно подправить код, чтобы альтернативные(те что чередуются нечетные белые, четные серые) строки тоже вырисовывались?

Ссылка на комментарий
  • 0
  • Администраторы

В том же файле находим TCustomGrid.DrawAlternatingBackground (предположительно 2138 стрчока)

procedure TCustomGrid.DrawAlternatingBackground(const DrawingContent: TControl; const Canvas: TCanvas);
var
  I: Integer;
  P: TPointF;
begin
  if TGridOption.AlternatingRowBackground in FOptions then
    for I := 0 to VisibleRows - 1 do
    begin
      if Odd(TopRow + I) then
      begin
        P := Content.LocalToAbsolute(PointF(0, (TopRow + I) * FRowHeight));
        P := DrawingContent.AbsoluteToLocal(P);
        Canvas.FillRect(RectF(P.X, P.Y, P.X + Content.Width,
          P.Y + FRowHeight), 0, 0, [], AbsoluteOpacity, FOddFill);
      end;
    end; 

Меняем 2150 строчку на:

procedure TCustomGrid.DrawAlternatingBackground(const DrawingContent: TControl; const Canvas: TCanvas);
var
  I: Integer;
  P: TPointF;
begin
  if TGridOption.AlternatingRowBackground in FOptions then
    for I := 0 to VisibleRows - 1 do
    begin
      if Odd(TopRow + I) then
      begin
        P := Content.LocalToAbsolute(PointF(0, (TopRow + I) * FRowHeight));
        P := DrawingContent.AbsoluteToLocal(P);
        Canvas.FillRect(RectF(P.X + ViewportPosition.X, P.Y, P.X + Content.Width  + ViewportPosition.X,
          P.Y + FRowHeight), 0, 0, [], AbsoluteOpacity, FOddFill); // <-- добавляем смещение ViewportPosition
      end;
    end;
end;
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...