Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Текст в таблице разными цветами в Delphi
Форум программистов > Системное программирование > Delphi и Pascal > Delphi - FAQ
AntiFazer
Я делаю дипломный проект для психофизиологического отбора водителей транспортных средств. Делаю на Delphi. Все сделал, только вот незнаю как сделать тест на скорость переключения внимания. В тесте нужно что бы формировалась таблица Шульте-Платонова. Это таблица 7*7, в ячейках черные числа 1-25 и красные числа 1-24.
Если кто-нибудь знает подскажите как мне сделать одни числа в таблице красными а другие черными. Вроде бы отдельных настроек для каждой ячейки по font нету. Font общий для всей таблицы. Или может надо использовать DrawGrid с рисованием чисел из картинок?
Заранее спасибо за ответ.
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) - смотри в справке.
AntiFazer
Спс.
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;

Всё работает, кроме корректного вывода текста поверх заливки ячейки. Цвет текста я задаю черным, а он частенько становится белым sad.gif Кто-нибудь сталкивался? Какие предложения?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2008 IPS, Inc.