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

Тема в разделе "Delphi - FAQ", создана пользователем AntiFazer, 12 июн 2008.

Статус темы:
Закрыта.
  1. AntiFazer

    AntiFazer Гость

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

    Silver Wind Гость

    Создай обработчик OnDrawCell и отрисовывай вручную так, как тебе необходимо. Вот примерно так:
    Код (Text):
    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) - смотри в справке.
     
  3. AntiFazer

    AntiFazer Гость

  4. Ash_Comp

    Ash_Comp Гость

    Столкнулся с подобной проблемкой. Правда она частично была решена. У меня код закрашивает ячейку в 1 из 3-х цветов в зависимости от значения параметра ini-файла. Вот код:
    Код (Text):
    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;
    Всё работает, кроме корректного вывода текста поверх заливки ячейки. Цвет текста я задаю черным, а он частенько становится белым :( Кто-нибудь сталкивался? Какие предложения?
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей