| 
| 
 | Вопрос # 228/ вопрос решён / | 
 |  Здравствуйте!Сразу несколько интересных вопросов экспертам по DBGrid'у!
 
 1) Во-первых, в программе, которую я пишу таблица DBGrid имеет голубой фон(В XP)! Но когда я запускаю программу под WIN2000 все DBGrid'ы становятся серыми! Почему это? Как этого избежать?
 
 2) Как подсветить текущую запись DBGrid'а(т.е. на котором стоит курсор) другим цветом? (DBGrid связан с IBTable или IBQuery, но это, наверное не важно?)
 
 Заранее спасибо))
 
|  |   Вопрос задал: 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 можно каждую ячейку красить в свой цвет. Приложение:Переключить в обычный режим procedure TFormDocs.DBGrid1DrawColumnCell(Sender: TObject;  const Rect: TRect; DataCol: Integer; Column: TColumn;  State: TGridDrawState);begin  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);end; 
|  | Ответ отправил: ANBsoft (статус: Студент)Время отправки: 29 декабря 2006, 00:52
 Оценка за ответ: 4
 Комментарий к оценке: Я почти понял, только не совсем с условиями разобрался! Что они значат? Всякие там " if (QDocsRaznica.AsInteger>Dopusk)" и т.д. |  
 Мини-форум вопросаВсего сообщений: 1; последнее сообщение — 30 декабря 2006, 22:40; участников в обсуждении: 1. 
|   | 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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |