|
#1
|
|||
|
|||
планировка
Здравствуйте, есть такая задумка "напоминалка"
таблица с 3 полями : дата (может быть как д.м.г., так и м.г.(как-бы это продумать?)), действие(текст), исполнение(логическое выполнено\невыполнено) так вот если прошла дата(т.е. настал следующий день , или месяц) то строчка должна стать красная , если логическое стоит "невыполнено" Есть идеи? Спасибо. P. S. таблица в Excel сделана |
#2
|
|||
|
|||
думал разнообразить вам жизнь, вот теперь думаю, почему никто не отвечает, не можете помочь или не хотите, а то у меня ещё дальше задумки есть!
|
#3
|
|||
|
|||
Дык выходные, чего ты хочешь?
Ну, я сделал через custom-отрисовку итема. Ты где хранить все собираешься? в БД? Тогда берешь, например, стандартный грид и при отрисовке по последнему полю устанавливаешь кисть в clRed или clWindow. Возможно так же надо будет поставить цвет карандаша, бо как черный не очешь хорошо читается на красном фоне, например, в белый (clWhite), ну и clText (если не ошибаюсь) для обычного отображения. Если будешь хранить в памяти, то тогда можно использовать TListBox, там проще полностью отрисовать итем. Можно использовать TListView, но там с отрисовкой сложнее. ЗЫ. Я использовать TEasyListView для семерки, там куча дополнительных возможностей. Но автор закрыл сайт, так что оригинальный компонент больше не доступен. Где-то в сети есть версия, развиваемая энтузиастами, в т.ч. и на тему поддержки новых версий Дельфи, но я ее не проверял. |
#4
|
||||
|
||||
Оффтоп:
Цитата:
Вот набросок Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#5
|
|||
|
|||
не понял что там должен загрузить, ну ладно я пошёл по наименьшему пути, если в поле стоит выполнено, то цвет букв зелёный(lime)
Код:
procedure TForm1.DBGrid4DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if column.FieldName='satisfaction' then begin if column.Field.AsBoolean then Begin TDBGrid(Sender).Canvas.Brush.Color:=clGradientInactiveCaption; TDBGrid(Sender).Canvas.Font.Color:=cllime; End; end; TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State); end; например сравнить дату в строке и если позже сегодняшнего, то цвет красный, спасибо! |
#6
|
||||
|
||||
Цитата:
А вычисление работает так - в процедуре DrawCell считывается дата из поля таблицы (дата), если она < (меньше) сегодняшней (заданной в Edit1) плюс если в поле исполнение (статус) есть значение "невыполнено", то изменить цвет выделения этой строки, иначе цвет вернуть взад, вот и весь алгол, ведь это лучше чем бегать по строчкам в таймере З.Ы. Забыл код присовокупить Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; vCol, vRow: Integer; Rect: TRect; State: TGridDrawState); begin with StrinGgrid1, Canvas do begin if Cells[0, vRow] <> '' then begin if (Cells[2, vRow] = 'невыполнено') and (VarToDateTime(Cells[0, vRow]) < VarToDateTime(Edit1.Text)) then Brush.Color:= clRed else Brush.Color:= clWhite; FillRect(Rect); TextOut(Rect.Left, Rect.Top, Cells[vCol, vRow]); end; end; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 07.07.2015 в 19:06. |