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

Как в TStringGrid изменить цвет текста по условию?


Vasya

Вопрос

Как в TStringGrid изменить цвет текста по условию желательно без рисования самого текста в ячейке самостоятельно, т.е. только за счёт указания, каким цветом рисовать?

Или с рисованием текста, но тогда как его сделать абсолютно точно совпадающим (кроме цвета) с тем, что по-умолчанию выводится?

Изменено пользователем Vasya
Ссылка на комментарий

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

  • 0

Только с рисованием.

Используй GridDrawColumnCell

procedure TForm2.GridDrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates);
const
  HorzTextMargin = 2;
  VertTextMargin = 1;
var
  TextLayout: TTextLayout;
  TextRect: TRectF;
  el_id: Integer;
  i: Integer;
  el_type: Integer;
begin
  TextRect := Bounds;
  TextRect.Left := TextRect.Left + 1;
  TextRect.Bottom := TextRect.Bottom - 1;
  TextRect.Inflate(-HorzTextMargin, -VertTextMargin);
  if TGridDrawState.RowSelected in State then
    Canvas.Fill.Color := form1.Style.SelectCellColor
  else
    Canvas.Fill.Color := TAlphaColors.white;
  Canvas.FillRect(Bounds, 0, 0, AllCorners, 1);
  if Value.IsEmpty = false then
  begin
    TextLayout := TTextLayoutManager.DefaultTextLayout.Create;
    try
      TextLayout.BeginUpdate;
      try
        TextLayout.WordWrap := false;
        TextLayout.Opacity := Column.AbsoluteOpacity;

        TextLayout.HorizontalAlign := TTextalign.Leading;
        TextLayout.VerticalAlign := TTextalign.Center;
        TextLayout.Trimming := TTextTrimming.Character;
        TextLayout.TopLeft := TextRect.TopLeft;
        TextLayout.Text := Value.ToString;
        TextLayout.MaxSize := PointF(TextRect.Width, TextRect.Height);

            el_type := 0; //условие и т.д.
            if el_type = 0 then
              TextLayout.Color := form1.Style.OsveshenieColor
            else if el_type = 1 then
              TextLayout.Color := form1.Style.KlimatColor
            else if el_type = 2 then
              TextLayout.Color := form1.Style.BezopasnostColor
            else if el_type = 3 then
              TextLayout.Color := form1.Style.OhranaColor
            else if el_type = 4 then
              TextLayout.Color := form1.Style.UstroystvaColor
            else if el_type = 5 then
              TextLayout.Color := form1.Style.UpravlenieColor
            else if el_type = 6 then
              TextLayout.Color := form1.Style.WifiColor
            else if el_type = 7 then
              TextLayout.Color := form1.Style.DopColor;

        { Пользовательские настройки отрисовки }
        // TextLayout.Font.Family := 'Times New Roman';
        // TextLayout.Color := form1.Style.FontColor;
        TextLayout.Font.Size := form1.Style.FontSize;
        TextLayout.Font.Family := (Sender as TStringGrid).TextSettings.Font.Family;
      finally
        TextLayout.EndUpdate;
      end;
      TextLayout.RenderLayout(Canvas);
    finally
      TextLayout.DisposeOf;
    end;
  end;
end;

 

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

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

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

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

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

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

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

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

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

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

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

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