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

Проблема при отрисовке DrawColumnCell под osX


HelleR

Вопрос

Добрый день. 
Подскажите пожалуйста, есть приложение fmx для win и osX . 
Надо немного изменить текст на TStringGrid, например вывести текст более серым.
На Windows все выглядит хорошо, но на osX исчезает прозрачность области под текстом.
На фото слева win справа osX, если отключить опцию чередования  строк, проблема остается.

if Column = sc_Number then
  begin
    OldColor:= 0;
    TextRect:= Bounds;
    TextRect.Left := TextRect.Left;
    TextRect.Bottom := TextRect.Bottom;
    TextRect.Inflate(-HorzTextMargin, -VertTextMargin);
	
    //Canvas.FillRect(TextRect, 0, 0, AllCorners, 1);
    // При очистке области, если второй параметр 0 или отсутствует, должен закрасится цветом до перерисовки
    Canvas.ClearRect(TextRect, OldColor);

    TextLayout := TTextLayoutManager.DefaultTextLayout.Create;
    try
      TextLayout.BeginUpdate;
      try
        TextLayout.WordWrap:= False;
        TextLayout.Opacity:= Column.AbsoluteOpacity;
        TextLayout.Trimming := TTextTrimming.Character;
        TextLayout.TopLeft := TextRect.TopLeft;
        TextLayout.Text := Value.ToString;
        TextLayout.MaxSize:= PointF(TextRect.Width, TextRect.Height);

        TextLayout.Font.Family := 'Arial';
        TextLayout.Font.Size:= 12;
        TextLayout.Color:= claGray;
      finally
        TextLayout.EndUpdate;
      end;
      TextLayout.RenderLayout(Canvas);
    finally
      TextLayout.Free;
    end;
  end;

При очистке области,  [ Canvas.ClearRect(TextRect, OldColor) ] если второй параметр 0 или отсутствует, должен закрасится цветом до перерисовки. Под Windows все работает нормально, но osX ставит туда другой цвет. Можно вручную указать цвет, но если стилей будет несколько, то прийдется это делать под каждый стиль. 

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

   

grid.png

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

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

  • 0

Спасибо за ответ. Попробовал по вашему совету:

Canvas.FillText(TextRect, Value.ToString, false,  100, [TFillTextFlag.RightToLeft],TTextAlign.Center, TTextAlign.Leading);

Не понятно зачем Opacity = 100 в примере helpe

В данном случае все работало, как и прежде. Проблема осталась прежняя, написать новую надпись получается, в любом стиле и цвете, а вот старую область затереть, корректно не получалось:

Canvas.ClearRect(TextRect, 0);

На Windows работает как надо, на маке рисует бекраунд непонятного цвета. 

FillRect под Win тоже все красиво затирает прежним цветом, но под Mac тоже цвет неправильный.

Пробовал обработку DrawColumnBackground - все также. 

Решил, убрав DefaultDrawing в false; и перерисовав все ячейки, не трогая отрисовку фона.

Теперь все ок, и при смене стилей и на всех платформах. 

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

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

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

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

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

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

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

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

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

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...