Форум по Delphi программированию



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.07.2015, 17:16
nikotan nikotan вне форума
Новичок
 
Регистрация: 21.06.2015
Сообщения: 58
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию планировка

Здравствуйте, есть такая задумка "напоминалка"
таблица с 3 полями : дата (может быть как д.м.г., так и м.г.(как-бы это продумать?)), действие(текст), исполнение(логическое выполнено\невыполнено)
так вот если прошла дата(т.е. настал следующий день , или месяц) то строчка должна стать красная , если логическое стоит "невыполнено"
Есть идеи? Спасибо.
P. S. таблица в Excel сделана
Ответить с цитированием
  #2  
Старый 05.07.2015, 21:29
nikotan nikotan вне форума
Новичок
 
Регистрация: 21.06.2015
Сообщения: 58
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

думал разнообразить вам жизнь, вот теперь думаю, почему никто не отвечает, не можете помочь или не хотите, а то у меня ещё дальше задумки есть!
Ответить с цитированием
  #3  
Старый 05.07.2015, 21:40
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,709
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Дык выходные, чего ты хочешь?
Ну, я сделал через custom-отрисовку итема.

Ты где хранить все собираешься? в БД? Тогда берешь, например, стандартный грид и при отрисовке по последнему полю устанавливаешь кисть в clRed или clWindow. Возможно так же надо будет поставить цвет карандаша, бо как черный не очешь хорошо читается на красном фоне, например, в белый (clWhite), ну и clText (если не ошибаюсь) для обычного отображения.

Если будешь хранить в памяти, то тогда можно использовать TListBox, там проще полностью отрисовать итем. Можно использовать TListView, но там с отрисовкой сложнее.

ЗЫ. Я использовать TEasyListView для семерки, там куча дополнительных возможностей. Но автор закрыл сайт, так что оригинальный компонент больше не доступен. Где-то в сети есть версия, развиваемая энтузиастами, в т.ч. и на тему поддержки новых версий Дельфи, но я ее не проверял.
Ответить с цитированием
  #4  
Старый 06.07.2015, 06:24
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Оффтоп:
Цитата:
Сообщение от nikotan
думал разнообразить вам жизнь...
Ага, а оно нам надо с вашими запросами лучше в коднашару обращаться )

Вот набросок
Вложения
Тип файла: zip xls.zip (4.3 Кбайт, 2 просмотров)
Ответить с цитированием
  #5  
Старый 06.07.2015, 20:42
nikotan nikotan вне форума
Новичок
 
Регистрация: 21.06.2015
Сообщения: 58
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

не понял что там должен загрузить, ну ладно я пошёл по наименьшему пути, если в поле стоит выполнено, то цвет букв зелёный(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  
Старый 06.07.2015, 22:57
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от nikotan
не понял что там должен загрузить...

...у тебя есть вычисление даты, тоже не понял как работает, проще можно?
например сравнить дату в строке и если позже сегодняшнего, то цвет красный, спасибо!
Я уж и не знаю, как можно проще-то объяснить - в папке со сборкой лежит файл prm.xls (таблица Excel) нажав на "Загрузить" следует выбрать его в диалоге открытия файла, при запуске в едите отображается дата для сравнения (по умолчанию она актуальна на момент запуска) если её изменить и снова загрузить табличку (это не самый лучший вариант, проще обновить грид командой .Repaint) изменится и результат раскраски строк, другими словами, загрузите и посмотрите

А вычисление работает так - в процедуре 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.
Ответить с цитированием
Ответ



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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:40.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2021

ВКонтакте   Facebook   Twitter   Ссылка на Telegram