В основном компонент Stringgrid, используется для вывода строковой информации в свои ячейки. Но при написании программ очень часто возникает желание сделать их более удобными, выделяя отдельные столбцы, строки или области ячеек разными цветами илидобавлением рисунков в ячейки StringGrid. Средствами инспектора объектов эту задачу не выполнить. Отдельной формы настроек для этого, в компоненте тоже не предусмотрено.
Однако, эта задача легко разрешается программно. Для этого используется событие компонента OnDrawCell, срабатывающее при отрисовке каждой отдельной ячейки таблицы. Таким образом, если использовать свои условия назначения того или иного цвета, можно «раскрасить» таблицу, нужным образом.
Для этого в установленном компонент Stringgridназначаем событие OnDrawCell. В созданную процедуру добавляем следующий код, назначающий цвет ячейки и цвет шрифта текста, а так же отрисовывающий их:
procedure TForm1.MyStringGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
MyStringGrid.Canvas.Brush.Color := clBlue; // назначение цвета ячейки
MyStringGrid.Canvas.FillRect(Rect); // закрашивание ячейки выбранным цветом
MyStringGrid.Canvas.Font.Color := clWhite; // назначение цвета шрифта
MyStringGrid.Canvas.TextOut(Rect.Left, Rect.Top, MyStringGrid.Cells[ACol, ARow]); // отрисовка текста в ячейки выбранным
end;
Данный код закрасит все ячейки одним цветом.
Для выделения отдельных строк, столбцов или ячеек, следует пользоваться условиями:
procedure TForm1.MyStringGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
if (ACol > 0) and (ARow > 0) then begin // первый столбец и строку оставляем без изменений
if (ACol = 1) or (ACol = 3) then
MyStringGrid.Canvas.Brush.Color:=clBlue; // второй и четвертый столбец синим цветом
if (ACol = 2) or (ACol = 4) then
MyStringGrid.Canvas.Brush.Color:=clGreen; // третий и пятый - зеленым
if ARow = MyStringGrid.RowCount-1 then
MyStringGrid.Canvas.Brush.Color:=clRed; // последняя строка - красным
if gdFocused in State then
MyStringGrid.Canvas.Brush.Color:=clYellow; // текущая выделенная ячейка закрашивается желтым
MyStringGrid.Canvas.FillRect(Rect);
MyStringGrid.Canvas.Font.Color := clWhite;
MyStringGrid.Canvas.TextOut(Rect.Left, Rect.Top, MyStringGrid.Cells[ACol, ARow]);
end;
end;
В результате получим таблицу, ячейки которой будут иметь разные цвета. Следует отметить, что последовательность условий в данном случае перекрывает назначение цвета колонок последней строкой, поэтому она получается одного цвета.
Рисунок: «Раскрашенный» StringGrid
Если есть необходимость изменить цвет фиксированных ячеек, иногда может быть не удобно использовать условия проверки номеров строк и столбцов. Это может быть в случае, если фиксированными будут несколько строк или столбцов. Здесь стоит воспользоваться иным условием, проверяющим именно параметр фиксированности ячейки:
procedure TForm1.MyStringGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
if gdFixed in State then
MyStringGrid.Canvas.Brush.Color:=clBlue;
MyStringGrid.Canvas.FillRect(Rect);
MyStringGrid.Canvas.Font.Color := clWhite;
MyStringGrid.Canvas.TextOut(Rect.Left, Rect.Top, MyStringGrid.Cells[ACol, ARow]);
end;
Аналогично можно выделить сразу всю строку:
procedure TForm1.MyStringGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
if gdSelected in State then
MyStringGrid.Canvas.Brush.Color:=clBlue;
MyStringGrid.Canvas.FillRect(Rect);
MyStringGrid.Canvas.Font.Color := clWhite;
MyStringGrid.Canvas.TextOut(Rect.Left, Rect.Top, MyStringGrid.Cells[ACol, ARow]);
end;
Функция ForceDirectories в Delphi, описание и примеры
Функция CreateDir в Delphi, описание и примеры
Копирование, удаление, перемещение, переименование и проверка на наличие файла в Delphi
В комментариях запрещено публиковать рекламные материалы. Все сообщения оправляются на модерацию и будут опубликованы, если не нарушают правил сайта после проверки.