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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.05.2008, 16:06
elle elle вне форума
Прохожий
 
Регистрация: 08.05.2008
Сообщения: 12
Репутация: 10
Вопрос DateTime

добрый день!
Подскажите пожалуйста как получить из переменной типа TDateTime значение месяца в ячейку DrawGrid?
Ответить с цитированием
  #2  
Старый 08.05.2008, 22:31
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Код:
uses DateUtils;

procedure TForm1.DrawGrid1Click(Sender: TObject);
var R : TRect;
begin
  R := DrawGrid1.CellRect(X, Y); 
  //если X,Y - координаты ячейки, которая не видна, то CellRect возвращает
  //пустое значение
  if not IsRectEmpty(R) then
    DrawGrid1.Canvas.TextOut(R.Left, R.Top, IntToStr(MonthOf(DateValue)));
end;

Последний раз редактировалось san-46, 08.05.2008 в 22:54.
Ответить с цитированием
  #3  
Старый 08.05.2008, 22:37
Аватар для Zylex
Zylex Zylex вне форума
Прохожий
 
Регистрация: 06.04.2008
Адрес: Сыктывкар
Сообщения: 33
Репутация: 10
По умолчанию

В событии таблицы OnDrawCell прописать:
Код:
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
    with Sender as TDrawGrid, Canvas do
    begin
        if (Acol = 2) and (Arow = 1) then
           TextOut(Rect.Left+10, Rect.Top+5,FormatDateTime('mmmm', Date));
    end;
end;
__________________
Программирование - стиль жизни
Ответить с цитированием
  #4  
Старый 16.05.2008, 12:28
elle elle вне форума
Прохожий
 
Регистрация: 08.05.2008
Сообщения: 12
Репутация: 10
Печаль

спасибо вам)
но что-то у меня не получается пока так...
у меня в общем в dbedit есть две даты начала и окончания и есть drawgrid. мне нужно чтобы разность между этими датами вычислилась в dbedit в другом столбце и закрасилось такое же количество ячеек в drawgrid, а в самой верхней ячейки drawgrid вышло название месяца из даты начала.воть никак сообразить все это не могу( если можете помогите плииз)
Ответить с цитированием
  #5  
Старый 16.05.2008, 12:46
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Наверное, без твоих исходников не разобраться. Скинь их сюда, попробуем понять чего там закршивать и выводит.
Ответить с цитированием
  #6  
Старый 16.05.2008, 12:54
elle elle вне форума
Прохожий
 
Регистрация: 08.05.2008
Сообщения: 12
Репутация: 10
Печаль

спасибо вам)
но у меня так все равно не работает(( вернее я сообразить не могу))
дело в том что у меня такая ситуация: есть dbedit две даты-дата начала b дата окончания и есть столбец для вычисления их разности... в
drawgrid нужно закрасить столько ячеек сколько содержит разность этих дат в днях, а в самой верхней ячейке drawgrid написать название месяца из даты начала вот такая вот ситуация...
помогите плиз ))
Ответить с цитированием
  #7  
Старый 16.05.2008, 14:03
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var Days, I, C, R : Integer;
begin
  if (DBEdit1.Field = nil) or (DBEdit2.Field = nil) then
    Exit;
  //количество дней между двумя датами
  Days := DaysBetween(DBEdit2.Field.AsDateTime, DBEdit1.Field.AsDateTime);

  for C := 0 to SG2.ColCount-1 do
    for R := 0 to SG2.RowCount-1 do
      SG2.Objects[C, R] := TObject(0);
      
  R := 0; //строка, с которой начинается закраска
  C := 0; //колонка, с которой начинается зкраска
  for I := 1 to Days do begin
    SG2.Objects[C, R] := TObject(1);
    Inc(C);
    if I mod SG2.ColCount = 0 then begin
      Inc(R); C := 0;
    end;
  end;
  SG2.Invalidate;
end;

Код:
procedure TForm1.SG2DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var D : string;
begin
  if Integer(SG2.Objects[ACol, ARow]) = 1 then
    SG2.Canvas.Brush.Color := clBtnFace
  else
    SG2.Canvas.Brush.Color := clWhite;
  SG2.Canvas.FillRect(Rect);

  if (ACol = 0) and (ARow = 0) then begin
    if Integer(SG2.Objects[0, 0]) = 1 then begin
      DateTimeToString(D, 'mmmm', DBEdit1.Field.AsDateTime);
      InflateRect(Rect, -2, -2);
      DrawText(SG2.Canvas.Handle, pchar(D), -1, Rect, DT_CENTER);
    end;
  end;
end;
Только DrawGrid надо заменить на StringGrid, в объектах ячеек которой можно хранить дополнительную информацию. В DrawGrid этого нет.
Свойство StringGrid DefaultDrawing надо установить в False, и создать обработчик OnDrawCell (в примере SG2DrawCell).
Ответить с цитированием
  #8  
Старый 16.05.2008, 16:43
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А я бы графику отрисовывал руками на канве, например TPaintBox. Это будет проще.
Ответить с цитированием
  #9  
Старый 18.05.2008, 20:46
elle elle вне форума
Прохожий
 
Регистрация: 08.05.2008
Сообщения: 12
Репутация: 10
По умолчанию

пааасиба!
у меня ошибку выдает на функцию daysbetween
может нужно какие-то дополнительные библиотеки подключить или как???
Ответить с цитированием
  #10  
Старый 18.05.2008, 20:52
elle elle вне форума
Прохожий
 
Регистрация: 08.05.2008
Сообщения: 12
Репутация: 10
По умолчанию

пасиба!
у меня выводит ошибку где daysbetween((
Ответить с цитированием
  #11  
Старый 18.05.2008, 21:06
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

В сецкции uses надо указать DateUtils
Штатный модуль Delphi.
Для справки: установить курсор мышиный на имя функции и нажать F1. В появившемся окне хелпа среди прочего будет указан и модуль, где эта функция находится.

Последний раз редактировалось san-46, 18.05.2008 в 21:12.
Ответить с цитированием
  #12  
Старый 18.05.2008, 22:57
elle elle вне форума
Прохожий
 
Регистрация: 08.05.2008
Сообщения: 12
Репутация: 10
По умолчанию

ага спасибо я догадалась так тоже сделать, библиотеку подключить)) теперь не ругается))
а еще подскажи пожалуйста как вот эту разницу в датах Days записать в другой dbedit?
Ответить с цитированием
  #13  
Старый 18.05.2008, 23:05
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

DBEdit1.Field.AsInteger := Days;
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter