|
Вопрос # 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)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|