Перейти к содержанию
  • Регистрация
  • 0
Авторизация  
Aleks133

Цвет для ячеек, Выравнивание

Вопрос

Подскажите пожалуйста как выполнить выравнивание(для каждой ячейке свое) для того примера что показал Ярослав в своем примере?

 

Чтобы красные записи были справа, а зеленые слева.

 image.png.031dc815bc2b0157c0d1e1916aec55d0.png 

И еще вопрос: Как задать цвет текста в другом столбце для каждой ячейки свой?Дублировать код или можно более компактно сделать?

Правильно ли я понял что для каждой ячейки нужно создавать отдельный TLayout? 

Чтобы в итоге получить вот это.

image.png.ae836d12916118c2637db1b56c049939.png

Ну и еще один вопрос: Можно ли для компактности как-то вывести код отрисовки в отдельную процедуру а потом вызывать ее в событии?

Что-то вроде такого

implementation

procedure smena_cveta(TStringrid,TAlphaColors);  

...

а потом ее вызвать в событии

procedure TForm1.Grid2DrawColumnCell(Sender: TObject; const Canvas: TCanvas;

  const Column: TColumn; const Bounds: TRectF; const Row: Integer;

  const Value: TValue; const State: TGridDrawStates);

begin

procedure smena_cveta(stringgrid1.cells[1,Row], Red); 

end;

Еще пытаюсь делать по другому методу

// задаем параметры текста
    f := TFont.Create;
  f.Family := StringGrid1.TextSettings.Font.Family;
  f.Size := StringGrid1.TextSettings.Font.Size;
  f.Style := StringGrid1.TextSettings.Font.Style;
  // [TFontStyle.fsBold];
  Canvas.Font.Assign(f); // присваиваем канве параметры текста(как в гриде)
  if (StringGrid1.Cells[1, Row] = 'работа')  then  // условие 1
    Canvas.Fill.Color := TAlphaColors.Blueviolet // задаем цвет текста
  else
    Canvas.Fill.Color := TAlphaColors.Black; // цвет для всех других записей

  if (StringGrid1.Cells[1, Row] = 'бензин') then  // условие 2
    Canvas.Fill.Color := TAlphaColors.Blue // задаем цвет текста
  else
    Canvas.Fill.Color := TAlphaColors.Black; // цвет для всех других записей
   Canvas.FillText(Bounds, Value.AsString, False, 50, [],
    StringGrid1.TextSettings.HorzAlign, ttextalign.Center);
  // отрисовка текста по левому краю как в гриде
  f.Free;

Но в итоге закрашивается только текст "бензин"т.к он второе условие и перекрывает первое.

Я так понимаю нужна еще одна канва для второго условия?Но как ее внедрить в код?  

Заранее премного благодарен.

Изменено пользователем Aleks133

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

  • 0
43 минуты назад, Aleks133 сказал:

Но в итоге закрашивается только текст "бензин"т.к он второе условие и перекрывает первое

Попробуйте

if (StringGrid1.Cells[1, Row] = 'работа')  then  // условие 1
    Canvas.Fill.Color := TAlphaColors.Blueviolet // задаем цвет текста
  else
   if (StringGrid1.Cells[1, Row] = 'бензин') then  // условие 2
    Canvas.Fill.Color := TAlphaColors.Blue // задаем цвет текста
  else
    Canvas.Fill.Color := TAlphaColors.Black; // цвет для всех других записей

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Вы гений!))Спасибо!Весь день экспериментирую . 

image.png.b9b77a6bd44078dcb8e3d3d1c9545e14.png

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

Условие есть

for i := 1 to length(ansilowercase(Grid.Cells[1, Row])) do
    // если столбец 2 и строка 1
    if (TOpenColumn(Column).Index = 1) and (Row = 1) and
    // и если символ + найден на позиции i
      (pos('+', ansilowercase(Grid.Cells[1, Row])) = i) then

но куда его подставить не пойму, попробую конечно поэкспериментировать  по такому же принципу как и Вы показали, но мне кажется будет мешать тот факт что цвет меняется для всей строки а не для определенного столбца. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

if (TOpenColumn(Column).Index = 1) then
  if (StringGrid1.Cells[1, Row] = 'работа')  then  // условие 1
    Canvas.Fill.Color := TAlphaColors.Blueviolet // задаем цвет текста
  else
   if (StringGrid1.Cells[1, Row] = 'бензин') then  // условие 2
    Canvas.Fill.Color := TAlphaColors.Blue    // задаем цвет текста
  else
    Canvas.Fill.Color := TAlphaColors.Black; // цвет для всех других записей

  if (TOpenColumn(Column).Index = 2) then
   if (StringGrid1.Cells[2, Row] = '-850')  then  // условие 1
    Canvas.Fill.Color := TAlphaColors.Red // задаем цвет текста
  else
   if (StringGrid1.Cells[2, Row] = '3000') then  // условие 2
    Canvas.Fill.Color := TAlphaColors.Green    // задаем цвет текста
  else
    Canvas.Fill.Color := TAlphaColors.Black; // цвет для всех других записей

image.png.97cce51d87d558c3a1b50508f4149804.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 17.05.2019 в 22:55, Aleks133 сказал:

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

 

//Тогда попробуйте задать общий цвет

  Canvas.Fill.Color := TAlphaColors.Black; // цвет для всех других записей

//а потом определится с другими

if (TOpenColumn(Column).Index = 1) then
  if (StringGrid1.Cells[1, Row] = 'работа')  then  // условие 1
    Canvas.Fill.Color := TAlphaColors.Blueviolet // задаем цвет текста
  else
   if (StringGrid1.Cells[1, Row] = 'бензин') then  // условие 2
    Canvas.Fill.Color := TAlphaColors.Blue;    // задаем цвет текста
 

if (TOpenColumn(Column).Index = 2) then
   if (StringGrid1.Cells[2, Row] = '-850')  then  // условие 1
    Canvas.Fill.Color := TAlphaColors.Red // задаем цвет текста
  else
   if (StringGrid1.Cells[2, Row] = '3000') then  // условие 2
    Canvas.Fill.Color := TAlphaColors.Green;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

Авторизация  

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

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

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