Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2013, 17:42   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Закраска строк в Tstringgrid

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

вот мой код
Код:
procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if (gdFocused in State) then
  begin
    StringGrid1.Canvas.Brush.Color := clBlue;
    StringGrid1.Canvas.Font.Color := clBlack;
  end
  else StringGrid1.canvas.brush.Color := $CCFFCC;
  if (ACol >= 0) and (ARow >= 2) then
  begin
    StringGrid1.canvas.fillRect(rect);
    StringGrid1.canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
  end;
  if (ARow < 2) then
  begin
    StringGrid1.canvas.brush.Color := clAqua;
    StringGrid1.Canvas.Font.Color := clblack;
    StringGrid1.canvas.fillRect(rect);
    StringGrid1.canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
  end;

end;
выкладываю скрины программы как есть,и как надо, помогите кто знает как сделать, пожалуйста
Изображения
Тип файла: jpg как есть.jpg (32.6 Кб, 146 просмотров)
Тип файла: jpg как надо.jpg (41.0 Кб, 144 просмотров)
from dark to light)

Последний раз редактировалось Алексей_2012; 15.12.2013 в 17:46.
Алексей_2012 вне форума Ответить с цитированием
Старый 15.12.2013, 19:08   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
with StringGrid1 do begin
 if (arow>FixedRows) then begin
  if (arow mod 2)=0 then canvas.brush.Color := clGreen
  else canvas.brush.Color := clYellow;
  Тут вызываем закраску.
 end;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.12.2013, 20:03   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; // разкраска таблицы для более приятного восприятия данных
  Rect: TRect; State: TGridDrawState);
begin
  with StringGrid1.Canvas do
  begin
    if (gdFocused in State) then // для одной ячейки
    begin
    Brush.Color := clwhite;
    Font.Color := clBlack;
    end
    else brush.Color := $CCFFCC; //иначе закрашиваем всю таблицу, кроме заголовков
    if (ACol >= 0) and (ARow >= 2) then
    begin
     fillRect(rect); // применяем изменения
      TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
    end;
    if (ARow < 2) then // после раскрашиваем заголовки
    begin
     brush.Color := clAqua;
    Font.Color := clblack;
     fillRect(rect); // применяем изменения
     TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
    end;
    if (arow > StringGrid1.FixedRows) then
     begin
      if (arow mod 2) <> 0 then
      begin brush.Color := clYellow;
       Font.Color := clblack;
       fillRect(rect);
      end;
    end;
  end;
end;
Спасибо, все работает, но не видно данных, которые под оранжевыми полосками(((
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 15.12.2013, 20:04   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Я бы заменил StringGrid на VirtualStringTree. ИМХО toExtendedFocus запросто делает его StringGrid'ом, а toRowSelect делает его ListView. До кучи можно дерево строить в любом случае...

Относительно прост в использовании, события, тысячи их..

VirtualDrawTree вообще мощная вещь.
Человек_Борща вне форума Ответить с цитированием
Старый 15.12.2013, 20:12   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

мощная, но нужен именно Tstringgrid, по учебе
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 15.12.2013, 21:24   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не видно данных
А где отрисовка текста в ячейках?
Я бы вообще TextOut вынес в конец обработчика, чтоб он всегда выполнялся не зависимо от типа заливки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закраска диаграммы armagedon_atyrau Microsoft Office Excel 0 15.06.2010 12:48
Закраска Chyvis Помощь студентам 0 13.01.2010 09:31
Закраска выделенный строк combobox'а без csOwnerDrawFixed dplz Компоненты Delphi 0 17.10.2009 15:02
Сортировка строк в TStringGrid dimon000 Общие вопросы Delphi 6 03.07.2008 12:59