Текст в таблице разными цветами в Delphi

  • Автор темы AntiFazer
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

AntiFazer

Я делаю дипломный проект для психофизиологического отбора водителей транспортных средств. Делаю на Delphi. Все сделал, только вот незнаю как сделать тест на скорость переключения внимания. В тесте нужно что бы формировалась таблица Шульте-Платонова. Это таблица 7*7, в ячейках черные числа 1-25 и красные числа 1-24.
Если кто-нибудь знает подскажите как мне сделать одни числа в таблице красными а другие черными. Вроде бы отдельных настроек для каждой ячейки по font нету. Font общий для всей таблицы. Или может надо использовать DrawGrid с рисованием чисел из картинок?
Заранее спасибо за ответ.
 
S

Silver Wind

Создай обработчик OnDrawCell и отрисовывай вручную так, как тебе необходимо. Вот примерно так:
Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with StringGrid1.Canvas do
begin
//Выбираем цвет текста
if odd(ACol+ARow)//<-это условие заменишь на свое
then Font.Color:=clRed
else Font.Color:=clBlack;
//Очищаем ячейку таблицы
FillRect(Rect);
//Выводим текст по середине ячейки
TextOut((Rect.Right +Rect.Left-TextWidth(StringGrid1.Cells[ACol,ARow])) div 2,
(Rect.Bottom+Rect.Top -TextHeight(StringGrid1.Cells[ACol,ARow])) div 2,
StringGrid1.Cells[ACol,ARow]);
end;
end;
Это все что тебе надо в минимальном варианте, можно добавить еще отрисовку сфокусированной ячейки другим цветом (проверять параметр State) - смотри в справке.
 
A

Ash_Comp

Столкнулся с подобной проблемкой. Правда она частично была решена. У меня код закрашивает ячейку в 1 из 3-х цветов в зависимости от значения параметра ini-файла. Вот код:
Код:
procedure TForm3.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
StringGrid1.Canvas.Pen.Color:=clBlack;//RGB(0,100,250);
StringGrid1.Canvas.Brush.Color:=clWhite;
case Ini.ReadInteger(Strings[ARow],'cd_kind',1) of
1,3,4,5,6: StringGrid1.Canvas.Brush.Color:=RGB(200,250,200);
2,7,8,9: StringGrid1.Canvas.Brush.Color:=RGB(200,200,250);
end; // of case
if Ini.ReadString(Strings[ARow],'have','')<>'' then
StringGrid1.Canvas.Brush.Color:=RGB(250,200,200);
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.TextRect(Rect,Rect.Left+10,Rect.Top+3,StringGrid1.Cells[ACol,ARow]);
end;
Всё работает, кроме корректного вывода текста поверх заливки ячейки. Цвет текста я задаю черным, а он частенько становится белым :( Кто-нибудь сталкивался? Какие предложения?
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!