tvplanit: Fix calculation of month count needed for TVpGanttView.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8458 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2022-09-07 17:35:46 +00:00
parent 80404b5c33
commit 41aeaea878

View File

@ -884,12 +884,25 @@ end;
function TVpGanttView.GetNumMonths: Integer;
var
dm1, dm2: Integer;
y1, m1, d1: Word;
y2, m2, d2: Word;
begin
if (FStartDate <> NO_DATE) then
begin
DecodeDate(FStartDate, y1, m1, d1);
DecodeDate(FEndDate, y2, m2, d2);
if (y1 = y2) then
Result := m2 - m1 + 1
else
Result := 13 - m1 + m2 + (y2 - y1 - 1)*12;
{
else
Result := (y2 - y1 - 1) * 12;
dm1 := trunc(StartOfTheMonth(FStartDate));
dm2 := trunc(StartOfTheMonth(FEndDate));
dm2 := trunc(StartOfTheMonth(FEndDate)) + 1;
writeln(datetostr(dm1), ' ', datetostr(dm2));
Result := MonthsBetween(dm1, dm2) + 1;
}
end else
Result := 0;
end;
@ -1268,24 +1281,34 @@ begin
x1 := FixedColWidth;
y1 := 0;
y2 := FTotalColHeaderHeight;
dm := FStartDate;
for i := 0 to n - 1 do
if n > 1 then
begin
if i = 0 then begin
nDays := DaysInMonth(dm) - DayOf(dm) + 1;
dm := StartOfTheMonth(dm);
end else
if i = n-1 then
nDays := DayOf(FEndDate)
else
nDays := DaysInMonth(dm);
if dm + nDays > FEndDate then
nDays := trunc(FEndDate) - trunc(dm) + 1;
dm := FStartDate;
for i := 0 to n - 1 do
begin
if i = 0 then begin
nDays := DaysInMonth(dm) - DayOf(dm) + 1;
dm := StartOfTheMonth(dm);
end else
if i = n-1 then
nDays := DayOf(FEndDate)
else
nDays := DaysInMonth(dm);
if dm + nDays > FEndDate then
nDays := trunc(FEndDate) - trunc(dm) + 1;
x2 := x1 + nDays * ColWidth;
FMonthRecords[i].Rect := Rect(x1, y1, x2, y2);
FMonthRecords[i].Date := dm;
dm := IncMonth(dm, 1);
x1 := x2;
end;
end else
begin
nDays := DayOf(FEndDate) - DayOf(FStartDate) + 1;
x2 := x1 + nDays * ColWidth;
FMonthRecords[i].Rect := Rect(x1, y1, x2, y2);
FMonthRecords[i].Date := dm;
dm := IncMonth(dm, 1);
x1 := x2;
FMonthRecords[0].Rect := Rect(x1, y1, x2, y2);
FMonthRecords[0].Date := FStartDate;
end;
end;