Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как изменить цвет отмеченных записей в DBGrid

Delphi , Компоненты и Классы , TDBGrid

Как изменить цвет отмеченных записей в DBGrid


Сидят два пьяных интернетчика вечером на скамейке, после посещения интернет-кафе. Первый второму:
- Привет, как дела двоеточие, две закрывающих скобки.
Второй долго ищет перед собой клаву, потом, подумав говорит:
- Нормально, а у тя?
Смотрит, а первый уже лежит в дауне под скамейкой.. :( Второй, еще подумав, добавляет:
- Сенд тсру сервер!

Например, так:


DefaultDrawing := False;
...

procedure TfrmCard.GridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  index: Integer;
  Marked, Selected: Boolean;
begin
  Marked := False;
  if (dgMultiSelect in Grid.Options) and (THackDBGrid(Grid).Datalink.Active) then
    Marked := Grid.SelectedRows.Find(THackDBGrid(Grid).Datalink.Datasource.Dataset.Bookmark, index);
  Selected := (THackDBGrid(Grid).Datalink.Active) and (Grid.Row-1 = THackDBGrid(Grid).Datalink.ActiveRecord);

  if Marked then
  begin
    Grid.Canvas.Brush.Color:=$DFEFDF;;
    Grid.Canvas.Font.Color :=clBlack;
  end;

  if Selected then
  begin
    Grid.Canvas.Brush.Color:=$FFFBF0;
    Grid.Canvas.Font.Color :=clBlack;
    if Marked then
      Grid.Canvas.Brush.Color:=$EFE3DF; { $8F8A30 }
  end;
  Grid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

где:


THackDBGrid = class(TDBGrid)
  property DataLink;
  property UpdateLock;
end;

Для изменения цвета отмеченных записей в DBGrid можно использовать событие GridDrawColumnCell. Это событие вызывается для каждого ячейки, которая должна быть нарисована. Вы можете проверить, является ли запись отмеченной или выбранной, и установить цвет кисти соответственно.

Вот обновленная версия вашего кода:

procedure TfrmCard.GridDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  index: Integer;
  Marked, Selected: Boolean;
begin
  Marked := False;
  if (dgMultiSelect in Grid.Options) and (THackDBGrid(Grid).DataLink.Active) then
    Marked := Grid.SelectedRows.Find(THackDBGrid(Grid).DataLink.Datasource.Dataset.Bookmark, index);
  Selected := (THackDBGrid(Grid).DataLink.Active) and (Grid.Row - 1 = THackDBGrid(Grid).DataLink.ActiveRecord);

  if Marked then
  begin
    Grid.Canvas.Brush.Color := $DFEFDF; // цвет отмеченной записи
    Grid.Canvas.Font.Color := clBlack;
  end
  else if Selected then
  begin
    Grid.Canvas.Brush.Color := $FFFBF0; // цвет выбранной записи
    Grid.Canvas.Font.Color := clBlack;
  end;

  Grid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

В этом коде мы проверяем, является ли запись отмеченной или выбранной, и устанавливаем цвет кисти соответственно. Мы используем метод Grid.SelectedRows.Find для поиска маркера текущей выбранной строки.

Вы можете изменить цвета, присваивая новые значения переменной Grid.Canvas.Brush.Color.

Обратите внимание, что вам нужно создать экземпляр класса THackDBGrid и присвоить его вашему компоненту DBGrid для того, чтобы этот код работал.

Изменение цвета отмеченных записей в DBGrid может быть достигнуто с помощью процедуры GridDrawColumnCell, которая изменяет цвет текста и фона ячейки в зависимости от ее статуса (отмеченной или выбранной).


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TDBGrid ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 14:48:38/0.0052847862243652/1