|
#1
|
|||
|
|||
DateTime
добрый день!
Подскажите пожалуйста как получить из переменной типа TDateTime значение месяца в ячейку DrawGrid? |
#2
|
|||
|
|||
Код:
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
|
||||
|
||||
В событии таблицы 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
|
|||
|
|||
спасибо вам)
но что-то у меня не получается пока так... у меня в общем в dbedit есть две даты начала и окончания и есть drawgrid. мне нужно чтобы разность между этими датами вычислилась в dbedit в другом столбце и закрасилось такое же количество ячеек в drawgrid, а в самой верхней ячейки drawgrid вышло название месяца из даты начала.воть никак сообразить все это не могу( если можете помогите плииз) |
#5
|
|||
|
|||
Наверное, без твоих исходников не разобраться. Скинь их сюда, попробуем понять чего там закршивать и выводит.
|
#6
|
|||
|
|||
спасибо вам)
но у меня так все равно не работает(( вернее я сообразить не могу)) дело в том что у меня такая ситуация: есть dbedit две даты-дата начала b дата окончания и есть столбец для вычисления их разности... в drawgrid нужно закрасить столько ячеек сколько содержит разность этих дат в днях, а в самой верхней ячейке drawgrid написать название месяца из даты начала вот такая вот ситуация... помогите плиз )) |
#7
|
|||
|
|||
Код:
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; Свойство StringGrid DefaultDrawing надо установить в False, и создать обработчик OnDrawCell (в примере SG2DrawCell). |
#8
|
|||
|
|||
А я бы графику отрисовывал руками на канве, например TPaintBox. Это будет проще.
|
#9
|
|||
|
|||
пааасиба!
у меня ошибку выдает на функцию daysbetween может нужно какие-то дополнительные библиотеки подключить или как??? |
#10
|
|||
|
|||
пасиба!
у меня выводит ошибку где daysbetween(( |
#11
|
|||
|
|||
В сецкции uses надо указать DateUtils
Штатный модуль Delphi. Для справки: установить курсор мышиный на имя функции и нажать F1. В появившемся окне хелпа среди прочего будет указан и модуль, где эта функция находится. Последний раз редактировалось san-46, 18.05.2008 в 21:12. |
#12
|
|||
|
|||
ага спасибо я догадалась так тоже сделать, библиотеку подключить)) теперь не ругается))
а еще подскажи пожалуйста как вот эту разницу в датах Days записать в другой dbedit? |
#13
|
|||
|
|||
DBEdit1.Field.AsInteger := Days;
|