Интеграция графической панели с текстом в TStringGrid в Delphi 2010
Вопрос, поднятый пользователем, заключается в необходимости добавления графической панели в столбец TStringGrid в Delphi 2010. Для столбца под номером пять ("Five") необходимо отобразить горизонтальную панель navy blue, а также разместить на ней текст, центрированный по вертикали. Это требует использования настройки пользовательского рисования, так как стандартное поведение TStringGrid не предусматривает такой функционал.
Пошаговое руководство
Для реализации пользовательского рисования в TStringGrid необходимо переопределить метод OnDrawCell, который позволит изменить внешний вид ячеек при их рисовании.
Определите обработчик события OnDrawCell для вашего TStringGrid. Этот обработчик будет вызываться при рисовании каждой ячейки.
В обработчике проверьте, что текущая колонка - это та, для которой нужно рисовать графическую панель. В данном случае это пятая колонка.
Очистите ячейку, заполнив её фоновым цветом.
Определите размеры панели, исходя из процентного соотношения (например, 100% для максимального значения в ячейке).
Нарисуйте панель, используя заданный цвет.
Нарисуйте текст на панели, центрировав его вертикально.
Убедитесь, что все операции с графикой выполняются внутри клиппированной области, чтобы не затронуть другие ячейки.
Пример кода
procedure TForm1.grdMainDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
Progress: Single;
R: TRect;
Txt: String;
begin
with TStringGrid(Sender) do
if (ACol = 4) and (ARow >= FixedRows) then
begin
Progress := StrToFloatDef(Cells[ACol, ARow], 0) / 100;
Canvas.FillRect(Rect);
R := Rect;
R.Right := R.Left + Trunc((R.Right - R.Left) * Progress);
Canvas.Brush.Color := clNavy;
Canvas.Rectangle(R);
Txt := Cells[ACol, ARow] + '%';
Canvas.Brush.Style := bsClear;
IntersectClipRect(Canvas.Handle, R.Left, R.Top, R.Right, R.Bottom);
Canvas.Font.Color := clHighlightText;
DrawText(Canvas.Handle, PChar(Txt), -1, Rect, DT_SINGLELINE or
DT_CENTER or DT_VCENTER or DT_END_ELLIPSIS or DT_NOPREFIX);
SelectClipRgn(Canvas.Handle, 0);
ExcludeClipRect(Canvas.Handle, R.Left, R.Top, R.Right, R.Bottom);
Canvas.Font.Color := clWindowText;
DrawText(Canvas.Handle, PChar(Txt), -1, Rect, DT_SINGLELINE or
DT_CENTER or DT_VCENTER or DT_END_ELLIPSIS or DT_NOPREFIX);
SelectClipRgn(Canvas.Handle, 0);
end;
end;
Данный код предполагает, что в ячейке хранится строка, представляющая собой процентное значение. Это значение используется для определения размера панели.
Важные замечания
Не забудьте установить обработчик OnDrawCell для вашего TStringGrid.
Убедитесь, что значения в пятой колонке представлены в виде строк, содержащих процентные значения.
Фон панели должен быть залит до того, как начнётся рисование, чтобы скрыть текст по умолчанию.
Используйте различные цвета и стили, чтобы адаптировать код под ваш дизайн.
Следуя этим шагам, вы сможете интегрировать графическую панель с текстом в столбец TStringGrid в вашем приложении Delphi 2010.
Вопрос связан с необходимостью интеграции графической панели с текстом в столбец TStringGrid в среде разработки Delphi 2010, используя пользовательское рисование.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.