I forgot I switched to the new control. The control is actually NxDatePicker6 and this is in the wrong forum.
Today is Thursday Oct. 27, 2016 and the control is showing that it's Friday Oct. 27, 2016.
My system settings have First day of week set to Sunday. When I inspect the value at runtime, StartDayOfWeek is always dwMonday, even though I've overridden the value to dwSunday in the control properties, and dwSystem returns Sunday from the locale.
Edit: I changed FView.StartDay to
FView.StartDay := dwSystem; // dwMonday
The design time value set for StartDayOfWeek is ignored. I tried changing FView.StartDay := StartDayOfWeek and found that the value set at design time still didn't work and when destroying FView it threw an invalid pointer exception so I changed it back to dwSystem. This fixes one problem - sort of - but the dates and days of the week still don't line up with the correct column.
Edit2: I changed TNxDatePickerView.PaintDays(1767) to the following and it fixes the dates not lining up with the day of the week. I see that a similar method is used elsewhere (GetDayRect, IsShown) but didn't test if those needed alteration.
Day := IncDay(Day, -GetDayOfWeek(StartOfAMonth(Year, Month)) +1);
Edit3: Since SetHover calls RefreshDay and that calls IsShown and GetDayRect the OnHover rectangle isn't working right. I changed the Day assignment to what I used in PaintDays but it's one day behind. I'll keep messing with it, but this thing has some problems.
Edit4: I found the problem. I reverted everything I did, and started looking at other things because it seemed like something was off by a day. I then looked at what GetDayOfWeek returns and noticed that the values here needed to be swapped. Here's what I changed it to and it works correctly now.
So to recap, change FView.StartDay to default to dwSystem and fix it so the design time value set for StartDayOfWeek can override the default and alter GetDayOfWeek as seen below.
function TNxDatePickerView.GetDayOfWeek(Day: TDateTime): Integer; begin Result := 0; case GetActualStartDay of dwSunday: Result := DayOfTheWeek(Day); dwMonday: Result := DayOfWeek(Day); end; end;