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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2011, 09:47   #1
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию Закрасить строку DbGrid в зависимости дня недели.

Имеется база данных с колонками: Выходной_пон, Выходной_вт, Выходной_ср, Выходной_чет, Выходной_пят, Выходной_суб, Выходной_воск. Мне нужно следующее. Я определяю текущий день недели и если его значение в соответствующей колонке равно труе, то закрасить строку таблицы. у меня почему то не красит. В чем моя ошибка? Вот мой код
Код:
x:= DayOfWeek(Date);
  Case x of
 1: begin
           if TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_воск').AsString='true' then
             begin
                TDBGrideh(Sender).Canvas.Font.Color:=clBlue;
                TDBGrideh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
                TDBGrideh(Sender).Canvas.Font.Style:=[fsBold];
                TDBGrideh(Sender).Canvas.Brush.Color:=OptionForm.sColorSelect3.ColorValue;
                TDBGrideh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
             end;
     end;
 2: begin
            if TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_пон').AsString='true' then
               begin
                TDBGrideh(Sender).Canvas.Font.Color:=clBlue;
                TDBGrideh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
                TDBGrideh(Sender).Canvas.Font.Style:=[fsBold];
                TDBGrideh(Sender).Canvas.Brush.Color:=OptionForm.sColorSelect3.ColorValue;
                TDBGrideh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
            end;
    end;
 3: begin
         if TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_вт').AsString='true' then
          begin
                TDBGrideh(Sender).Canvas.Font.Color:=clBlue;
                TDBGrideh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
                TDBGrideh(Sender).Canvas.Font.Style:=[fsBold];
                TDBGrideh(Sender).Canvas.Brush.Color:=OptionForm.sColorSelect3.ColorValue;
                TDBGrideh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
          end;
    end;
 4: begin
          if TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_ср').AsString='true' then
            begin
                TDBGrideh(Sender).Canvas.Font.Color:=clBlue;
                TDBGrideh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
                TDBGrideh(Sender).Canvas.Font.Style:=[fsBold];
                TDBGrideh(Sender).Canvas.Brush.Color:=OptionForm.sColorSelect3.ColorValue;
                TDBGrideh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
          end;
    end;
  5: begin
          if TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_чет').AsString='true' then
             begin
                TDBGrideh(Sender).Canvas.Font.Color:=clBlue;
                TDBGrideh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
                TDBGrideh(Sender).Canvas.Font.Style:=[fsBold];
                TDBGrideh(Sender).Canvas.Brush.Color:=OptionForm.sColorSelect3.ColorValue;
                TDBGrideh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
          end;
      end;
  6: begin
          if TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_пят').AsString='true' then
            begin
                TDBGrideh(Sender).Canvas.Font.Color:=clBlue;
                TDBGrideh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
                TDBGrideh(Sender).Canvas.Font.Style:=[fsBold];
                TDBGrideh(Sender).Canvas.Brush.Color:=OptionForm.sColorSelect3.ColorValue;
                TDBGrideh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
          end;
      end;
  7: begin
          if TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_суб').AsString='true' then
            begin
                TDBGrideh(Sender).Canvas.Font.Color:=clBlue;
                TDBGrideh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
                TDBGrideh(Sender).Canvas.Font.Style:=[fsBold];
                TDBGrideh(Sender).Canvas.Brush.Color:=OptionForm.sColorSelect3.ColorValue;
                TDBGrideh(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
          end;
     end;
end;
пробовал сделать выбор следующим образом,
Код:
Case FormatDateTime('DDDD', Now) of
понедельник:
и т.д.
но ничего не получилось.

Последний раз редактировалось Aleksandr; 06.07.2011 в 09:52.
Aleksandr вне форума Ответить с цитированием
Старый 06.07.2011, 10:22   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

У DBGridEh есть событие GetCellParams, в котором это можно делать меняя только Background:
Код:
procedure TForm1.DBGridEhGetCellParams(Sender: TObject; Column: TColumnEh; AFont: TFont;
  var Background: TColor; State: TGridDrawState);
begin
  //Например
  if TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_суб').AsString='true' then Background:=clYellow;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.07.2011, 10:27   #3
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

А как связать с текущим днем недели.
Aleksandr вне форума Ответить с цитированием
Старый 06.07.2011, 10:33   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
x:= DayOfWeek(Date);
case x of
1: if (Column.Field=TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_воск')) and
   (TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_воск').AsString='true') then Background:=clBlue;
2:...
end;
x:= DayOfWeek(Date); лучше вынести и x глоб.перем
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 06.07.2011 в 10:35.
Аватар вне форума Ответить с цитированием
Старый 06.07.2011, 11:03   #5
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Не получается. У меня поля 'Выходной_воск', 'Выходной_пон' и т.д. логические. я пробовал вместо AsString писал AsBoolean

Последний раз редактировалось Aleksandr; 06.07.2011 в 11:14.
Aleksandr вне форума Ответить с цитированием
Старый 06.07.2011, 11:08   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Что не получается и код покажи
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.07.2011, 11:22   #7
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Не закрашивает. А вот код
Код:
procedure TMainForm.DBGrid2GetCellParams(Sender: TObject;
  Column: TColumnEh; AFont: TFont; var Background: TColor;
  State: TGridDrawState);

  begin
x:= DayOfWeek(Date);
 Case x of
     1: if (Column.Field=TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_воск')) and
       (TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_воск').AsString='true')   then
        Background:=clYellow;

     2: if (Column.Field=TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_пон')) and
       (TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_пон').AsString='true')   then
           Background:=clYellow;
     3: if (Column.Field=TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_вт')) and
       (TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_вт').AsString='true')    then
           Background:=clYellow;
     4: if (Column.Field=TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_ср')) and
       (TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_ср').AsString='true')      then
           Background:=clYellow;
     5: if (Column.Field=TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_чет')) and
       (TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_чет').AsString='true')       then
           Background:=clYellow;
     6: if (Column.Field=TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_пят')) and
      (TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_пят').AsString='true')   then
           Background:=clYellow;
     7: if (Column.Field=TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_суб')) and
      (TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_суб').AsString='true')    then
           Background:=clYellow;
end;
end;
Aleksandr вне форума Ответить с цитированием
Старый 06.07.2011, 11:32   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Замени это и остальные
Код:
     1: if (Column.Field=TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_воск')) and
       (TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_воск').AsString='true')   then
        Background:=clYellow;
на
     1: if (Column.Field=TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_воск')) and
       TDBGrideh(Sender).DataSource.DataSet.FieldByName('Выходной_воск').AsBoolean   then
        Background:=clYellow;
x:= DayOfWeek(Date); лучше вынести в OnCreateForm

DrawColumnCell если включена, то отключи, может мешает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 06.07.2011 в 11:38.
Аватар вне форума Ответить с цитированием
Старый 06.07.2011, 11:34   #9
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

А вот процедура DBGrid2DrawColumnCell
Вложения
Тип файла: doc процедура.doc (38.5 Кб, 16 просмотров)
Aleksandr вне форума Ответить с цитированием
Старый 06.07.2011, 11:41   #10
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Вынес x:= DayOfWeek(Date); в OnCreateForm и поменял. Все равно не красит.
Aleksandr вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение дня недели по дате shurik_7866 Win Api 5 21.06.2011 15:18
определение дня недели по дате shurik_7866 Общие вопросы Delphi 5 20.06.2011 16:55
как закрасить столбцы соответствующие определенному дню недели chib_sv Microsoft Office Excel 2 06.12.2010 10:54
Извлечение из даты дня недели Kesha_pptp PHP 5 27.02.2010 22:21