Hier meine Lösung (Lasse ALLE Spalten rückwärts Zeichnen, bis zum Anfang des gerade aktuellen Monats):
Info: Habe 366 Spalten. 1 Spalte = 1 Tag
In dem Ereignis on DrawCell
Delphi-Quellcode:
//Überschriften Monate eintragen
if (ACol > 1) AND (ARow = 0) then
begin
//Datum der Spalte herrausfinden
Datum := EncodeDateDay(strtoint(FormTerMas.CB_UP_Jahr.text), ACol - 1);
//Bis zum ersten eines Monats rückwärts Zeichnen
Rect.Left := Rect.Left + 1 - (6 * (ACol - DayOfTheYear(strtodate('01.' + inttostr(Monthof(Datum)) + '.' + CB_UP_Jahr.Text))));
// Erste Spalte (Width = 125) soll nicht überzeichnet werden. Da stehen die User
if Rect.Left < 126 then Rect.Left := 126;
//Zeichnen
Canvas.FillRect(Rect);
//Text des aktuellen Monats ausgeben
Canvas.TextOut(Rect.Left + 2,Rect.Top + 5, LongMonthNames[Monthof(Datum)]);
end;
Damit es sauberer Aussieht im OnTopLeftChanged-Ereignis:
STG_UP_JahresPlaner.Repaint; //Beim Scrollen des StringGrids immer neu Zeichnen lassen. Ist noch schnell genug
Gruss
Holger
P.S.: Vielleicht weiss ja jemand wie man das optimieren kann ?