![]() |
|
|
#1
|
|||
|
|||
|
добрый день!
Подскажите пожалуйста как получить из переменной типа 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;
|