Da ist tatsächlich ungefähr das 12 fache an Code drin, von dem was gebraucht würde.
Darf ich Dir bei den Blockern helfen?
1. Nur darstellen wenn etwas gültiges da ist...
Delphi-Quellcode:
Function tagesumrechnung(tag:string; var da:integer):Boolean;
begin
Result := TryStrToInt(tag,da)
end;
wird dann so verwendet:
Delphi-Quellcode:
if tagesumrechnung(tag,da) then
SgAnzeige.Cells[1,(da)] := Form3.JanuarZweiDimArray[da][2];
bitte auch den Unterschied im Zugriff auf JanuarZweiDimArray beachten [da] statt [1]
beim Schreiben ist der gleiche Bug drin, ich hab einfach mal 1 durch tagnr ersetzt
Delphi-Quellcode:
if mo = 3 then
begin
Form3.MärzZweiDimArray[tagnr][1] := (tag);
Form3.MärzZweiDimArray[tagnr][2] := (notiz);
Form3.MärzZweiDimArray[tagnr][3] := (farbe);
end;
Der Rest nur wenn es Dich interessiert....
Allgemein könntest Du den Code auf eine Minimum reduzieren wenn Du nicht für jeden Monat eine eigenes Array verwenden würdest.
es könnte so aussehen, nur als Vorschlag:
Delphi-Quellcode:
Type
TTagesRecord=Record
Text:String;
Farbe:TColor;
end;
TKalenderArray=Array[1..12,1..31] of TTagesRecord;
TJahrRecord=Record
Jahr:Integer;
KalenderArray:TKalenderArray;
end;
TMehrJahresKalender=Array of TJahrRecord;
Die Auswahlcomboboxen würde ich im Style csDropDownList gestalten und vorbelegen.
Nach Übernehmen sollte der Kalender neu "gemalt" werden.
Ein noch einfacherer(speicherschonenderer) Ansatz wäre, nur die erfassten Daten vorzuhalten, das Array bei Bedarf zu vergrößern und bei der Darstellung die passenden Daten herauszufischen.
Delphi-Quellcode:
type
TEintrag=Record
Jahr:Integer;
Monat:Integer;
Tag:Integer;
Text:String;
Farbe:TColor;
end;
TEintraegeArray=Array of TEintrag;