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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2011, 19:25   #1
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
Смущение Работа с датой-временем

Есть компонент StringGrid, в нём есть 2 столбика, в котором есть 2 даты.
Разница между этими датами 3 месяца. Например в первом столбике 11/02/2011, во втором - 11/05/2011.
Нужно сделать следующее: если дата на компе уже больше 11/05/2011, то необходимо закрасить "просроченную" ячейку красным цветом. По идее это не сложно реализовать, только я с датами раньше никогда не работал В нете поискал, там только общие сведения, а как сравнивать дату с ячейки и с компа - так и не понял. Помогите, если можете
SwiP вне форума Ответить с цитированием
Старый 26.04.2011, 20:22   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

получить текущую дату - функция Date, преобразовать строку из грида в дату - StrTtoDate , сравнивать даты - CompareDate.
Если возникнут вопросы - в справке вся инормация по этим функциям есть.
Красить примерно так :
Код:
procedure TForm1.StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;  Rect: TRect; State: TGridDrawState);
begin
if условие для даты
  then (Sender as TstringGrid).canvas.Brush.Color := clRed;
  else exit;
FillRect(rect);
TextOut(rect.Left, Rect.Top, (Sender as TstringGrid).Cells[acol, arow]);
end;
учтите, что режим клетки тут не учитывается, добавляйте самостоятельно, прочитав справку по TGridDrawState
phomm вне форума Ответить с цитированием
Старый 26.04.2011, 22:12   #3
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
По умолчанию

C датой - разобрался, а вот с закраской не получается. Он просто тупо закрашивает всю таблицу
Код:
procedure TForm1.SG2DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  SG2.Canvas.Brush.Color:=clYellow;
  SG2.Canvas.FillRect(Rect);
  SG2.Canvas.TextOut(Rect.Left, Rect.Top, SG2.Cells[2,2]);
SwiP вне форума Ответить с цитированием
Старый 26.04.2011, 22:12   #4
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
По умолчанию

Ой, забыл условие написать, теперь понятно

Последний раз редактировалось SwiP; 26.04.2011 в 22:18.
SwiP вне форума Ответить с цитированием
Старый 26.04.2011, 22:32   #5
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
По умолчанию

Новая проблема, из-за того, что DrawCell постоянно обновляется, я не могу добавить новую строку в StringGrid (у меня кнопочка добавляет пустую строку), т.к там вместо даты будет пустота, и это вызывает ошибку EConvertError. Можно ли отключить автообновление DrawCell?
SwiP вне форума Ответить с цитированием
Старый 26.04.2011, 22:45   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А что проанализировать в DrawCell нельзя пустая ячейка или нет?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.04.2011, 00:24   #7
SwiP
Форумчанин
 
Регистрация: 18.03.2009
Сообщений: 101
По умолчанию

А как запретить ввод в эту ячейку всякой ерунды? Если ввести не дату, то ошибки сыплются, желательно это под контроль взять
SwiP вне форума Ответить с цитированием
Старый 27.04.2011, 00:49   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну и контролируй по выходу из ячейки, очищай, например, если введенная дата дохлая
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.04.2011, 15:52   #9
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

выход из режима редактирования ячейки можно отследить событием Onsetedittext
phomm вне форума Ответить с цитированием
Старый 27.04.2011, 16:11   #10
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Чтобы пользователь мог ввести только дату можно сделать следующее:
Код:
procedure TForm1.StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer;
  var Value: string);
begin
 Value:='!99/99/0000;1;'
end;
SERG1980 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со временем и датой Peenuts Общие вопросы C/C++ 3 10.01.2011 16:49
Проблема с датой и временем Amen PHP 8 17.10.2009 22:11
нужно составить запрос с датой и временем! student90 БД в Delphi 5 26.09.2008 05:43
Манипуляции с датой и временем. Tatyana БД в Delphi 16 29.06.2007 19:19