Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2010, 19:05   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
Вопрос Раскраска DBGridEh взависимости от операций

Использовал модуль для раскраски DBGridEh-a в цвета в зависимости от того, какие действия осуществлялись над таблицей. Прописал в uses atcDBGrid. Но у меня мой DBGridEh не реагирует. Что то может заменить в подключенном модуле нужно? Если да, то что и на что, чтобы заработало.

ссылка на модуль
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 11.10.2010, 19:40   #2
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Ничего стороннего не надо использовать для раскраски DBGridEh - все в нем есть.
В событии OnGetCellParams.
Хотя, да, нужно знать какие события произошли. Здесь пока темнота.
Зависит еще от того, как INSERT. UPDATE, DELETE происходят. Автоматом или запросами из приложения.
Интересно знать, а что удаленные записи должны тоже подсвечиваться?

Последний раз редактировалось Karabash; 11.10.2010 в 19:53.
Karabash вне форума Ответить с цитированием
Старый 12.10.2010, 03:25   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

На счет удаленных записей не знаю. Мне нужно просто выделять цветами ячейки с условиями которые я напишу. Например. Определенный столбец проверять на наличие пустых ячеек и если таковые есть, то выделять их красным. Чтобы было что-то вроде:
Код:
 if <в столбце есть пустые ячейки> then
 begin
  <выделяем эти ячейки красным>
 end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 12.10.2010, 06:26   #4
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Два примера. Один на событие OnGetCellParams конкретной колонки (можно и такое сделать) и второй на OnGetCellParams гриды. События эти разные, хотя и называются одинаково.
Код:
1.
procedure TFrameBr.DBGridEh1Columns11GetCellParams(Sender: TObject;
  EditMode: Boolean; Params: TColCellParamsEh);
begin
  if TColumnEH(Sender).Field.Value < 0 then
    Params.Font.Color := clRed;
end;
2.
procedure TFrameBr.DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh;
  AFont: TFont; var Background: TColor; State: TGridDrawState);
begin
  if DM.qrSelectBr.FieldValues['D1'] < Date then
    AFont.Color := clMedGray;
  if DateToStr(DM.qrSelectBr.FieldValues['D1']) = DateToStr(Date) then begin
    AFont.Color := clBlack;
    AFont.Style := [fsBold];
    Background := clSkyBlue;
  end;
end;
Karabash вне форума Ответить с цитированием
Старый 12.10.2010, 06:49   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Использовал второй код. Он меня устраивает пока что). Только вопрос. Выделяются не все записи в DBGridEh-e. Я добавил еще условие:
Код:
procedure TForm1.DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh;
  AFont: TFont; var Background: TColor; State: TGridDrawState);
begin
 if (Form1.ADOQuery1.FieldValues['DocType'] = '02') and
     (Form1.ADOQuery1.FieldValues['Number application'] = '')  then begin
    AFont.Color := clBlack;
    AFont.Style := [fsBold];
    Background := clSkyBlue;
  end;
end;
как заставить его выделить все строчки?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 12.10.2010 в 07:18.
artemavd вне форума Ответить с цитированием
Старый 12.10.2010, 07:11   #6
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

В моем то коде все нормально. Я его привел вам как пример, выдрав из контекста своего проекта.
Понятно, что применение имен переменных и объектов из моего проекта будут давать ошибку в вашем.
Условия в приведенных процедурах обработки событий вам надо поменять на свои, с именами своих полей, колонок и датасетов (если они у вас есть).

Применительно к вашему условию (проверка на пустые ячейки в первой колонке):
Код:
procedure TFrameBr.DBGridEh1Columns11GetCellParams(Sender: TObject;
  EditMode: Boolean; Params: TColCellParamsEh);
begin
  if VarIsNull(TColumnEH(Sender).Field.Value) then
    Params.Background.Color := clRed;
end;
А чтобы закрашивались все попробуйте такой вариант:
Код:
procedure TForm1.DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh;
  AFont: TFont; var Background: TColor; State: TGridDrawState);
begin
  if (gdSelected in State) and not (gdFocused in State) then Exit;
  if (Form1.ADOQuery1.FieldValues['DocType'] = '02') and
     (Form1.ADOQuery1.FieldValues['Number application'] = '')  then begin
    AFont.Color := clBlack;
    AFont.Style := [fsBold];
    Background := clSkyBlue;
  end;
end;
У меня строки, которые нужно закрашивать (тоже по условию) закрашиваются все.

Последний раз редактировалось Karabash; 12.10.2010 в 07:31.
Karabash вне форума Ответить с цитированием
Старый 12.10.2010, 07:28   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

У меня не выделяется все строки согласно условию. Выделяется только часть. Что делать?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 12.10.2010, 07:32   #8
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Не выделяются или не закрашиваются? Если не закрашиваются, то, скорее всего, данные в строках не соответствуют условию.
Karabash вне форума Ответить с цитированием
Старый 12.10.2010, 07:44   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Не закрашиваются цветом clSkyBlue. Из 2146 записей условие работает только для первых 41 почему-то. Посмотрите пожалуйста на скрин .
На скрине видно, что записи №674, №678, №680 не выделяются. И так остальные записи, которые после 674ой записи.


Странно......другое условие для 01 все записи выделяет. Буду разбираться почему для 02 не все.
Изображения
Тип файла: png Ошибка_2.png (47.2 Кб, 155 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 12.10.2010 в 08:00.
artemavd вне форума Ответить с цитированием
Старый 12.10.2010, 08:01   #10
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Сравните данные в строках 669 и 674 - они разные (к примеру, колонка "Количество ошибочных символов" - в одной строке "0", в другой "пусто" с точки зрения БД - это разные значения).
Из-за этого получается, что данные в записи 674 и не соответствуют условию.
Karabash вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Раскраска диаграммы dayfuaim Microsoft Office Excel 8 22.08.2010 15:44
Раскраска эллипса rubik Мультимедиа в Delphi 1 02.05.2010 05:21
цветовая раскраска эллипса rubik Помощь студентам 1 01.05.2010 15:52
раскраска матрицы jeyjoe Помощь студентам 0 12.11.2009 18:49
Раскраска домика в графике Tirr Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 28.10.2009 22:10