Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закраска строк в DBGrid 
:(
    Опции темы
Светлячок2009
Дата 13.7.2009, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.7.2009

Репутация: нет
Всего: нет



Вот процедура, которая по идее должна закрашивать те строки в красный цвет, у которых просрочена дата выполнения (т.е. в поле DAta стоит меньшее число, чем текущее).
Не работает! В чем дело?

Код

procedure TForm5.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
clPaleGreen = TColor($CCFFCC);
clPaleRed = TColor($CCCCFF);
var dt:TDateTime;
begin
   dt:=now;
   if Column.Field.Dataset.FieldByName('Data').AsDateTime<dt then
     if (gdFocused in State) then
       DBGrid1.canvas.Brush.Color:=clPaleGreen
     else
       DBGrid1.canvas.Brush.Color:=clPaleRed;
 DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State)
end;




M
THandle
Модератор: пользуйтесь подсветкой кода!

PM MAIL   Вверх
Данкинг
Дата 13.7.2009, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



А в условие сравнения (...<dt) программа вообще заходит?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Светлячок2009
Дата 13.7.2009, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.7.2009

Репутация: нет
Всего: нет



прога-то вообще запускается, ошибок не выдает, но не делает, то что должна бы. Подозреваю, тут косяк как раз с этим dt
PM MAIL   Вверх
Данкинг
Дата 13.7.2009, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(Светлячок2009 @  13.7.2009,  20:14 Найти цитируемый пост)
прога-то вообще запускается, ошибок не выдает

Я понимаю, что она запускается, я спрашиваю:

Цитата(Данкинг @  13.7.2009,  20:04 Найти цитируемый пост)
А в условие сравнения (...<dt) программа вообще заходит? 




--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Regulum
Дата 18.7.2009, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 16.6.2009

Репутация: нет
Всего: 1



Сравнение дат операторами "<,>,=" может давать неправильный результат.
Лучше использовать функцию, описанную в DateUtils
Код

 CompareDate(A,B: TDateTime): TValueRelationship 

Если A>B возвращает 1
Если А=B возвращает 0
Если A<B возвращает -1
PM MAIL   Вверх
Akella
Дата 22.7.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



Regulum, повторяю и немного перефразирую вопрос Данкинга: 

Цитата(Светлячок2009 @  13.7.2009,  18:49 Найти цитируемый пост)

dt:=now;
if Column.Field.Dataset.FieldByName('Data').AsDateTime<dt then

посмотри дебаггером, что у тебя в FieldByName('Data').AsDateTime и что у тебя в dt

и вообще нафиг эта лишняя строка?


Цитата(Светлячок2009 @  13.7.2009,  18:49 Найти цитируемый пост)
dt:=now;


Добавлено через 2 минуты и 12 секунд
Теперь продолжим.
AsDateTime и now возвращают вот такой формат данных: 12-02-2009 12:05:01
Ты уверен, что у тебя совпадают все данные вплоть до секунд?
PM MAIL   Вверх
defmzk
Дата 23.7.2009, 03:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 16.7.2009

Репутация: нет
Всего: нет



Цитата(Akella @ 22.7.2009,  20:15)
AsDateTime и now возвращают вот такой формат данных: 12-02-2009 12:05:01
Ты уверен, что у тебя совпадают все данные вплоть до секунд?

а какая разница у него же стоит не равно, а меньше.
PM MAIL   Вверх
MetalFan
Дата 23.7.2009, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(Akella @  22.7.2009,  20:15 Найти цитируемый пост)
AsDateTime и now возвращают вот такой формат данных: 12-02-2009 12:05:01

Now: TDateTime; TDateTime = type Double; ...
или я не понял, что конкретно ты имел ввиду)

к автору:
Цитата(Светлячок2009 @  13.7.2009,  18:49 Найти цитируемый пост)
  if (gdFocused in State) then

зачем это условие? я так понимаю, будет красить в красный только ячейки "просроченые" и в фокусе.

кстати согласен с Regulum.
просто сравнение даст неверный результат в случае, если в поле будет сегодняшняя дата. просто сравнение с Now всегда будет <.

Это сообщение отредактировал(а) MetalFan - 23.7.2009, 11:37


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
RedCliphAloe
Дата 23.7.2009, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 13.5.2009

Репутация: 2
Всего: 3



Светлячок2009, твой код у меня отрабатывает...
В соответствии с условием:
- строки, где дата больше текущей - белые
- строки, где дата меньше текущей - красные
- ячейки под фокусом (для записей, в которых дата меньше текущей) - зеленые
Тебе так и надо?
Если тебе просто надо окрасить строки в зависимости от даты (если дата меньше текущей - красный, если больше или равна - зеленый)
Цитата(Светлячок2009 @  13.7.2009,  19:49 Найти цитируемый пост)
должна закрашивать те строки в красный цвет, у которых просрочена дата выполнения (т.е. в поле DAta стоит меньшее число, чем текущее).

, то пиши так:
Код

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
  clPaleGreen = TColor($CCFFCC);
  clPaleRed = TColor($CCCCFF);
var
  DT: TDateTime;
begin
  DT := Now;
  if Column.Field.Dataset.FieldByName('DATA').AsDateTime < DT then
    DBGrid1.canvas.Brush.Color := clPaleRed
  else
    DBGrid1.canvas.Brush.Color := clPaleGreen;
  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;


Это сообщение отредактировал(а) RedCliphAloe - 23.7.2009, 12:08
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0921 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.