// задаем параметры текста
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
Подскажите пожалуйста как выполнить выравнивание(для каждой ячейке свое) для того примера что показал Ярослав в своем примере?
Чтобы красные записи были справа, а зеленые слева.
И еще вопрос: Как задать цвет текста в другом столбце для каждой ячейки свой?Дублировать код или можно более компактно сделать?
Правильно ли я понял что для каждой ячейки нужно создавать отдельный TLayout?
Чтобы в итоге получить вот это.
Ну и еще один вопрос: Можно ли для компактности как-то вывести код отрисовки в отдельную процедуру а потом вызывать ее в событии?
Что-то вроде такого
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Ссылка на комментарий
4 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.