Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 228

/ вопрос решён /

Здравствуйте!
Сразу несколько интересных вопросов экспертам по DBGrid'у!

1) Во-первых, в программе, которую я пишу таблица DBGrid имеет голубой фон(В XP)! Но когда я запускаю программу под WIN2000 все DBGrid'ы становятся серыми! Почему это? Как этого избежать?

2) Как подсветить текущую запись DBGrid'а(т.е. на котором стоит курсор) другим цветом? (DBGrid связан с IBTable или IBQuery, но это, наверное не важно?)

Заранее спасибо))

RedMask Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: RedMask (статус: Посетитель)
Вопрос отправлен: 28 декабря 2006, 09:06
Состояние вопроса: решён, ответов: 3.

Ответ #1. Отвечает эксперт: Помфюк Владимир Степанович

Здравствуйте, RedMask!
1)Свойствам типа TColor (Color, FixedColor, Font.Color) можна установить как в конкретный цвет (н.п.: clBlue), так и в системный (н.п.: cl3DLight). У Вас установлены системные цвета, и они будут менятся в зависимости от цветовой схемы Windows'a. Укажите "человеческий" цвет и Ваши гриды будут выглядеть везде одинаково.
2)Можно в свойстве Options указать dgRowSelect, но тогда grid станет read-only (не поредактируете запись непосредственно в нем). Другой выход - обрабатывать событие OnDrawColumnCell (тогда можно хоть каждую ячейку в свой цвет окрасить)

Ответ отправил: Помфюк Владимир Степанович (статус: Абитуриент)
Время отправки: 28 декабря 2006, 10:04
Оценка за ответ: 5

Комментарий к оценке: Спасибо! Понял, почему такие косяки с цветами в 2000! исправляюсь))) А со вторым не очень понял! Точно нужна возможность редактирования прямо в таблице

Ответ #2. Отвечает эксперт: Alex Van Glukhman

Здравствуйте, RedMask!

В своё время я отказался от использования DBGrid - ввиду того что многие свойства наследуемые от TCustomDBGrid являются protected.
Самый идеальный вариант создать тип наследника TCustomDBGrid и обращаться к защищённым свойствам как DBGrid1 as MyCustomDBGrid. В результате открывается много возможностей к обработке именно строк сетки (В том числе и TCOLOR).
Для отображения одинаковых цветов в различных ОС используйте конкретные цвета а не системные например clBlue, а не clHighlight, или в формате RBG.
Удачи!!!

Ответ отправил: Alex Van Glukhman (статус: 7-ой класс)
Время отправки: 28 декабря 2006, 12:26
Оценка за ответ: 5

Комментарий к оценке: Спасибо)) Теперь буду только так!

Ответ #3. Отвечает эксперт: ANBsoft

Просто кусок кода из своей программы по раскраске грида, определяя Column можно каждую ячейку красить в свой цвет.

Приложение:
  1. procedure TFormDocs.DBGrid1DrawColumnCell(Sender: TObject;
  2. const Rect: TRect; DataCol: Integer; Column: TColumn;
  3. State: TGridDrawState);
  4. begin
  5. if (QDocsRaznica.AsInteger>Dopusk) then DBGrid1.Canvas.Font.Color:=clRed;
  6. if (QDocsVid.AsInteger=1) then DBGrid1.Canvas.Brush.Color:=clBlue;
  7. if (QDocsVid.AsInteger=2) then DBGrid1.Canvas.Brush.Color:=clGreen;
  8. if (QDocsID.AsInteger>0) and (QDocsCheckCRC.AsInteger=0) then DBGrid1.Canvas.Brush.Color:=clFuchsia;
  9. DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
  10. end;
  11.  


Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 29 декабря 2006, 00:52
Оценка за ответ: 4

Комментарий к оценке: Я почти понял, только не совсем с условиями разобрался! Что они значат? Всякие там " if (QDocsRaznica.AsInteger>Dopusk)" и т.д.

Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 30 декабря 2006, 22:40; участников в обсуждении: 1.
ANBsoft

ANBsoft (статус: Студент), 30 декабря 2006, 22:40 [#1]:

Уточняю на вопрос: Я почти понял, только не совсем с условиями разобрался! Что они значат? Всякие там " if (QDocsRaznica.AsInteger>Dopusk)" и т.д.
Привел кусок кода из своей программы:
if (QDocsRaznica.AsInteger>Dopusk) then DBGrid1.Canvas.Font.Color:=clRed;//Если значение разницы в запросе больше допустимого - сделать шрифт в строке красным
if (QDocsVid.AsInteger=1) then DBGrid1.Canvas.Brush.Color:=clBlue;//Если документ первого типа - сделать фон строки синим
if (QDocsVid.AsInteger=2) then DBGrid1.Canvas.Brush.Color:=clGreen;//Аналогично - зеленым
if (QDocsID.AsInteger>0) and (QDocsCheckCRC.AsInteger=0) then DBGrid1.Canvas.Brush.Color:=clFuchsia;//Если ошибка провекри контрольной суммы - сделать фон строки малиновым
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);// вызов процедуры отрисовки ячейки

31 января 2011, 19:58: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:36
Выполнено за 0.02 сек.