|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Разноцветный dbgrid
Уважаемые форумчане, подскажите как сделать:
есть dbgrid в который выводится результат выполнения хп, он имеет следующий вид характеристика |Значение| StrID(visible=false) -------------------------------------------------------------------- Характеристика 1 | знач | 1 Характеристика 2 | знач | 1 Характеристика 3 | знач | 1 Характеристика 1 | знач | 4 Характеристика 2 | знач | 4 Характеристика 3 | знач | 4 итд и таких наборов характеристик может быть много. Вопрос в следующем: как раскрасить строки dbgrid с одинаковыми значениями StrID, чтобы наборы характеристик визуально можно было различить, а то все на белом фоне - какая-то каша получается? Последний раз редактировалось Marchelly, 02.09.2010 в 16:21. |
#2
|
||||
|
||||
Если значений StrId немного, то вот так (в DrawColumnCell грида):
Код:
if DBGrid1.datasource.dataset.fieldbyname('StrID').AsInteger= 1 then begin DBGrid1.Canvas.Brush.Color := clRed; DBGrid1.Canvas.Font.Color := clYellow; end else begin DBGrid1.Canvas.Brush.Color := clYelow; DBGrid1.Canvas.Font.Color := clRed; end; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); DefaultDrawing=false у грида не забываем |
#3
|
|||
|
|||
значений - то не много, но они могут быть каждый раз разные, в том-то и дело, что с двумя значениями я понимаю как сделать а как с большим количеством не очень (((
как-то их надо из грида прочитать (заранее не известны значения StrID пока хп не выполнится) и сравнивать... |
#4
|
||||
|
||||
ХЗ, первое что в голову идет- это делать distinct для StrID и написать функцию распределения цвета для каждого значения. Т.е. написать функцию соответствия значения int из StrId c цветом. Погугли как это сделать и будет счастье, а может кто- то тут уже знает ответ. ))
|
#5
|
||||
|
||||
Marchelly, я бы сделал так:
Код:
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); begin case DBGrid1.fieldbyname('StrID').AsInteger of 1 :begin DBGrid1.Canvas.Brush.Color := clRed; DBGrid1.Canvas.Font.Color := clYellow; end; 2 :begin еще какие-то цвета end; и т.д. else DBGrid1.Canvas.Brush.Color := clYelow; DBGrid1.Canvas.Font.Color := clRed; end; end; Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#6
|
|||
|
|||
Не, у тебя опять прибито гвоздями.
Надо делать через map. Создаешь массив записей, куда прописываешь значение StrID и выбранные для этого значения цвета. И в окраске используешь. Для того, что бы не делать лишних запросов и телодвижений, массив можно сбрасывать в момент открытия основного запроса и заполнять по мере отрисовки. Теперь о том, как выбирать цвета. Опять же, можно сделать заранее (вообще при создании формы) некоторый массив (список) комбинаций цветов (текст и фон) и потом по очереди брать эти комбинации из него, а то Random'ом генерить может фигня получиться. Хотя можно и Random'ом. Тогда, например, текст у нас будет всегда черный, а фон надо всегда генерить светлый, т.е. отдельно генерим составляющие RGB, причем так, что значение любой из низ должно быть > 200. Ну и еще можно при этом близкие цвета пропускать - далее уже навороты по вкусу. |
#7
|
||||
|
||||
Да не надо ему много цветов, ему просто надо группы с разным значением аттрибута раскрасить в разные цвета.
Нет, так не пойдет. Количество атрибутов заранее неизвестно, к тому-же не факт что это будет число. Мне кажется надо просто завести глобальную переменную, и при несовпадении значения этой пременной и аттрибута менять цвет, присвоить пременной значение аттрибута. Все это проделывать в DrawDataCell. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 02.09.2010 в 21:17. |