Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/74: Рейтинг темы: голосов - 74, средняя оценка - 4.95
4 / 4 / 2
Регистрация: 10.05.2008
Сообщений: 22

Раскрасить строки DbGrid

14.05.2008, 19:35. Показов 15839. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как выделить строки с одинаковым содиржимиым допустим есть следйющие строки

1
2
2
7
8
9
5
8

Возможно ли раскрасить одинаковые строки Dbgrid в соответствующие оттенки цветов. Вот нашел такой пример пытался переработать, перебирал с помощю цыклов значения но чего не получилось кроми зацикливания и бесконечыной раскраски.
Здесь мы будем использовать событие "OnDrawColumnCell". Следующий пример разукрашивает ячейки колонки "Status" когда значение НЕ равно "a".
Если Вы хотите закрасить целую линию, то достаточно удалить условие "If..." (смотрите ниже)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; 
DataCol: Integer; Column: TColumn; 
State: TGridDrawState); 
const 
clPaleGreen = TColor($CCFFCC); 
clPaleRed = TColor($CCCCFF); 
begin 
 
If Column.FieldName = 'Status' then //Удалите эту линию, если хотете закрасить целую линию 
 
If Column.Field.Dataset.FieldbyName('Status').AsStrin g <> 'a' 
then 
If (gdFocused in State) //имеет ли ячейка фокус? 
then dbgrid1.canvas.brush.color := clBlack //имеет фокус 
else dbgrid1.canvas.brush.color := clPaleGreen; //не имеет фокуса 
 
//Теперь давайте закрасим ячейку используя стандартный метод: 
dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column, State) 
end;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2008, 19:35
Ответы с готовыми решениями:

Вывод на печать одной строки из DBGrid
Здравствуйте. Подскажите как мне вывести на печать одну выбранную строку из DBGrid ???

Как при нажатии на Button изменить цвет строки в DBGrid?
Как при нажатии на Button изменить цвет строки в DBGrid. К примеру есть условие если первый столбик в строе равен 1 то изменить цвет.

Раскрасить элементы синим цветом
Заполнить одномерный массив из 15 элементов целыми числами. Раскрасить при выводе синим цветом четные элементы массива, если они стоят...

1
4 / 4 / 2
Регистрация: 10.05.2008
Сообщений: 22
16.05.2008, 00:13  [ТС]
1)Вот что наработал подскажите дальше, привожу полностью текст из двух постов а то видимо не понятно объяснил что хочу в первом посте, судя по ответам на другом форуме.
Подскажите как доработать програмуя сделал так
в результате запросов я получаю эти числа котрые надо выделить и присваеваю их переменной вариант.
тоесть если есть столбец с числами 1,2,2,1,5,7,12,4 то я получу переменную "а" типа вариант и в ней я так понимаю содержаться числа 2 и 1.
Как впихнуть уже известные значения ячейки которую надо красить в саму процедуру не знаю. Вторая процедура по клику кнопки создает этот вариант "а" .
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
clPaleGreen = TColor($CCCCFF);
clPaleRed = TColor($CCCCFF);
begin
for i:=0 to (Длина масива) do 
begin
if Column.Field.DataSet.FieldByName('Позиция').AsInte ger=a[i] then
if (gdFocused in State) then
dbgrid1.canvas.brush.color := clBlack //имеет фокус
else
dbgrid1.canvas.brush.color := clPaleGreen; //не имеет фокуса
dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column, State);
end;
end;
 
procedure TForm1.Button12Click(Sender: TObject);
var a:Variant;
begin
QExecOpenSQL(1, 1, 'select nt from draw2 where kol>1'); // Тут мы имеем результат запроса виде таблицы в которой имена одинаковы чисел: 1 2
a:=DataModule1.Query1.FieldByName('nt').AsVariant; 
// Button1.Caption:=VarToStr(a);
end;
1. У меня не получается преобразовать "а" в вариантный масив и загнать его в процедуру раскраски.
2. Расположить запрос внутри процедуры
TForm1.DBGrid1DrawColumnCell тоже не льзя ругаеться. Ghjwtlehe получение масива одинаковых чисел, надо повесить на кокое то событие связанное с изменением содержимого DBGRid, которое наступает раньше чем его раскраска. А потом загнать полученый масив a[i]-ых в процедуру DBGrid1DrawColumnCell для раскраски этих строк.

2)Сложность не в раскраски ячейки с номером "2", а сложность в том чтобы узнать что ячеек с номером "2" встречаеться больше чем 1 раз и тогда их раскрасить. Тоесть два столбца полученых в врезультате запроса Qeri1 отображаються в ДБГриде:
1 Квдрат 25*25
2 Диаметр Д16
2 Диаметр Д25 (В одной поззиции только один инструмент)
17 Прям 15*123
5 Круг 14

Во 2-ой позици стоит два разных инструмента этого не может быть. значит надо выделить эти строки красным. вот и проблема узнать строки с каким значением надо выделить.
Я их узнаю в результате проведения запросов, в итоге выполнения запроса через Qery2, я имею столбец одинаковых (повторяющихся) значений тоесть резултат запроса таблица в данном случае только одно число 2. Если повторяющихся чисел больше то соответственно столбец содержит эти повторяющиеся числа
2
23
14

Можно тупо вывести ссобщение в Label что мол в позициях 2, 23, 14 инструмент пересикаеться что не допустимо.
Либо попытаться загнать полученые числа в Form1.DBGrid1DrawColumnCell.

В этой процедуре я присвоил значение переменной "а" вариант значение поля с теми числами которые надо раскрасить.
Delphi
1
2
3
4
5
6
7
procedure TForm1.Button12Click(Sender: TObject);
var a:Variant;
begin
QExecOpenSQL(1, 1, 'select nt from draw2 where kol>1'); (<- Это короче процедура чтобы по сто раз не не писать открыь и не закрыь Кверю, выполняет запрос в результате которого мы имеем столбец того что надо красить) 
a:=DataModule1.Query1.FieldByName('nt').AsVariant; 
// Button1.Caption:=VarToStr(a);
end;
Теперь я думаю переменную "a" вариант надо преобразовать в масив и какимто образом загнать в процедуру
procedure TForm1.DBGrid1DrawColumnCell
и в цикле перебрать эти значения и раскрасить DBGRID.

Вобщем проблема знаем что красить, но не знаем как занести эту информацию в процедуру раскраски, подсобите если кто знает как это сделать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.05.2008, 00:13
Помогаю со студенческими работами здесь

Раскрасить DBGrid
Добрый день, уважаемые! Возник такой вопрос: Delphi 7, БД - access. Исходные данные (таблица SP) отображаются в DBGrid. По тем или иным...

Из dbGrid вывести выбранные строки в другой DbGrid
Мне надо вывести Из dbGrid вывести выбранные строки в другой DbGrid, например есть 100 записей в одном DbGrid нужно вывести 1-ю и 4-ю в...

Добавление строки в dbgrid
Подскажите пожалуйста, как добавить записи? в DBGrid выводится БД с несколькими столбцами, в которых есть информация. Также имеется самый...

Выделение строки в DBGrid
Как по нажатию кнопки выделить нужную мне строку в DBGrid?

Добавление строки в DBGrid
Привет всем. Есть SQL Server2005. Там база SD с таблицей tUsers, поля UserLogin, UserPass, UserFIO. В Delphi бросил на форму компоненты и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru